Lineární rezoluce další způsob zjemnění rezoluce; místo stromu směřujeme k lineární struktuře důkazu Lineární rezoluční odvození (důkaz) z Ë je posloupnost dvojic ¼ ¼ Ò Ò taková, že Ò ½ a 1. ¼ a všechna jsou z Ë nebo nějaké, kde, 2. každé ½ Ò, je rezolventou a. je lineárně odvoditelná z Ë (Ë Ä ), existuje-li lineární odvození z Ë. Lineární Ë vyvrácení je Ë odvození Ä ¾. Prvky Ë budeme nazývat vstupní klauzule, střední a boční klauzule. popel, glum & nepil 16/28
příklad: lineární vyvrácení množiny Lineární rezoluce: příklad Ë Ô Õ Ô Õ Ô Õ Ô Õ Ô Õ Ô Õ Ô Ô Õ Õ Ô Õ Ô Ô ¾ lineární rezoluce je korektní a úplná popel, glum & nepil 17/28
Hornovy klauzule a Prolog omezení na určitý typ klauzulí používaných v programovacím jazyce Prolog Hornova klauzule je klauzule s nejvýše jedním pozitivním literálem. Ô Õ Ö Příklad: Běžný zápis ve výrokové logice Ô Õ Ö lze ekvivalentními úpravami převést na Ô Õ Öµ a dále na Ô Õ Ö, což v Prologu zapisujeme p :- q, r. typy Hornových klauzulí: programové s právě jedním pozitivním literálem dále dělíme na * fakta bez negativních lit. (př.: Ô, v Prologup.) * pravidla s alespoň jedním negativním lit. (př.: Ô Õ,p :- q.) cíle bez pozitivního literálu (př.: Ô,:- p. resp.?- p.) Každá nesplnitelná množina neprázdných Hornových klauzulí musí obsahovat alespoň jeden fakt a alespoň jeden cíl. popel, glum & nepil 18/28
Prolog Prologovský program È : fakta + pravidla. Zajímá nás, co lze z È odvodit obecně zda z něj vyplývá konjunkce Õ faktů Õ ¾ Õ Ò ½. Zadáme dotaz Õ ½ Õ ¾ Õ Ò a obdržíme příslušnou odpověď (zpravidla yes/no). Prolog přidá cílovou klauzuli Õ ½ Õ ¾ Õ Ò k È a zjišťuje nesplnitelnost È. Věta: je-li È prologovský program a Õ ½ Õ ¾ Õ Ò cílová klauzule, pak Õ všechna jsou È důsledkem právě tehdy, È když je nesplnitelná. pro prologovské programy (Hornovy klauzule) je v důkazu nesplnitelnosti nezbytné použít zadaný cíl; budeme tedy klást další požadavky na lineární rezoluci Nechť È je množina programových klauzulí a cílová klauzule. Lineární vstupní rezoluce (LI-rezoluce) Ë È množiny je lineární vyvrácení Ë, které začíná klauzulí a bočními klauzulemi jsou pouze klauzule z È. popel, glum & nepil 19/28
LI-rezoluce: vlastnosti LI-rezoluce je korektní, ale pro obecné klauzule není úplná; Ë Ô Õ Ô Õ Ô Õ Ô Õ příklad: je nesplnitelná, ale LI-rezoluční vyvrácení Ë neexistuje Ô Õ Ô Õ Õ Ô Õ Ô Ô Õ Õ Ô Õ Ô... Ô Õ LI-rezoluce je úplná pro Hornovy klauzule popel, glum & nepil 20/28
,Implementace Hornových klauzulí a rezoluce upravíme doposud používané struktury a mechanismy tak, aby byly dobře strojově zpracovatelné množiny reprezentující klauzule nahradíme uspořádanými klauzulemi (definite clauses), např. Ô Õ Ö místo Ô Õ Ö použijeme rezoluce pro uspořádané klauzule: mějme Ô ½ Ô ¾ Ô Ò a À Õ Õ ½ Õ ¾ Õ Ñ, rezolventou a À pro Ô Õ bude uspořádaná klauzule Ô ½ Ô ¾ Ô ½ Õ ½ Õ ¾ Õ Ñ Ô ½ Ô Ò Je-li È množina uspořádaných klauzulí, pak LD-rezoluční vyvrácení È je posloupnost ¼ ¼ Ò Ò uspořádaných klauzulí taková, že ¼, Ò ½ ¾, ¾ È a každé ½ Ò, je rezolventou uspořádaných klauzulí ½ a ½. popel, glum & nepil 21/28
LD a SLD-rezoluce úplnost LD-rezoluce: nechť È je množina programových klauzulí, cílová klauzule. È Je-li nesplnitelná, pak existuje LD-rezoluční vyvrácení È začínající. další problém při strojovém zpracování: výběr literálu, na kterém se bude rezolvovat selekční pravidlo Ê je libovolná funkce, která vybere literál z každé uspořádané cílové klauzule SLD-rezoluce je lineární vstupní rezoluce se selekčním pravidlem SLD-rezoluční vyvrácení È pomocí selekčního pravidla Ê je LD-rezoluční vyvrácení ¼ Ò Ò ¼, ¼, Ò ½ ¾, kde Ê µ je literál, na kterém rezolvujeme v ½-ním kroku. Pozn.: bez explicitní definice Ê se vybírá nejlevější literál. popel, glum & nepil 22/28
SLD-rezoluce, SLD-stromy úplnost SLD-rezoluce pro Prolog: nechť È je množina programových klauzulí, cílová klauzule, Ê libovolné selekční pravidlo. Je-li È nesplnitelná, pak existuje SLD-rezoluční vyvrácení È pomocí Ê. Prostor všech možných SLD-derivací při vyhodnocování daného cíle v Prologu pro È program lze reprezentovat Ì stromem, který označujeme jako SLD-strom pro program È a cíl. Ì má v kořeni. Je-li libovolný uzel Ì označen ¼, pak jeho bezprostřední následníci jsou označeni výsledkem rezoluce nejlevějšího literálu ¼ se všemi použitelnými klauzulemi z È. popel, glum & nepil 23/28
SLD-stromy: příklad I Příklad: mějme následující program (klauzule jsou pro přehlednost očíslovány): 1. p:- q, r. 2. p:- s. 3. q. 4. q:- s. 5. r. 6. s:- t. 7. s. a dotaz?- p. (tedy Ô ) popel, glum & nepil 24/28
SLD-stromy: příklad II odpovídající SLD-strom: Ô 1. 2. Õ Ö 3. 4. 6. 7. Ø ¾ Ö Ö 5. 6. 7. neúspěch 5. ¾ Ø Ö Ö neúspěch ¾ popel, glum & nepil 25/28
Backtracking úspěšné cesty v SLD-stromu jsou ty, které končí ¾, ostatní cesty jsou neúspěšné Vyhodnocovací mechanismus Prologu prochází SLD-strom do hloubky zleva doprava a hledá (první) úspěšnou cestu (backtracking). Existuje-li více programových klauzulí, se kterými může vybraný literál rezolvovat, vybere se první z těchto klauzulí (dle pořadí, jak jsou uvedeny v programu). Pokud mechanismus při procházení stromu narazí na neúspěšnou větev, dojde k backtrackingu výpočet se vrátí zpět do nejbližšího uzlu Æ, kde je k dispozici možnost volby, a pokračuje z Æ cestou těsně vpravo od té, která právě selhala. Tento proces se opakuje, dokud není nalezena úspěšná větev (resp. do prozkoumání celého stromu). vyhodnocení cíle?- p. z předchozího příkladu projde hranami označenými 1.,3.,5. a skončí úspěchem (systém odpoví,yes ). popel, glum & nepil 26/28
Backtracking: příklad Odstraníme-li z předchozího programu 3. klauzuli, získáme pro cíl?- p. následující SLD-strom. Vyhodnocení projde přes 1.,4.,6., narazí na neúspěch, vrací se do Ö, projde hranami 7.,5. a úspěšně skončí. Ô 1. 2. Õ Ö 4. 6. 7. Ø Ö ¾ 6. 7. neúspěch 5. Ø Ö Ö neúspěch ¾ popel, glum & nepil 27/28
Prolog: poznámky zadáním středníku (;) po úspěšném vyhodnocení cíle vynutíme backtracking a hledání alternativního důkazu odpověď,no systému znamená, že daný cíl není logickým důsledkem programu (resp. že nemá alternativní důkaz po předchozím zadání středníku) prologovská strategie prohledávání stavového prostoru může vést k zacyklení (i v případě, že existují úspěšné větve) příklad: program q:- r. r:- q. q. cyklí pro zadaný cíl?- q. popel, glum & nepil 28/28