Nézzünk pár fogalmat, aztán megpróbálunk kiértékelni egy "egyszerű"(nek tűnő) struktúrában formulákat.
Az előző postban a kvantoros formula kiértékelésekor érezhettük, hogy a "kvantoron belül" a változó már a "kvantortól kapja" az értéket legalábbis abban az értelemben, hogy mire odajut a kiértékelés, már nem számít, hogy mit adott neki eredetileg a struktúrában a φ függvény. Most ezt formalizáljuk le egy kicsit (főleg azért, mert később a bizonyításokban szükség lesz ezekre a fogalmakra és állításokra).
Egy formulában minden változó minden egyes előfordulása vagy szabad lesz, vagy egy kvantorelőfordulás fogja kötni (az "előfordulás" tkp azt jelenti, hogy nem "az x változó" lesz szabad a formulában, hanem a "hatodik karakteren álló x változó", és lehet, hogy a formulában egy máshol levő x meg nem lesz szabad. Kvantorokra ugyanez: fontos lesz, hogy melyik kötött változóelőfordulást melyik kvantor köti le). Informálisan (avagy konyhanyelven): ha egy x változóelőfordulás egy ∃x vagy egy ∀x kvantor hatáskörén belülre (azaz a mögötte álló formulába, amivel konstruáltuk) esik, akkor az az x kötve van; mégpedig, ha több ilyen kvantorelőfordulásnak is beleesik a hatáskörébe, akkor a legbelső ilyen fogja kötni.
Például:
∃x( p(y) ∧ ∃y(q(x,x)) ∧ ∃x(p(x)) )
a formulában az egyes kvantor-előfordulások az ő színükre színezett változóelőfordulásokat kötik. A fekete változóelőfordulás szabad.
Note: a kvantor mellett álló változó nem "változóelőfordulás"!
|
Formálisan: az F formula szabad előfordulásai (persze, hogy F felépítése szerinti indukcióval):
|
Ha ezt így végigjátsszuk a fönti formulára:
|
Egy formula mondat, ha nincs benne szabad változóelőfordulás. |
A szabad változóelőfordulások például azért érdekesek, mert egy A=(A,I,φ) struktúrában ha egy F=F(x1,…,xn) formulát akarunk kiértékelni, akkor A(F) értéke φ-nek csak a φ(x1),…,φ(xn) részétől függ, az F-ben szabadon nem szereplő változóknak mindegy, mi az értéke, ezért azt nem is kell megadni. Ezt a következő posztban be is bizonyítjuk, egyelőre fogadjuk el és nézzük a megígért kiértékelés példát, hosszú lesz:
A jelkészlet, amink van: vannak a +/2 és ×/2 függvényjelek, az 1 konstansjel, az =/2 predikátumjel.
A struktúra, amiben ki akarunk értékelni: N=(N0,I,φ), azaz az alaphalmaz a természetes számok, I(+) és I(×) a szokásos összeadás és szorzás, I(1)=1 (azaz az 1-es jel tényleg az 1-es számot jelöli) I(=) az egyenlőség (más nem is lehet).
A formulák, amiknek megnézzük a szemantikáját ebben a struktúrában (infix írva a bináris függvény- és predikátumjeleket):
Ez a legutolsó pedig egy mondat, tehát a φ nem is kell hozzá, azaz neki "a" természetes számok struktúrájában van egy igazságértéke: igaz akkor, ha végtelen sok "ikerprím" (a 2 különbségű prímeket így hívják) van és hamis, ha csak véges sok. Pl. ikerprímek az (5,7), (11,13), (17,19), (101,103).
Ha megpróbáljuk kiértékelni, hogy ez vajon igaz vagy hamis, akkor (vélhetően) falba ütközünk: a mai napig senki nem tudja, hogy ez az állítás vajon igaz-e.
|
A rövidítés jó dolog: ha kiírjuk ezt az előző formulát fullosan, rövidítés nélkül az eredeti jelekkel, akkor ezt kapjuk kb:
De miért nem adja oda senki egy kiértékelő algoritmusnak ezt a formulát akkor és várja ki a választ? Azért, mert matematikailag be van bizonyítva, hogy ilyen kiértékelő algoritmus nem létezik. Ha ebben a struktúrában (természetes számok, összeadás, szorzás) akarunk kiértékelni egy formulát, arra nem lehet programot írni, ami mindig helyes válasszal jönne vissza és minden formulára megállna.
∀y∃x(∃z(y+z=x) ∧ ¬∃z(∃w(1+1+w=z)∧∃w(z+1+w=x)∧∃w(z×w=x))∧¬∃z(∃w(1+1+w=z)∧∃w(z+1+w=x+1+1)∧∃w(z×w=x+1+1)))
Rövidítéseket használva azért eggyel olvashatóbb volt. De miért nem adja oda senki egy kiértékelő algoritmusnak ezt a formulát akkor és várja ki a választ? Azért, mert matematikailag be van bizonyítva, hogy ilyen kiértékelő algoritmus nem létezik. Ha ebben a struktúrában (természetes számok, összeadás, szorzás) akarunk kiértékelni egy formulát, arra nem lehet programot írni, ami mindig helyes válasszal jönne vissza és minden formulára megállna.
Ez pedig nagyon függ a struktúrától, amiben számolni akarunk:
- a valós számok struktúráján az összeadással és a szorzással van ilyen algoritmus. Lassú, de van.
- a természetes számok struktúráján csak az összeadással, szorzás nélkül, szintén van ilyen algoritmus.
- a valós számok struktúráján az összeadással, a szorzással és az x↦ex függvénnyel nem tudjuk, hogy van-e ilyen algoritmus.
Ezért, mivel a kiértékelés nagyon könnyen kiszámíthatatlanul bonyolulttá válik, ahelyett, hogy egy formulát megpróbálnánk kiértékelni, inkább azt próbáljuk automatikusan bebizonyítani, hogy a formula kielégíthetetlen. Erre érdekes módon több esélyünk van: van olyan algoritmus, ami
- ha az input F formula kielégíthetetlen, akkor arra véges sok idő alatt rájön;
- ha meg kielégíthető, akkor vagy arra jön rá véges sok idő alatt, vagy végtelen ciklusba esik.
A kapcsolódó gyakanyag a hetedik, érdemes hozzáolvasni.
No comments:
Post a Comment