Negace v logickém programování Negativní znalost logické programy vyjadřují pozitivní znalost negativní literály: pozice určena definicí Hornových klauzulí => nelze vyvodit negativní informaci z logického programu ■ každý predikát definuje úplnou relaci ■ negativní literál není logickým důsledkem programu relace vyjádřeny explicitně v nejmenším Herbrandově modelu ' nad(X,Y) :-na(X,Y). na(c,b). nad(X, Y) : -na(X, Z),nad(Z, Y). na(b, a). ■ nej menší Herbrandúv model: {na(b, a),na(c, b),nad(b, a),nad(c,b),nad(c, a)} ani program ani model nezahrnují negativní informaci ■ a není nad c, a není na c ■ i v realitě je negativní informace vyjádřena explicitně zřídka, např. jízdní řád Předpoklad uzavřeného světa neexistence informace chápána jako opak: předpoklad uzavřeného světa (dosed world assumption, CWA) převzato z databází určitý vztah platí pouze když je vyvoditelný z programu. P if A „odvozovací pravidlo" (A je (uzavřený) term): ->A (CWA) pro SLD-rezoluci: P ý= nad(a, c), tedy lze podle CWA odvodit - 0, t\,..., tn jsou termy a Li,... ,Lm jsou literály. Pak označme E(C) výraz 3Yi,Yu(X\ = t\,... ,Xn = tn,L\,... ,Lm) kde Y\,..., ľk jsou všechny proměnné v C. Nechť de f (q In) = {Ci,..., C,}. Pak formuli l¥(q,P) získáme následujícím postupem: q(X1,...,Xn) : -E(Ci) VE(C2) v ■ ■ ■ v E(C,) pro j > 0a q(X\,... ,Xn) '■ - □ pro j = 0 [q/n není v programu P Hana Rudová, Logické programování I, 6. května 2010 7 Negace v logickém programování Clarkova Teorie Rovnosti (CET) všechny formule jsou univerzálně kvantifikovány: 1. X = X 2. X=Y^Y = X 3. X=YaY = Z^X = Z 4. pro každý f/m: Xi = Yx A ■ ■ ■ A Xm = Ym - f(Xu ..., Xm) = f(Ylt..., Ym) 5. pro každý p/m: Xx = Yx A ■ ■ ■ A Xm = Ym - (p(Xlt...,Xm) - p(Ylt..., Ym)) 6. pro všechny různé f/m. a g/n, (m, n > 0): f(X\,... ,Xm) ± g(Y\,..., Yn) 7. pro každý f/m: f(X1,...,Xm) = f(Y1,...,Ym) —► X\ = Y\ /\ ■ ■ ■ /\ Xm = Ym 8. pro každý term ř obsahující X jako vlastní podterm: ř ^ X X ± Y je zkrácený zápis -<(X = Y) Hana Rudová, Logické programování I, 6. května 201 0 8 Negace v logickém programován Korektnost a úplnost NF pravidla Korektnost NF pravidla: Nechť P logický program a : -A cíl. Jestliže : -A má definitivně neúspěšný SLD-strom, pak V(-iA) je logickým důsledkem comp(P) (nebo-li comp(P) i= V(-iA)) Úplnost NF pravidla: Nechť P je logický program. Jestliže comp(P) i= V(-iA), pak existuje definitivně neúspěšný SLD-strom : -A. ■ zůstává problém: není rozhodnutelné, zda daná atomická formule je logickým důsledkem daného logického programu. ■ teorém mluví pouze o existenci definitivně neúspěšného SLD-stromu ■ definitivně (konečně) neúspěšný SLD-strom sice existuje, ale nemusíme ho nalézt ■ např. v Prologu: může existovat konečné odvození, ale program přesto cyklí (Prolog nenajde definitivně neúspěšný strom) Odvození pomocí NF pouze test, nelze konstruovat výslednou substituci ■ v (comp(P) i= V(-vl)) je A všeob. kvantifikováno, v V(-vl) nejsou volné proměnné Hana Rudová, Logické programování I, 6. května 2010 Negace v logickém programování St ratifikované programy II program je m-stratifikovaný m je nejmenší index takový, že So u ... u Sm je množina všech predikátových symbolů z P Věta: Zúplnění každého stratifikovaného programu má Herbrandův model. ■ p :-~p. zúplnění: p «- -ip rozdělení programu na vrstvy ■ vynucují použití negace relace pouze tehdy pokud je relace úplně definovaná a. a: --li?, a. b. a. a: --ifc, a. b : --ifl. stratifikovaný není stratifikovaný normální program P je stratifikovaný: množina predikátových symbolů programu lze rozdělit do disjunktních množin So,...,Sm (Si = stratům) ■ p(...):-..., q(...),... e P, p e Sk => q e S0 u ... u Sk ■ p(...):-..., -. q e S0 u ... u Sk-i Hana Rudová, Logické programování I, 6. května 2010 Negace v logickém programován SLDNF rezoluce: úspěšné odvození ■ NF pravidlo: : - C. má konečně neúspěšný SLD-strom ■ Pokud máme negativní podcíl - neúspěšné odvození Hana Rudová, Logické programování I, 6. května 2010 13 Negace v logickém programování SLD+ odvození ■ P je normální program, Go normální cíl, R selekční pravidlo: SLD+-odvození Go je buď konečná posloupnost (Go; Co),..., (Gj-i; Cí-i), Gi nebo nekonečná posloupnost ,,,... kde v každém kroku m + l(m > 0), R vybírá pozitivní literál v Gm a dospívá k Gm+\ obvyklým způsobem. ■ konečné SLD+-odvození může být: 1. úspěšné: Gi = □ 2. neúspěšné 3. blokované: Gi je negativní (např. -^A) Hana Rudová, Logické programování I, 6. května 2010 1 5 Negace v logickém programování SLDNF rezoluce: uvázlé odvození ■ NF pravidlo: : - C. má konečně neúspěšný SLD-strom ■ Pokud máme negativní podcíl - uvázlé odvození Hana Rudová, Logické programování I, 6. května 201 0 1 4 Negace v logickém programování SLDNF rezoluce: pojmy ■ Úroveň cíle ■ P normální program, Go normální cíl, R selekční pravidlo: úroveň cíle Go se rovná ■ 0 žádné SLD+-odvození s pravidlem R není blokováno ■ k + 1 maximální úroveň cílů : -A, které ve tvaru -,..., (Gi, e>,(: — Li,..., Lm_i, Lm+i,..., Ln) je (úspěšné) SLDNF odvození cíle Go ■ e označuje prázdnou cílovou substituci Hana Rudová, Logické programování 1,6. května 2010 17 Negace v logickém programování Korektnost a úplnost SLDNF odvození korektnost SLDNF-odvození: P normální program, : -G normální cíl a R je selekční pravidlo: je-li 9 cílová substituce SLDNF-odvození cíle : -G, pak G9 je logickým důsledkem comp(P) ■ implementace SLDNF v Prologu není korektní ■ Prolog neřeší uvázlé SLDNF-odvození (neprázdná substituce) ■ použití bezpečných cílů (negace neobsahuje proměnné) úplnost SLDNF-odvození: SLDNF-odvození není úplné ■ pokud existuje konečný neúspěšný strom : -A, pak -iA platí ale místo toho se odvozování: -A může zacyklit, tj. SLDNF rezoluce -iA neodvodí => -iA tedy sice platí, ale SLDNF rezoluce ho nedokáže odvodit Typy SLDNF odvození Konečné SLDNF-odvození může být: 1. úspěšné: Gi = □ 2. neúspěšné 3. uvázlé (flounder): Gj je negativní (-*A) a : -A je úspěšné s neprázdnou cílovou substitucí 4. blokované: Gi je negativní (-*A) a : -A nemá konečnou úroveň. Hana Rudová, Logické programování I, 6. května 2010 Negace v logickém programování Hana Rudová, Logické programování 1,6. května 2010 19 Negace v logickém programování