De stap naar: resolutie AR: clausale logica De stap naar: resolutie
Clausale vorm Veralgemeende vorm van de formules: x1 … xk A1 A2 … Am B1 B2 … Bn Horn clauses is het bijzonder geval met m = 1 We veronderstellen dat S = T {~F} alleen bestaat uit clausale formules. Doel: bewijs dat S inconsistent is.
Voorbeeld: Moore’s probleem Gegeven 3 blokken: Blauw of Rood Bewijs dat er een blauw blok naast een rood blok staat!
Moore’s probleem (2): In clausale vorm: Bewijs: blauw(Blok1) rood(Blok3) blauw(Blok2) rood(Blok2) naast(Blok1,Blok2) naast(Blok2,Blok1) naast(Blok2,Blok3) naast(Blok3,Blok2) Bewijs: of false naast(b1,b2) blauw(b1) rood(b2) is inconsistent. b1 b2 naast(b1,b2) blauw(b1) rood(b2) PROBLEEM: Modus ponens is niet geschikt voor blauw(Blok2) rood(Blok2) Dit zou een geval-analyse vereisen!
Introductie van negatie in bodies is equivalent: Voorbeeld: hoog_gequalificeerd(x) phd(x) vroeg_verdienen(x) ~phd(x) rijk(x) hoog_gequalificeerd(x) rijk(x) vroeg_verdienen(x) (1) (2) (3) (4) Waarom equivalent? (2) is equivalent met verdienen(x) phd(x) vanwege A ~B A B Bewijs: rijk(Ik)
Disjunctie versus negatie in het algemeen: x1 … xk A1 A2 … Am B1 B2 … Bn is equivalent aan: x1 … xk A1 B1 B2 … Bn ~A2 … ~Am of ook aan: x1 … xk Ai B1 B2 … Bn ~A1 .. .. ~Am Bewijs: A ~B A B en basis relaties tussen , and ~ A ~B A B
Het resolutie principe Propositie geval: A1 A2 … Am B1 … B … Bn C1 ... B … Ck D1 D2 … Dl A1 A2 … Am C1 .. .. Ck B1 .. .. Bn D1 D2 … Dl Correctheid: duidelijk want: maak van alle andere disjuncten genegeerde body- atomen, pas dan veralgemeende modus ponens toe, breng al die genegeerde body-atomen terug als disjuncten in het hoofd.
Resolutie: predicaten logica A1 A2 … Am B1 … B … Bn C1 ... B’ … Ck D1 D2 … Dl (A1 A2 … Am C1 .. .. Ck) (B1 .. .. Bn D1 D2 … Dl) waarbij = mgu(B,B’). Correctheid: door correctheid van het gegronde geval, toegepast op alle instantiaties van deze regel
Opnieuw Moore’s voorbeeld blauw(Blok1) rood(Blok3) blauw(Blok2) rood(Blok2) naast(Blok1,Blok2) naast(Blok2,Blok1) naast(Blok2,Blok3) naast(Blok3,Blok2) false naast(b1,b2) blauw(b1) rood(b2) blauw(Blok2) rood(Blok2) rood(Blok2) naast(Blok2,b2) rood(b2) rood(Blok2) naast(Blok2,Blok3) rood(Blok3) rood(Blok2) naast(Blok2,Blok3) false naast(b1,Blok2) blauw(b1) false naast(b1,b2) blauw(b1) rood(b2) false naast(Blok1,Blok2) blauw(Blok1) false naast(Blok1,Blok2)
Phd voorbeeld factoring hoog_gequal(x) phd(x) vroeg_verdienen(x) phd(x) rijk(x) hoog_gequal(x) rijk(x) vroeg_verdienen(x) (1) (2) (3) (4) false rijk(Ik) hoog_gequal(y) phd(y) vroeg_verdienen(x) phd(x) vroeg_verdienen(x) hoog_gequal(x) rijk(y) hoog_gequal(y) vroeg_verdienen(x) rijk(x) rijk(y) vroeg_verdienen(y) rijk(x) rijk(x) factoring rijk(x) false rijk(Ik) false
Factoring: algemeen Zowel: met: is mgu(B,B’) A1 A2 … Am B1 … B … B’ … Bn (A1 A2 … Am B1 … B … … Bn) als: met: is mgu(A,A’) . A1 … A … A’ … Am B1 … Bn (A1 … A … … Am B1 … Bn)
De nood aan factoring Zonder factoring is resolutie niet volledig ! Voorbeeld: bewijs {(p ~p) (q ~q)} inconsistent Normalizatie: (p q) (p ~q) (~p q) (~p ~q) Clausale vorm: p q p q false p q q p q q p p p q q p Je kan nooit false krijgen !!!!
Reden? De lengte van een formule = het aantal atomen (false niet meegerekend): A1 A2 … Am B1 … B … Bn C1 ... B’ … Ck D1 D2 … Dl (A1 A2 … Am C1 .. .. Ck) (B1 .. .. Bn D1 D2 … Dl) Lengte N M N + M - 2 In het vorige voorbeeld hadden alle formules lengte 2 Je kan NOOIT false (lengte 0) krijgen !
De resolutie procedure S:= initial theory (inconsistent te bewijzen); Consistent:= false; Inconsistent:= false; While not(Consistent) and not(Inconsistent) do If false S Then Inconsistent := true Else If S contains no pair (F,G) resolvable and not yet resolved Then Consistent:= true Else SELECT a pair (F,G) from S, resolvable and not yet resolved; H:= factor( resolvent (F,G) ); S:= S {H} End-while
Gedrag onder Horn clause resolutie : false ... … ... false ... … ... false ... … ... ... Lineaire resolutie ! false
Gedrag onder Algemene resolutie : … ... … ... … ... … ... false Algemene resolutie !
Lineaire resolutie: De belangrijkste verschillen met Horn clauses: Bij Horn clauses waren de bewijzen altijd LINEAIR ! we starten met de “goal” dan gebruiken we een Horn clause om een nieuwe goal te berekenen enz. Clausale resolutie is NIET lineair Ook: factoring is soms nodig Lineair resolutie (een bewijs is een lineaire opeenvolging van resolutie stappen, startend van de goal) is één van de belangrijkste strategieen om resolutie efficient te maken.
Non-determinisme in de resolutie procedure SELECT a pair (F,G) : maakt het een ERG non-deterministische procedure. Het controle probleem voor resolutie is bijzonder moeilijk. Een bewijs is niet meer 1 (lineaire) tak in een boom, maar een subgraaf van de graaf van alle resoluties. Is het correct? Is het volledig? ? Bestaat er een strategie die volledig is???
Correctheid / Volledigheid ? Volledigheid: Er bestaat een volledige strategie (standaard vb: de Herbrand stellingenbewijzer). Correctheid: Als de procedure Inconsistent teruggeeft: Dan is false toegevoegd Dan is false een logisch gevolg van S (want de resolutie stap is correct). Dus in alle modellen van S is ook false waar Dus S heeft geen modellen
Correctheid / Volledigheid (2) ? Als de procedure Consistent teruggeeft: Dan zijn ALLE MOGELIJKE resolutie stappen uitgevoerd, zonder false te bereiken. … ... … ... … ... … ... … ... … ... … ... … … false Stel toch inconsistent. Er bestaat een VOLLEDIGE strategie: die levert na eindige tijd wél false Maar die doet (een deel van) dezelfde resolutie stappen !! Oorspronkelijke gaf ook false
AR voor volledige predicaten logica Normalizatie naar clausale form
Wat is er meer nodig voor volledige predicaten logica? NIETS! Clausale logica is equivalent aan volledige predicaten logica: elke theorie T in FOL (first order predicate logic) kan automatisch omgezet worden in een clausale theorie T’, zo dat: T is inconsistent asa T’ is inconsistent
Propositioneel: via conjunctieve normal form: Elke formule is equivalent aan een formule van de vorm: (A1 ... An) (B1 … Bm) … (C1 … Ck) waarin alle Ai, Bi, …, Ci ofwel atomair of ~atomair. Idee: p q p q breng alle ~ zo ver mogelijk naar binnen gebruik de distributiviteit van en p q q p q ~p Uiteindelijk: p1 … pn ~q1 … ~qm p1 … pn q1 … qm
Predicaten geval: hoofd-stappen Prenix normaal vorm (Q1 x) (Q2 y) …(Qn z) F heeft geen quantoren! or Dit vereist soms nieuwe namen voor variabelen. Vb.: x p(x) x q(x) x z p(x) q(z) Merk: x bewolkt(x) x zonnig(x) is niet equivalent met x bewolkt(x) zonnig(x) Conjunctieve normaal vorm: (Q1 x) (Q2 y) …(Qn z) ( .. .. ) ( .. .. ) .. ( .. .. ) Die 2 stappen worden vermengd.
Predicaten geval: vervolg Skolem normaal vorm: transformeer naar: ( x) ( y) …( z) ( .. .. ) ( .. .. ) .. ( .. .. ) x rich(x) wordt rich(Sk) , met Sk een nieuwe constante (‘skolem constante’) die nog niet in het alphabet voorkomt. Moeilijker: indien genest voorkomt binnen : ‘Everyone has a heart’ x person(x) y heart(y) has(x,y) Niet correct: x person(x) heart(H) has(x,H) Correct: x person(x) heart(H(x)) has(x,H(x)) Skolem functies: zoveel argumenten als omsluitende -variabelen
Predicaten geval: vervolg Disjuncties: x y z (p(x) ~q(y) ~r(y)) (r(A) q(z)) ~s(x,y) S = {x y (p(x) ~q(y) ~r(y)) , z (r(A) q(z)) , x y ~s(x,y) } S = {p(x) q(y) r(y) , r(A) q(z)) , false s(x,y) } Clausale vorm:
Expliciete Procedure: 1. Elimineer en . 2. Breng de negaties naar binnen: ~(~p) p, ~(p q) ~p ~q, (analoog voor ) ~x x ~ , ~x x ~ 3. Standardizeer variabele namen (maak verschillend). PRENEX NORMAAL VORM 4. Breng quantoren naar voor. SKOLEMS INTRODUCEREN 5. Elimineer . CONJUNCTIEVE VORM 6. Disjuncties naar binnen. VERZAMELING DISJUNC. 7. Laat weg. 8. Laat weg. CLAUSALE VORM 9. ~atomen naar andere kant.
Marcus voorbeeld: Feiten 1. , 2. , 4. en 8. waren al o.k.: ex.: heerser(Cesar) 3. x Pompeier(x) Romein(x) : o.k. ! 6. x y loyaalaan(x,y) x loyaalaan(x,f(x)) loyaalaan(x,f(x)) 7. xy man(x) heerser(y) probeerverm(x,y) ~loyaalaan(x,y) xy ~(man(x) heerser(y) probeerverm(x,y)) ~loyaalaan(x,y) xy ~man(x) ~heerser(y) ~probeerverm(x,y) ~loyaalaan(x,y) false man(x) heerser(y) probeerverm(x,y) loyaalaan(x,y)
Axioma’s in Normaal vorm: 1. man(Marcus) 2. Pompeier(Marcus) 3. Romein(x) Pompeier(x) 4. heerser(Cesar) 5. loyaalaan(x,Cesar) haat(x,Cesar) Romein(x) 6. loyaalaan(x,f(x)) 7. false man(x) heerser(y) probeerverm(x,y) loyaalaan(x,y) 8. probeerverm(Marcus,Cesar) Te bewijzen: haat(Marcus,Cesar) Negatie: ~haat(Marcus,Cesar) Normaal Vorm: false haat(Marcus,Cesar)
Resolutie bewijs (1): 5. 3. 2. false haat(Marcus,Cesar) loyaalaan(x,Cesar) haat(x,Cesar) Romein(x) loyaalaan(Marcus,Cesar) Romein(Marcus) {x/Marcus} 5. Romein(x) Pompeier(x) loyaalaan(Marcus,Cesar) Pompeier(Marcus) {x/Marcus} 3. Pompeier(Marcus) loyaalaan(Marcus,Cesar) {} 2.
Resolutie bewijs (2) 7. 1. 4. 8. loyaalaan(Marcus,Cesar) false man(x) heerser(y) probeerverm(x,y) loyaalaan(x,y) false man(Marcus) heerser(Cesar) probeerverm(Marcus,Cesar) 7. {x/Marcus,y/Cesar} man(Marcus) false heerser(Cesar) probeerverm(Marcus,Cesar) 1. {} heerser(Cesar) false probeerverm(Marcus,Cesar) 4. {} probeerverm(Marcus,Cesar) false 8. {}
Een voorbeeld uit groepentheorie: Stel: een groepsoperatie. Noteer prefix: p(x,y,z) x y = z Definitie van een monoide, met linker-neutraal en linker-invers element: is overal gedefinieerd: xyz p(x,y,z) (1) is associatief: (x y) z = x (y z) u v xyzuvw (p(x,y,u) p(y,z,v)) (p(u,z,w) p(x,v,w)) (2)
Een voorbeeld uit groepentheorie (2): heeft een linker-neutraal en linker-invers element: x (y p(x,y,y) yz p(z,y,x) (3) De stelling: er bestaat ook een rechter-invers ! x (y p(x,y,y) yz p(y,z,x) (4) Automatisch te bewijzen met resolutie.
Normalisatie: (1) xyz p(x,y,z) Stappen: 1,2,3,4: o.k. Stap 5: skolemisatie: xy p(x,y,m(x,y)) Stappen: 6,7: o.k. Stap 8: clausale vorm: p(x,y,m(x,y))
Normalisatie (vervolg): (2) xyzuvw (p(x,y,u) p(y,z,v)) (p(u,z,w) p(x,v,w)) Stap 1: elimineer en : xyzuvw (p(x,y,u) p(y,z,v)) ((p(u,z,w) p(x,v,w)) (p(x,v,w) p(u,z,w))) xyzuvw (p(x,y,u) p(y,z,v)) ((~p(u,z,w) p(x,v,w)) (~p(x,v,w) p(u,z,w))) xyzuvw ~(p(x,y,u) p(y,z,v)) ((~p(u,z,w) p(x,v,w)) (~p(x,v,w) p(u,z,w)))
Normalisatie (vervolg): xyzuvw ~(p(x,y,u) p(y,z,v)) ((~p(u,z,w) p(x,v,w)) (~p(x,v,w) p(u,z,w))) Stap 2: breng negaties naar binnen: A (B C) xyzuvw (~p(x,y,u) ~p(y,z,v)) ((~p(u,z,w) p(x,v,w)) (~p(x,v,w) p(u,z,w))) Stappen: 3,4,5 o.k. Stap 6: breng disjuncties naar binnen: A (B C) = (A B) (A C) xyzuvw ((~p(x,y,u) ~p(y,z,v)) (~p(u,z,w) p(x,v,w))) ((~p(x,y,u) ~p(y,z,v)) (~p(x,v,w) p(u,z,w))) A B A C
Normalisatie (vervolg): xyzuvw ((~p(x,y,u) ~p(y,z,v)) (~p(u,z,w) p(x,v,w))) ((~p(x,y,u) ~p(y,z,v)) (~p(x,v,w) p(u,z,w))) xyzuvw ((~p(x,y,u) ~p(y,z,v)) (~p(u,z,w) p(x,v,w))) ((~p(x,y,u) ~p(y,z,v)) (~p(x,v,w) p(u,z,w))) + verwijder redundante haakjes: ( ) xyzuvw (~p(x,y,u) ~p(y,z,v) ~p(u,z,w) p(x,v,w)) (~p(x,y,u) ~p(y,z,v) ~p(x,v,w) p(u,z,w)) Stappen 7,8: elimineer en : ~p(x,y,u) ~p(y,z,v) ~p(u,z,w) p(x,v,w) ~p(x,y,u) ~p(y,z,v) ~p(x,v,w) p(u,z,w)
Normalisatie (vervolg): ~p(x,y,u) ~p(y,z,v) ~p(u,z,w) p(x,v,w) ~p(x,y,u) ~p(y,z,v) ~p(x,v,w) p(u,z,w) Stap 9: breng in implicatieve vorm: p(u,z,w) p(x,y,u) p(y,z,v) p(x,v,w) p(x,v,w) p(x,y,u) p(y,z,v) p(u,z,w)