Rezoluce a logické programování (pokračování) Uspořádané klauzule (definite clauses) M Klauzule = množina literálu M Uspořádaná klauzule (definite clause) = posloupnost literálu 3 nelze volně měnit pořadí literálu M Rezoluční princip pro uspořádané klauzule: ______{^A0,...,^An}_______{£, ^£0,...,^£m}______ {^A0,..., -"Aí-i, ^B0p, ..., -*Bmp,-iAi+i,..., ^An}a 3 uspořádaná rezolventa: {^A0,..., -"Aí-i, ^£oP,..., -^Bmp,^Ai+i,..., -^An} potenciální instanciace proměnné ve vstupní cílové klauzuli Výsledná substituce {answer substitution) 0 = 0Q01 • • • 0 n složení unifikací Hana Rudová, Logické programování I, 6. dubna 2009 10 Rezoluce a logické programování Význam SLD-rezolučního vyvrácení P u {G} M Množina P programových klauzulí, cílová klauzule G -• Dokazujeme nesplnitelnost (1) P A (VX)(--Gi(X) v -"G2(X) v ■ ■ ■ v -^Gn(X)) kde G = {-"Gi, ->G2, ■ ■ ■ , "■Gn) a X je vektor proměnných v G Hana Rudová, Logické programování I, 6. dubna 2009 1 1 Rezoluce a logické programování Význam SLD-rezolučního vyvrácení P u {G} M Množina P programových klauzulí, cílová klauzule G -• Dokazujeme nesplnitelnost (1) P A (VX)(--Gi(X) v -"G2(X) v ■ ■ ■ v -^Gn(X)) kde G = {-"Gi, ->G2, ■ ■ ■ , "■Gn) a X je vektor proměnných v G nesplnitelnost (1) je ekvivalentní tvrzení (2) a (3) (2) P h- -G (3)Ph(BÍ)(G!(Í)A---AGn(Í)) Hana Rudová, Logické programování I, 6. dubna 2009 1 1 Rezoluce a logické programování Význam SLD-rezolučního vyvrácení P u {G} M Množina P programových klauzulí, cílová klauzule G M Dokazujeme nesplnitelnost (1) P A (VX)(--Gi(X) v -"G2(X) v ■ ■ ■ v -^Gn(X)) kde G = {-"Gi, ->G2, ■ ■ ■ , "■Gn) a X je vektor proměnných v G nesplnitelnost (1) je ekvivalentní tvrzení (2) a (3) (2) P h -G (3)Ph(3X)(Gi(X)A---AGn(X)) a jedná se tak o důkaz existence vhodných objektů, které na základě vlastností množiny P splňují konjunkci literálů v cílové klauzuli Hana Rudová, Logické programování I, 6. dubna 2009 1 1 Rezoluce a logické programování Význam SLD-rezolučního vyvrácení P u {G} M Množina P programových klauzulí, cílová klauzule G M Dokazujeme nesplnitelnost (1) P A (VX)(--Gi(X) v ^G2{X) v ■ ■ ■ v -^Gn(X)) kde G = {-"Gi, ->G2, ■ ■ ■ , ^Gn} a X je vektor proměnných v G nesplnitelnost (1) je ekvivalentní tvrzení (2) a (3) (2) P h -G (3)Ph(3X)(Gi(X)A---AGn(X)) a jedná se tak o důkaz existence vhodných objektů, které na základě vlastností množiny P splňují konjunkci literálů v cílové klauzuli M Důkaz nesplnitelnosti P u {G} znamená nalezení protipříkladu ten pomocí SLD-stromu konstruuje termy (odpověď) splňující konjunkci v (3) Hana Rudová, Logické programování I, 6. dubna 2009 1 1 Rezoluce a logické programování Výpočetní strategie -• Korektní výpočetní strategie prohledávání stromu výpočtu musí zaručit, že se každý (konečný) výsledek nalézt v konečném čase Hana Rudová, Logické programování I, 6. dubna 2009 12 Rezoluce a logické programování Výpočetní strategie -• Korektní výpočetní strategie prohledávání stromu výpočtu musí zaručit, že se každý (konečný) výsledek nalézt v konečném čase -• Korektní výpočetní strategie = prohledávání stromu do šířky M exponenciální paměťová náročnost M složité řídící struktury Hana Rudová, Logické programování I, 6. dubna 2009 12 Rezoluce a logické programování Výpočetní strategie -• Korektní výpočetní strategie prohledávání stromu výpočtu musí zaručit, že se každý (konečný) výsledek nalézt v konečném čase -• Korektní výpočetní strategie = prohledávání stromu do šířky M exponenciální paměťová náročnost M složité řídící struktury M Použitelná výpočetní strategie = prohledávání stromu do hloubky M jednoduché řídící struktury (zásobník) M lineární paměťová náročnost -• není ale úplná: nenalezne vyvrácení i když existuje s procházení nekonečné větve stromu výpočtu => na nekonečných stromech dojde k zacyklení s> nedostaneme se tak na jiné existující úspěšné uzly Hana Rudová, Logické programování I, 6. dubna 2009 12 Rezoluce a logické programování SLD-rezoluce v Prologu: úplnost -• Prolog: prohledávání stromu do hloubky => neúplnost použité výpočetní strategie -• Implementace SLD-rezoluce v Prologu 3 není úplná logický program: q : -r. (1) r:-q. (2) q. (3) dotaz: : -q. Hana Rudová, Logické programování I, 6. dubna 2009 13 Rezoluce a logické programování Test výskytu -• Kontrola, zda se proměnná vyskytuje v termu, kterým ji substituujeme 3 dotaz : -a(B,B). M logický program: a(X,f(X)). 3 vede k: [B/X], [X/f(X)] M Unifikátor pro g(Xu ...Jn)a g(f(X0,X0),f(Xi,Xi),... ,/(Xn_i,Xn_i)) X\ = f(Xo,Xo), X2 = f(X\,Xi),..., Xn = f(Xn-i,Xn-i) X2 = f(f(Xo,Xo),f(Xo,Xo)), ■ ■ ■ délka termu pro Xk exponenciálně narůstá Hana Rudová, Logické programování I, 6. dubna 2009 14 Rezoluce a logické programování Test výskytu -• Kontrola, zda se proměnná vyskytuje v termu, kterým ji substituujeme 3 dotaz : -a(B,B). M logický program: a(X,f(X)). 3 vede k: [B/X], [X/f(X)] M Unifikátor pro g(Xu ...Jn)a g(f(X0,X0),f(Xi,Xi),... ,/(Xn-i,*n-i)) X\ = f(Xo,Xo), X2 = f(X\,Xi),..., Xn = f(Xn-i,Xn-i) X2 = f(f(Xo,Xo),f(Xo,Xo)), ■ ■ ■ délka termu pro X^ exponenciálně narůstá => exponenciální složitost na ověření kontroly výskytu M Test výskytu se při unifikaci v Prologu neprovádí 3 Důsledek: ?-X = f(X) uspěje s X = f (f (f (f (f (f (f (f (f (f U)))))))))) Hana Rudová, Logické programování I, 6. dubna 2009 14 Rezoluce a logické programování SLD-rezoluce v Prologu: korektnost M Implementace SLD-rezoluce v Prologu nepoužívá při unifikaci test výskytu => není korektní (1) t(X) : -p(X,X). : -t(X). p(Xj(X)). X = /(/(/(/(...)))))))))) problém se projeví Hana Rudová, Logické programování I, 6. dubna 2009 15 Rezoluce a logické programování SLD-rezoluce v Prologu: korektnost M Implementace SLD-rezoluce v Prologu nepoužívá při unifikaci test výskytu => není korektní (1) t(X) : -p(X,X). : -t(X). p(Xj(X)). X = /(/(/(/(...)))))))))) problém se projeví (2) t : -p(X,X). : -t. p(X,f(X)). yes dokazovací systém nehledá unifikátor pro X a f(X) Hana Rudová, Logické programování I, 6. dubna 2009 15 Rezoluce a logické programování SLD-rezoluce v Prologu: korektnost M Implementace SLD-rezoluce v Prologu nepoužívá při unifikaci test výskytu => není korektní (1) t(X) : -p(X,X). : -t(X). p(Xj(X)). X = /(/(/(/(...)))))))))) problém se projeví (2) t : -p(X,X). : -t. p(X,f(X)). yes dokazovací systém nehledá unifikátor pro X a f(X) 3 Řešení: problém typu (2) převést na problém typu (1) ? Hana Rudová, Logické programování I, 6. dubna 2009 15 Rezoluce a logické programování SLD-rezoluce v Prologu: korektnost M Implementace SLD-rezoluce v Prologu nepoužívá při unifikaci test výskytu => není korektní (1) t(X) : -p(X,X). : -t(X). p(Xj(X)). X = /(/(/(/(...)))))))))) problém se projeví (2) t : -p(X,X). : -t. p(X,f(X)). yes dokazovací systém nehledá unifikátor pro X a f(X) 3 Řešení: problém typu (2) převést na problém typu (1) ? -• každá proměnná v hlavě klauzule se objeví i v těle, aby se vynutilo hledání unifikátoru (přidáme X = X pro každou X, která se vyskytuje pouze v hlavě) t: -p(X,X). p(X,f(X)):-X = X. Hana Rudová, Logické programování I, 6. dubna 2009 15 Rezoluce a logické programování SLD-rezoluce v Prologu: korektnost M Implementace SLD-rezoluce v Prologu nepoužívá při unifikaci test výskytu => není korektní (1) t(X) : -p(X,X). : -t(X). p(Xj(X)). X = /(/(/(/(...)))))))))) problém se projeví (2) t : -p(X,X). : -t. p(X,f(X)). yes dokazovací systém nehledá unifikátor pro X a f(X) 3 Řešení: problém typu (2) převést na problém typu (1) ? 3 každá proměnná v hlavě klauzule se objeví i v těle, aby se vynutilo hledání unifikátoru (přidáme X = X pro každou X, která se vyskytuje pouze v hlavě) t: -p(X,X). p(X,f(X)):-X = X. M optimalizace v kompilátoru mohou způsobit opět odpověď „yes" Hana Rudová, Logické programování I, 6. dubna 2009 15 Rezoluce a logické programování Řízení implementace: řez řez se syntakticky chová jako kterýkoliv jiný literal nemá ale žádnou deklarativní sémantiku místo toho mění implementaci programu V ■ -q,\,v- ořezání Hana Rudová, Logické programování I, 6. dubna 2009 16 Rezoluce a logické programování Řízení implementace: řez řez se syntakticky chová jako kterýkoliv jiný literal nemá ale žádnou deklarativní sémantiku místo toho mění implementaci programu P ■ -q,\,v-snažíme se splnit g pokud uspěji => přeskočím řez a pokračuji jako by tam řez nebyl pokud ale neuspěji (a tedy i při backtrackingu) a vracím se přes řez => vracím se až na rodiče : -p. a zkouším další větev ořezání Hana Rudová, Logické programování I, 6. dubna 2009 16 Rezoluce a logické programování Řízení implementace: řez řez se syntakticky chová jako kterýkoliv jiný literal nemá ale žádnou deklarativní sémantiku místo toho mění implementaci programu P ■ -q,Uv. snažíme se splnit q pokud uspěji => přeskočím řez a pokračuji jako by tam řez nebyl pokud ale neuspěji (a tedy i při backtrackingu) a vracím se přes řez => vracím se až na rodiče : -p. a zkouším další větev => nezkouším tedy další možnosti, jak splnit p upnutí => a nezkouším ani další možnosti, jak splnit q v SLD-stromu ořezání ořezání Hana Rudová, Logické programování I, 6. dubna 2009 16 Rezoluce a logické programování Příklad: řez t: -p,r. (D t: -s. (2) p : -q(X),\,v. (3) p : -u,w. (4) q(a). (5) q(b). (6) s. (7) u. (8) :- t. (1}/\(2) :-p,r. «x x :- q(X),!,v,r. a] (5) X • ■ /vr • • (!) - v, r. fail Hana Rudová, Logické programování I, 6. dubna 2009 17 Rezoluce a logické p Príklad a(X) : -b(X,Y),\,c(Y). (D a(X) : -c(X). (2) M2,3). (3) M1.2). (4) c(2). (5) s (X) : -a(X). (6) 5(X) : -p(X). (7) p(B):-q(A,B),r(B). (8) p (A) : -íí(A,A). (9) q(a,a). (10) q(a,b). (11) r (b). (12) Hana Rudová, Logické programování I, 6. dubna 2009 18 II .- b(X,Y),!,c(Y). [X/2.Y/3] (3) .- !,c(3). (rez) :- c(3). fail Rezoluce a logické programování a(X) : -b(X,Y),c(Y),\. a(X) : -c(X). M2,3). M1.2). c(2). 5(A") : -a(X). s(X) : -p(A). p(B):-q(A,B),r(B). p (A) : -íí(A,A). q(a,a). q(a,b). r(b). Hana Rudová, Logické programování I, 6. dubn • • -b(X,Y),, c(Y),L (3)/ \ (4) [X/1 ,Y/2] • ■ c(3),!. • (5) fail • • _ / • • (rez) D [X/11 Rezoluce a logické programování Operační a deklarativní sémantika Operační sémantika -• Operační sémantikou logického programu P rozumíme množinu O(P) všech atomických formulí bez proměnných, které lze pro nějaký cíl Ql odvodit nějakým rezolučním důkazem ze vstupní množiny P u {Q}. Hímto výrazem jsou míněny všechny cíle, pro něž zmíněný rezoluční důkaz existuje. Hana Rudová, Logické programování I, 6. dubna 2009 21 Sémantiky Operační sémantika -• Operační sémantikou logického programu P rozumíme množinu O(P) všech atomických formulí bez proměnných, které lze pro nějaký cíl Ql odvodit nějakým rezolučním důkazem ze vstupní množiny P u {Q}. Hímto výrazem jsou míněny všechny cíle, pro něž zmíněný rezoluční důkaz existuje. -• Deklarativní sémantika logického programu P 11 Hana Rudová, Logické programování I, 6. dubna 2009 21 Sémantiky Opakování: interpretace M Interpretace 1 jazyka L je dána univerzem V a zobrazením, které přiřadí konstantě c prvek D, funkčnímu symbolu f/n n-ární operaci v V a predikátovému symbolu p/n n-ární relaci. * příklad: F = {{f(a,b) = f(b,a)}, {f(f(a,a),b) = a}} interpretace li: D = Z, a := 1, b := -l,f:= " + " Hana Rudová, Logické programování I, 6. dubna 2009 22 Sémantiky Opakování: interpretace M Interpretace 1 jazyka L je dána univerzem V a zobrazením, které přiřadí konstantě c prvek D, funkčnímu symbolu f/n n-ární operaci v V a predikátovému symbolu p/nn-ávn\ relaci. * příklad: F = {{f(a,b) = f(b,a)}, {f(f(a,a),b) = a}} interpretace li: D = Z, a := 1, b := -l,f:= " + " -• Interpretace se nazývá modelem formule, je-li v ní tato formule pravdivá -• interpretace množiny N s obvyklými operacemi je modelem formule ( 0 + s(0) = s(0)) Hana Rudová, Logické programování I, 6. dubna 2009 22 Sémantiky Herbrandovy interpretace -• Omezení na obor skládající se ze symbolických výrazů tvořených z predikátových a funkčních symbolů daného jazyka M při zkoumání pravdivosti není nutné uvažovat modely nad všemi interpretacemi Hana Rudová, Logické programování I, 6. dubna 2009 23 Sémantiky Herbrandovy interpretace -• Omezení na obor skládající se ze symbolických výrazů tvořených z predikátových a funkčních symbolů daného jazyka M při zkoumání pravdivosti není nutné uvažovat modely nad všemi interpretacemi -• Herbrandovo univerzum: množina všech termů bez proměnných, které mohou být tvořeny funkčními symboly a konstantami daného jazyka 3 Herbrandova interpretace: libovolná interpretace, která přiřazuje M proměnným prvky Herbrandova univerza M konstantám sebe samé M funkčním symbolům funkce, které symbolu f pro argumenty ti, ■ ■ ■ , tn přiřadí term f(ti, • • • ,tn) M predikátovým symbolům libovolnou funkci z Herbrand. univerza do pravdivostních hodnot Hana Rudová, Logické programování I, 6. dubna 2009 23 Sémantiky Herbrandovy interpretace -• Omezení na obor skládající se ze symbolických výrazů tvořených z predikátových a funkčních symbolů daného jazyka M při zkoumání pravdivosti není nutné uvažovat modely nad všemi interpretacemi -• Herbrandovo univerzum: množina všech termů bez proměnných, které mohou být tvořeny funkčními symboly a konstantami daného jazyka 3 Herbrandova interpretace: libovolná interpretace, která přiřazuje M proměnným prvky Herbrandova univerza M konstantám sebe samé M funkčním symbolům funkce, které symbolu f pro argumenty ti, ■ ■ ■ , tn přiřadí term f(ti, • • • ,tn) M predikátovým symbolům libovolnou funkci z Herbrand. univerza do pravdivostních hodnot -• Herbrandův model množiny uzavřených formulí T\ Herbrandova interpretace taková, že každá formule z T je v ní pravdivá. Hana Rudová, Logické programování I, 6. dubna 2009 23 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol -• Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol -• Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) 3 li = 0 není model (1) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol -• Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) 3 li = 0 není model (1) 3 12 = {líchy(s(0))} není model (2) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol -• Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) 3 li = 0 není model (1) 3 12 = {líchy(s(0))} není model (2) M 13 = {líchy(5(0)), líchy(5(5(5(0))))} není model (2) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu -• Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant M Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol -• Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) 3 li = 0 není model (1) 3 12 = {líchy(s(0))} není model (2) M 13 = {líchy(5(0)), líchy(5(5(5(0))))} není model (2) M % = {líchy(sn(0))\ne {1,3,5,7,...}} Herbranduv model (1) i (2) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Specifikace Herbrandova modelu Herbrandovy interpretace mají předdefinovaný význam funktorů a konstant Pro specifikaci Herbrandovy interpretace tedy stačí zadat relace pro každý predikátový symbol Příklad: Herbrandova interpretace a Herbranduv model množiny formulí lichy(s(0)). % (1) lichy(s(s(X))) :- lichy(X). % (2) li = 0 12 = {líchy(s(0))} 13 = {líchy(5(0)), líchy(5(5(5(0))))} 14 = {líchy(sn(0))\ne {1,3,5,7,...}} 15 = {líchy(sn(0))\nGN}} není model (1) není model (2) není model (2) Herbranduv model (1) i (2) Herbranduv model (1) i (2) Hana Rudová, Logické programování I, 6. dubna 2009 24 Sémantiky Příklad: Herbrandovy interpretace rodič(a,b). rodic(b,c). predek(X,Y) :- rodic(X,Y). predek(X,Z) :- rodic(X,Y), predek(Y,Z). Hana Rudová, Logické programování I, 6. dubna 2009 25 Sémantiky Příklad: Herbrandovy interpretace rodic(a,b). rodic(b,c). predek(X,Y) :- rodic(X,Y). predek(X,Z) :- rodic(X,Y), predek(Y,Z). li = {rodíc(a,b),rodíc(b,c),predek(a,b),predek(b,c),predek(a,c li = {rodíc(a,b),rodíc(b,c), predek(a, b), predek(b, c), predek(a, c), predek(a, a)} li i ^2 jsou Herbrandovy modely klauzulí Hana Rudová, Logické programování I, 6. dubna 2009 25 Deklarativní a operační sémantika M Je-li S množina programových klauzulí a M libovolná množina Herbrandových modelů S, pak průnik těchto modelů je opět Herbranduv model množiny S. M Důsledek: Existuje nejmenší Herbranduv model množiny S, který značíme M(S). Hana Rudová, Logické programování I, 6. dubna 2009 26 Sémantiky Deklarativní a operační sémantika M Je-li S množina programových klauzulí a M libovolná množina Herbrandových modelů S, pak průnik těchto modelů je opět Herbranduv model množiny S. M Důsledek: Existuje nejmenší Herbranduv model množiny S, který značíme M(S). -• Deklarativní sémantikou logického programu P rozumíme jeho minimální Herbranduv model M(P). Hana Rudová, Logické programování I, 6. dubna 2009 26 Sémantiky Deklarativní a operační sémantika M Je-li S množina programových klauzulí a M libovolná množina Herbrandových modelů S, pak průnik těchto modelů je opět Herbranduv model množiny S. M Důsledek: Existuje nejmenší Herbranduv model množiny S, který značíme M(S). -• Deklarativní sémantikou logického programu P rozumíme jeho minimální Herbranduv model M(P). -• Operační sémantikou logického programu P rozumíme množinu O(P) všech atomických formulí bez proměnných, které lze pro nějaký cíl Ql odvodit nějakým rezolučním důkazem ze vstupní množiny P u {Q}. Hímto výrazem jsou míněny všechny cíle, pro něž zmíněný rezoluční důkaz existuje. Hana Rudová, Logické programování I, 6. dubna 2009 26 Sémantiky Deklarativní a operační sémantika M Je-li S množina programových klauzulí a M libovolná množina Herbrandových modelů S, pak průnik těchto modelů je opět Herbranduv model množiny S. M Důsledek: Existuje nejmenší Herbranduv model množiny S, který značíme M(S). -• Deklarativní sémantikou logického programu P rozumíme jeho minimální Herbranduv model M(P). -• Operační sémantikou logického programu P rozumíme množinu O(P) všech atomických formulí bez proměnných, které lze pro nějaký cíl Ql odvodit nějakým rezolučním důkazem ze vstupní množiny P u {Q}. Hímto výrazem jsou míněny všechny cíle, pro něž zmíněný rezoluční důkaz existuje. -• Pro libovolný logický program P platí M(P) = O(P) Hana Rudová, Logické programování I, 6. dubna 2009 26 Sémantiky