Thursday, March 12, 2020

06 - Elsőrendű normálformák

previously on Heroes
Tehát most a célunk az, hogy egy következtető rendszert adjunk meg, ami elsőrendű logikai formulák egy Σ halmazára és egy F célformulára ha ΣF igaz, akkor arra előbb-utóbb rájön, ha meg nem következmény, akkor nem jön ki azzal a válasszal, hogy "következménye".
(Olyan algoritmus matematikailag igazoltan nincs, ami arra is garantáltan rájönne, hogy nem következménye egy formula egy másiknak, itt a legjobb amit remélhetünk, az az, hogy vagy rájön az algoritmus, hogy nem következmény, vagy végtelen ciklusba esik.)

Erre a problémára (ezen a kurzuson) kétféle rezolúciós algoritmust fogunk nézni: az egyiknek a neve "alap rezolúció" lesz, a másiké meg (ravasz módon) "elsőrendű rezolúció". Mindkettő, hasonlóan az ítéletkalkulus-beli változatukhoz, arra lesz jó, hogy egy input formulahalmazról megmutassa, hogy kielégíthetetlen, azzal, hogy levezeti belőle az üres klózt.

Ugyanúgy, ahogy a ítéletkalkulus rezolúciós algoritmusához is egy ottani normálformára (CNF-re) kellett hozni az inputot, itt is: ezt a normálformát zárt Skolem (ejtsd: Szkólem) alaknak hívják.
Ebben a posztban megnézzük, hogy hogyan hozunk egy formulát zárt Skolem alakúra, az eredmény "magját" pedig CNF-re, a következőben pedig bebizonyítjuk, hogy amit csinálunk, az jó lesz, ha az input kielégíthetetlenségét akarjuk bizonyítani. (Ez most nem lesz ekvivalens az inputtal, amit gyártunk, de "majdnem". Ezt a következőből megértjük.)

Tehát, induljunk ki egy formulából, az algoritmust példán keresztül is visszük végig. Legyen mondjuk ez:
x(yp(f(x),y) r(x))  xy(p(y,f(x))q(z))  ¬q(z)  z¬r(z).
  1. Elimináljuk a és konnektívákat a szokásos
    FG¬FGFG(¬FG)(F¬G)
    azonosságokkal.

    Most ennek az eredménye ezen a formulán  az egyetlen konnektíva kiütése után:
    x(¬yp(f(x),y) r(x))  xy(p(y,f(x))q(z))  ¬q(z)  z¬r(z)
  2. Kiigazítás: Átnevezzük a változókat, hogy különböző kvantor előfordulások különböző változókat kössenek le, és ne legyen olyan változó sem, ami szabadon is és kötötten is előfordul. A szabad változókat nem nevezhetjük át.
    Ennek egy módja pl (ha az input formulánkban amúgy nincsenek indexelve a változók), hogy indexeljük az összes kötött változót, akár 1-től kezdve sorfolytonosan, minden egyes kvantornál növelve az indexet, akár változónként külön-külön indexet vinni, mindegy, csak ne legyen névütközés.
    Arra persze figyeljünk oda, hogy ha egy kvantor mellett álló változót átnevezünk valamire, akkor pontosan azokat a változóelőfordulásokat kell átneveznünk ugyanerre, melyeket ez a kvantorelőfordulás köt.

    A munkaformulánkon ennek a lépésnek ez lesz (pl) az eredménye:
    x1(¬y2p(f(x1),y2) r(x1))  x3y4(p(y4,f(x3))q(z))  ¬q(z)  z5¬r(z5)
    Itt most minden kvantorelőfordulás egy közös indexet növelt. Látszik, hogy a z az egyetlen változó, mely előfordul szabadon is, de azt kétszer teszi. Nem baj.
  3. Prenex alakra hozás: ennek a lépésnek az a célja, hogy az összes kvantor a formula elejére kerüljön. Ezt tehetjük pl. a következő kvantorkihúzási azonosságokkal, amik akkor igazak, ha a formula kiigazított:
    (QxF)GQx(FG)F(QxG)Qx(FG)¬xFx¬F¬xFx¬F
    Ha ezeket a szabályokat alkalmazgatjuk a munkaformulánkon, akkor ilyesmi lépéseket kapunk:
    x1(¬y2p(f(x1),y2) r(x1))  x3y4(p(y4,f(x3))q(z))  ¬q(z)  z5¬r(z5)
     x1(y2¬p(f(x1),y2) r(x1))  x3y4(p(y4,f(x3))q(z))  ¬q(z)  z5¬r(z5)
     x1y2(¬p(f(x1),y2) r(x1))  x3y4(p(y4,f(x3))q(z))  ¬q(z)  z5¬r(z5)
    és ezen a ponton van négy formulánk éselve, mindnek az elején kvantorok, kihozzuk mindet:
     x1y2x3y4z5((¬p(f(x1),y2) r(x1))  (p(y4,f(x3))q(z))  ¬q(z)  ¬r(z5))

    Egy másik módszer, ami kézzel végrehajtva gyorsabb kicsit, ha az ember átlátja a formulát (programmal mindenképp gyorsabb, ha a formulánkat fában reprezentáljuk):
    • fogjuk az eredeti kigazított, nyílmentesített formulát
    • a benne levő kvantált változókat balról jobbra, az eredeti deklarációs sorrendben kötjük le
    • egy változót lekötő kvantor "megfordul" (-ből lesz és fordítva), ha páratlan sok ¬ jel hatáskörébe esik; ha pároséba, akkor nem fordul meg
    • végül, a formula magját (így hívják a prenex formuláknak azt a részformuláját, amelyikben már épp nincs kvantor) úgy kapjuk, hogy az eredeti formulából kitöröljük a kvantorokat.
    Ezt végrehajtva az előzőre: kiindulunk ebből
    x1(¬y2p(f(x1),y2) r(x1))  x3y4(p(y4,f(x3))q(z))  ¬q(z)  z5¬r(z5)
    a sorrend x1, y2, x3, y4, z5 lesz; három negálás van a formulában, nincsenek egymásba ágyazva, így ezt most egyszerű látni, hogy csak az y2 az egyetlen kvantált változó, aki páratlan sok (egy) negálás belsejében van, így ő az egyetlen, aki megfordul. A kvantor prefix tehát x1y2x3y4z5 lesz. Utánaírjuk a formulánkat úgy, hogy kitöröljük a kvantorokat éééés:
    x1y2x3y4z5((¬p(f(x1),y2) r(x1))  (p(y4,f(x3))q(z))  ¬q(z)  ¬r(z5))
    yep, ugyanaz lett, mint az előbb.
  4. Skolem alakra hozás: ennek a lépésnek a célja, hogy csak -kvantorok maradjanak a formulában (és persze maradjon prenex alakban). Az előző lépések ekvivalens átalakítások voltak, ez már nem lesz az. Ahogy csináljuk:
    • kiindulunk a prenex, kiigazított alakból
    • minden egyes y-ra
      • kitöröljük az y-t a formula elejéről
      • és y minden előfordulásának helyébe a magban egy f(x1,,xn) termet írunk
      • ahol is f egy teljesen új függvényjel (amit Skolem függvénynek is hívnak), amit most generáltunk -- ha egyszerre több formulát hozunk Skolem alakra, akkor meg kell nézni, hogy egyikben sem szerepelhet! Ha több Skolem függvényjelet generálunk, akkor mind egymástól is különböző kell legyen!
      • az x1,,xn változók pedig azok, akik az y előtt (attól balra) vannak kvantorral kötve a formulában.
    nézzük ezt a munkaformulánkon, itt tartunk:
    x1y2x3y4z5((¬p(f(x1),y2) r(x1))  (p(y4,f(x3))q(z))  ¬q(z)  ¬r(z5))
    sok dolgunk nincs ezzel most, egyetlen kvantor van benne, ami x3-at köti. Keresünk egy új függvényjelet, amit még nem használunk, ez pl most lehet g (f viszont nem), és függni fog x1-től és y2-től, mert azok vannak x3 előtt univerzálisan deklarálva. Tehát, töröljük a x3 részt és a formulában x3 minden előfordulása helyébe g(x1,y2)-t írunk:
    x1y2y4z5((¬p(f(x1),y2) r(x1))  (p(y4,f(g(x1,y2)))q(z))  ¬q(z)  ¬r(z5))
    ez így most kész is, a formula Skolem alakú.
  5. Lezárás: ennek a lépésnek a célja, hogy ne legyen szabad változónk. Ezt úgy érjük el, hogy minden x szabad változóelőfordulás helyébe egy új, x-től függő konstanst, pl. cx-et írunk. Szintén fontos, hogy a konstans új legyen, itt viszont ha több formulában is szerepel szabadon ugyanaz az x, akkor mindegyikben ugyanazt a cx-et kell írjuk a helyébe!

    Folytatva az előző példánkat: z az egyetlen szabadon előforduló változó, ő kétszer is szerepel, helyére bekerül a cz konstans:
    x1y2y4z5((¬p(f(x1),y2) r(x1))  (p(y4,f(g(x1,y2)))q(cz))  ¬q(cz)  ¬r(z5))
  6. A mag CNF-re hozása: teljesen ugyanazzal a módszerrel, mint ítéletkalkulusban, a zárt Skolem alakú formulánk magját CNF-re hozzuk. Most
    • literál minden atomi formula (ők pozitívak) és azok negáltjai (ők negatívak), vagyis a predikátumjellel kezdődő, vagy esetlegesen negált predikátumjellel kezdődő részek
    • klóz továbbra is véges sok literál vagyolása
    • a CNF pedig továbbra is klózok éselése
  7. Ha megnézzük, a mostani munkaformulánkban literálok pl. a ¬p(f(x1),y2), az r(x1), a p(y4,f(g(x1,y2))), a q(cz), a ¬q(cz) és a ¬r(z5), de most teljesen jól vannak, literálok vannak vagyolva egy- vagy kéttagú klózokká, és ilyen klózból van négy. Akár le is írthatjuk őket egy Σ klózhalmazba, ugyanúgy halmazként reprezentálva mindent, mint ítéletkalkulusban tettük:
    {{¬p(f(x1),y2),r(x1)}, {p(y4,f(g(x1,y2))),q(cz)}, {¬q(cz)}, {¬r(z5)}}.
Ez minden; mindkét rezolúciós algoritmus ebben a formátumban, zárt Skolem alakú formulákként, melyeknek a magját CNF-re hoztuk és az összes klózt egy Σ halmazba tesszük. Hogy mit tesznek vele, azt meglátjuk, miután megnézzük, hogy ezek az átalakítások tényleg jók lesznek nekünk.
A kapcsolódó gyakanyag a hetedik és a nyolcadik és érdemes lehet nyomkodni itt a "Generálj Skolemest!" gombot, hogy biztos értsük a zárt Skolem normálformára hozás minden részletét. (Itt nem kell CNF-re hozni a magot.)

No comments:

Post a Comment