previously on Heroes
Ugyan maga a "skolemizálás", aka zárt Skolem alakra hozás egy egyszerű algoritmusnak tűnik, formálisan bebizonyítani, hogy "helyes", mégsem olyan egyszerű.
Ugyan maga a "skolemizálás", aka zárt Skolem alakra hozás egy egyszerű algoritmusnak tűnik, formálisan bebizonyítani, hogy "helyes", mégsem olyan egyszerű.
Az outputja pl. nem lesz ekvivalens az eredeti formulával (vagy formulahalmazzal), hanem csak úgynevezett s-ekvivalens lesz (az "s" betű a "satisfiability"-ból, mint "kielégíthetőség" jön) :
Két formula, F és G s-ekvivalensek, jelben F≡sG, ha
- vagy mindkettő kielégíthető,
- vagy mindkettő kielégíthetetlen.
A terv az, hogy megmutassuk: ha egy formulát skolemizálunk, akkor az eredmény az eredetivel s-ekvivalens lesz.
Addig, hogy a nyilakat elimináltuk, nincs gond: ezt az ekvivalenciát már régről ismerjük, tetszőleges A struktúrára A(F→G)=A(¬F∨G), és mindkettő pontosan akkor lesz igaz, ha A(F)≤A(G).
A változóátnevezéssel gondok vannak: érzi az ember, hogy egy egyszerű refaktorral nem lehet gond... vagy mégis? Ha például a ∃x(x<y) formulában az x változót mondjuk épp y-ra akarjuk átnevezni, a kapott ∃y(y<y) formula nem lesz vele ekvivalens, hiszen pl. az első igaz az egész számok struktúráján, bármi is φ(y), bármilyen egész szánnál van kisebb, a második meg hamis ezen a struktúrán.Vagy egy eggyel összetettebb példa: a ∃x(p(x)∧∃y(x<y)) formulában is ha az x változót épp y-ra akarjuk átnevezni és csak átírjuk, akkor a kapott ∃y(p(y)∧∃y(y<y)) formula megint csak nem lesz ekvivalens az eredetivel...viszont, ha mindenáron y-ra akarjuk átnevezni, és a másik y-t ezzel egyidőben mondjuk z-re átnevezzük, akkor a katpott ∃y(p(y)∧∃z(y<z)) formula ekvivalens lesz az eredetivel.
A Skolem alakra hozáskor pedig egy változó helyére egy komplett termet írunk be, jó lenne, ha ezt a két dolgot (változóátnevezés + Skolem függvény bevezetése változó helyébe) egyben tudnánk bebizonyítani, hogy jó ötlet. Erről fog szólni a helyettesítés, aminek először megnézzük a (tádáááá felépítés szerinti indukciós) definícióját, és aztán kiderül, hogy miért is olyan jó. Persze mivel a formulákon belül termek vannak, először termekre nézzük meg, hogy mit is jelent egy termben egy változót egy termre helyettesíteni:
Ha u egy term, x egy változó és t egy term, akkor u[x/t] egy termet jelöl, melyet a következőképp kapunk (u felépítése szerinti indukcióval):
|
Nézzük meg ezt egy példán: ha az u=g(c,f(x,y),g(x)) termen hajtjuk végre az [x/h(z)] helyettesítést, akkor az u[x/h(z)] termet így kapjuk: g(c,f(x,y),g(x))[x/h(z)]=g(c[x/f(z)],f(x,y)[x/h(z)],g(x)[x/h(z)])összetett term subst def=g(c,f(x[x/h(z)],y[x/h(z)]),g(x[x/h(z)]))összetett term subst, note konstans: eltűnik=g(c,f(h(z),y),g(h(z)))változó substok |
Más lesz a helyzet a formuláknál:
Ha F egy formula, x egy változó és t egy term, akkor F[x/t] egy formulát jelöl, melyet a következőképp kapunk F felépítése szerinti indukcióval:
|
(∃xp(x,y) ∧ ∀yq(x,y) ∧ ∃zr(x,y))[x/f(y)]=(∃xp(x,y))[x/f(y)] ∧ (∀yq(x,y))[x/f(y)] ∧ (∃zr(x,y))[x/f(y)]éselésen átmegy=(∃xp(x,y)) ∧ (∀yq(x,y))[x/f(y)] ∧ (∃zr(x,y))[x/f(y)]a kötött előfordulások békén maradnak=(∃xp(x,y)) ∧ (∀z(q(x,y)[y/z][x/f(y)])) ∧ (∃zr(x,y)[x/f(y)])kötő t-beli kvantor változóját átnevezzük, másikon átmegyünk=(∃xp(x,y)) ∧ (∀z(q(x,z)[x/f(y)])) ∧ (∃zr(x[x/f(y)],y[x/f(y)]))=(∃xp(x,y)) ∧ (∀z(q(f(y),z))) ∧ (∃zr(f(y),y))
|
Ez ugyanazt eredményezi, mint ha:
- a szabad x előfordulásokat mindet t-re cseréljük,
- és ha így egy "lecserélt" t-ben egy változó "lekötődne", akkor az őt "véletlenül" lekötő kvantor változóját (ilyen több is lehet, ha t-ben van több változó is) átnevezzük valami egészen újra.
folytköv
No comments:
Post a Comment