AR voor Horn clause logica Introductie van: Unificatie
2 Hoe variabelen behandelen? Voorbeeld: p veel_werk(huis(p)) groot(huis(p)) p veel_werk(huis(p)) groot(huis(p)) false veel_werk(huis(Bos)) We willen graag besluiten: door middel van veralgemeende modus ponens. false groot(huis(Bos)) Principe: gebruik instantiaties van de 2 Horn clauses, zodanig dat ze wél ‘matchen’.
3 Meer voorbeelden: Vanaf nu laten we universele quantificatie weg, ver- mits alle variabelen universeel gequantificeerd zijn. Enkele voorbeelden met standard modus ponens: verwant(x,y) ouder(x,y) ouder(John,Mary) ouder(John,Mary) verwant(John,Mary) houdtvan(John,x) verwant(John,x) verwant(y,vader(y)) verwant(y,vader(y)) houdtvan(John,vader(John)) Unificatie !!
4 Substituties: Voorbeelden: ={ x / h(g(A)), y / g(A), z / w} = { x / g(z), y / B} Een substitutie is een eindige verzameling koppels van het type variabele / term, zo dat alle variabelen aan de linkerkanten van koppels verschillend zijn. In onze substituties zullen we hier NIET toelaten dat variabelen die links voorkomen ooit in een rechterkant term voorkomen.
5 Substituties toepassen: Substituties kunnen toegepast worden op enkelvoudige expressies (atomen of termen), door het vervangen van alle voorkomens van de linker variabelen door hun corresponderende termen. = { x / g(z), y / B} p(x, f(y, z)) = p(g(z), f(B, z)) ={ x / h(g(A)), y / g(A), z / w} p(x, f(y, z)) =p(h(g(A)), f(g(A), w)) p(x, f(y, z)) = p(h(g(A)), f(g(A), w)) Voorbeelden:
6 Herinner de motivatie: We wensen substituties die atomen gelijk maken. veel_werk(huis(p)) groot(huis(p)) veel_werk(huis(p)) groot(huis(p)) false veel_werk(huis(Bos)) De twee atomen in de clauses: moeten gelijk worden.
7 “Unifiers” Voorbeeld: S = {verwant(John,x), verwant(y, vader(y))} = {y / John, x / vader(John)} is een unifier voor S S = {verwant(John,vader(John))} Gegeven een verzameling van enkelvoudige expressies S, dan noemen we een substitutie een unifier voor S als: S is a singleton
8 Nog een extra verfijning: Voor afleidingsstap: verwant(x,y) ouder(x,y) ouder(John,z) ouder(John,z) hebben we: S = {ouder(x,y), ouder(John,z)} en zijn er verschillende unifiers: = {x / John, y / z} = {x / John, y / Mary, z / Mary} enz. Alleen de meest algemene, , laat de sterkste afgeleide conclusie toe: verwant(John,z)
9 Relatie tussen deze? Voorbeeld: S = {ouder(x,y), ouder(John,z)} = {x / John, y / z} S = {ouder(John,z)} = {x / John, y / Mary, z / Mary} S = {ouder(John,Mary)} Er bestaat een bijkomende substitutie: = {z / Mary} met S = ( S )
10 Meest algemene unifier: Gegeven een verzameling van enkelvoudige expressies S, een meest algemene unifier voor S is een unifier voor S, zó dat voor alle andere unifiers voor S, er een substitutie bestaat zodat: S = (S ) Sleutel-idee: creeer minimale instantiaties! Notatie: = mgu(S), of = mgu(A, B) voor S = {A,B}
11 Veralgemeende modus ponens voor Horn clauses A B1 B2 … Bi … Bn Bi’ C1 C2 … Cm (A B1 B2 … C1 C2 … Cm … Bn) Veralgemeende modus ponens moet verder uitgebreid worden tot: waarin = mgu( Bi, Bi’) Let wel: Bi and Bi’ moet hetzelfde predicaat hebben. Correctheid: wegens correctheid van alle gegronde instantiaties van deze afleiding.
12 Voorbeeld: enkele stappen Bemerk: we zullen variabelen altijd van nieuwe namen voorzien teneinde ‘toevallige’ clashes te vermijden. false veel_werk(huis(x)) veel_werk(huis(y)) groot(huis(y)) false groot(huis(y)) false showm(z) belg(z) showm(Bos) false belg(Bos) Een stap, veel later:
13 Achterwaartse procedure voor Horn clauses Goal := false B1 B2 … Bn ; Repeat Select some Bi atom from the body of Goal Select some clause Bi’ C1 C2 … Cm from Select some clause Bi’ C1 C2 … Cm from T such that = mgu(Bi, Bi’) exists T such that = mgu(Bi, Bi’) exists Goal := false (B1 … Bi-1 C1 C2 … Cm Goal := false (B1 … Bi-1 C1 C2 … Cm Bi+1 … Bn) Bi+1 … Bn) Until Goal = false or no more Selections possible Opnieuw: concrete versies van dit generisch schema vereisen mogelijk backtracking over eerdere selecties, of behandelen het probleem als een algemeen zoekprobleem doorheen de zoekruimte van algeleide doelstellingen.
14 Terug naar het voorbeeld: false veel_werk(huis(x)) europeaan(x) belg(x) rijk(x) showm(x) europeaan(x) groot(huis(x)) rijk(x) veel_werk(huis(x)) groot(huis(x)) false veel_werk(huis(x)) showm(Bos) belg(Bos) veel_werk(huis(x1)) groot(huis(x1)) = { x1 / x} false groot(huis(x)) = { x2 / x} groot(huis(x2)) rijk(x2) false rijk(x) = { x3 / x } rijk(x3) showm(x3) europeaan(x3) false showm(x) europeaan(x) false showm(x) belg(x) europeaan(x4) belg(x4) = { x4 / x } belg(Bos) = { x / Bos } false showm(Bos) showm(Bos) = { } false
15 Waarom variabelen hernoemen? false p(x) p(y) q(z,y) false q(z,y) = {x/y } false p(x) p(y) q(x,y) false q(y,y) = {x/y } Beschouw de afleidingsstap: Probleem: p(y) q(x,y) is equivalent met p(y) q(z,y) en dus kon ook de afleidingsstap: waaruit we een strikt sterkere conclusie krijgen ! Altijd eerst variabelen van disjuncte namen voorzien !!
16 Ander voorbeeld: anc(x,y) parent(x,y) (1) anc(x,y) parent(x,z) anc(z,y) (2) parent(A,B) (3) parent(B,C) (4) false anc(u,v) false parent(x1,z1) anc(z1,y1) (2) {u/x1,v/y1} false anc(B,y1) (3) {x1/A,z1/B} false parent(B,y1) (1) {x2/B,y2/y1} false (4) {y1/C} false parent(x1,y1) (1) {u/x1,v/y1} false (3) {x1/A,y1/B} false (4) {x1/B,y1/C} Verschillende manieren van bewijzen !
17 Volledigheid: Achterwaartse veralgemeende modus ponens, met een volledige zoekmethode over de zoekruimte van de afgeleide doelstellingen en met hernoeming van de variabelen is volledig. Merk op dat het alleen maar semi-beslissend is, want de zoekruimte van doelstellingen kan oneindig groot zijn, dus, in het algemeen, kunnen we hiermee niet beslissen of we tot false kunnen herleiden.
18 Een oneindige afleiding: Voorbeeld: nat(s(x)) nat(x) false nat(u) false nat(x1) {u/s(x1)} false nat(x2) {x1/s(x2)}...
19 Met volledige zoekmethode wel een antwoord voor: Voorbeeld: nat(0) nat(s(x)) nat(x) false nat(u) false nat(x1) {u/s(x1)} false nat(x2) {x1/s(x2)}... false {u/0}{u/0}{u/0}{u/0} {x1/0}
Unificatie Een basis algoritme in Automatische Redeneren
21 Een unificatie algoritme :={ s = t }; mgu:= { s = t }; Stop:= false; Case: t is a variable, s is not a variable: Case: t is a variable, s is not a variable: replace s = t by t = s in mgu; replace s = t by t = s in mgu; Case: s is a variable, t is the SAME variable: Case: s is a variable, t is the SAME variable: delete s = t from mgu; delete s = t from mgu; Case: s is a variable, t is not a variable and Case: s is a variable, t is not a variable and contains s : contains s : Stop:= true; Stop:= true; While not(Stop) and mgu still contains s = t of
22 Unification algorithm (2) If Stop = false : Report mgu ! Case: s is a variable, t is not identical to nor Case: s is a variable, t is not identical to nor contains s and s occurs elsewhere in mgu: contains s and s occurs elsewhere in mgu: replace all other occurrences of s in mgu by t ; replace all other occurrences of s in mgu by t ;... Case: s is of the form f(s1,…,sn), t of g(t1,…,tm): if f g or n m : Stop := true; if f g or n m : Stop := true; else replace s = t in mgu by else replace s = t in mgu by s1 = t1, s2 = t2, …, sn = tn ; s1 = t1, s2 = t2, …, sn = tn ;End_while
23 Voorbeeld 1: Unificeer: p(B,y) en p(x,f(x)) : Init: mgu:= { p(B,y) = p(x,f(x))} Case 5: mgu:= {B = x, y = f(x) } Case 1: mgu:= {x = B, y = f(x) } Case 4: mgu:= {x = B, y = f(B) } Geen cases meer toepasbaar ! p(B,y) en p(x,f(x)) zijn unificieerbaar mgu = { x/B, y/f(B) } resultaat: p(B, f(B))
24 Voorbeelden 2 & 3: Unificeer: p(A) en p(f(x)) : Init: mgu:= { p(A) = p(f(x))} Case 5: mgu:= {A = f(x) } Case 5: Stop:= true NIET unificeerbaar! Unificeer: x en f(x) : Init: mgu:= { x = f(x)} Case 3: Stop:= true NIET unificeerbaar!
25 Terminatie van het algoritme: Stop = true geen unifier expressies waren niet unificeerbaar Geen cases meer toepasbaar: mgu bevat een verzameling gelijkheden van de vorm: {x1 = t1, …, xn = tn} met alle x1,…,xn onderling verschillende variabelen ! De substitutie {x1/t1,…,xn/tn} is een meest algemene unifier voor de initiële s en t. Martelli-Montanari algoritme. Uitbreidbaar voor meer dan 2 expressies.
26 Rekenen met unificatie Voorbeeld: geimpliceerd: mgu = {u/point(1,z)} geimpliceerd: mgu = {u/y,v/y } vertikaal(segment(punt(x,y),punt(x,z))) horizontaal(segment(punt(x,y),punt(z,y ))) u vertikaal(segment(punt(1,2),u)) u,v horizontaal(segment(punt(1,u),punt(2,v)))
27 Representatiekracht van Horn clauses De meeste predicaten logica formules kunnen gemakkelijk hervormd worden tot Horn clauses. Voorbeelden: x cat(x) dog(x) pet(x) x poodle(x) dog(x) small(x) pet(x) cat(x) pet(x) dog(x) dog(x) poodle(x) small(x) poodle(x) MAAR: x human(x) male(x) female(x) x dog(x) ~abnormal(x) has_4_legs(x) ????