Logisch Programmeren Automatisch Redeneren in de praktijk Motivatie

  • Slides: 27
Download presentation
Logisch Programmeren Automatisch Redeneren in de praktijk

Logisch Programmeren Automatisch Redeneren in de praktijk

Motivatie: monotoniciteit ¤ Eerste-orde logica is monotoon: T’ |= T F 1 F 2

Motivatie: monotoniciteit ¤ Eerste-orde logica is monotoon: T’ |= T F 1 F 2 F 3 G ¤ Maar: mensen redeneren zelden monotoon ! Vogels vliegen + Fred is vogel Fred vliegt + Fred is pinguin 2

Default redeneren: ¤ Is een redeneervorm die we voortdurend willen kunnen gebruiken è anders

Default redeneren: ¤ Is een redeneervorm die we voortdurend willen kunnen gebruiken è anders worden de regels veel te complex ! ¤ Is typisch wat ondersteund wordt door hierarchieen, overerving en uitzonderingen in OOP è ook een vroeg AI-formalisme ¤ KAN NIET in FOL è welke encodering van je kennis je ook neemt !! ¤ WEL in tal van uitbreidingen van FOL è niet-monotone logica’s è waarvan de eenvoudigste … … 3

Logisch Programmeren ¤ Resolutie-gebaseerd automatisch redeneren: è beperkt tot Horn clauses è beperkt tot

Logisch Programmeren ¤ Resolutie-gebaseerd automatisch redeneren: è beperkt tot Horn clauses è beperkt tot achterwaartse lineaire resolutie ¤ MAAR: met 3 belangrijke nieuwe uitbreidingen: è Het teruggeven van Antwoord Substituties è Kleinste-model semantiek in plaats van standaard FOL model semantiek è Uitbreiding van Horn clause logica met Negatie als Eindige Faling 4

Antwoord substituties De link naar programmeren

Antwoord substituties De link naar programmeren

Antwoord substituties anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y) parent(A, B)

Antwoord substituties anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y) parent(A, B) (3) parent(B, C) false anc(u, v) (1) (2) (4) (2) {u/x 1, v/y 1} false parent(x 1, z 1) anc(z 1, y 1) (3) {x 1/A, z 1/B} false anc(B, y 1) (1) {x 2/B, y 2/y 1} Namelijk: u = A en v = C false parent(B, y 1) (4) {y 1/C} (de samenstelling van alle mgu’s toegepast op de variabelen in de goal) false Antwoord: Ja, u v anc(u, v) 6

En berekent ALLE antwoorden anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y)

En berekent ALLE antwoorden anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y) parent(A, B) (3) parent(B, C) false anc(u, v) (1) (2) (4) false anc(u, v) (1) {u/x 1, v/y 1} false parent(x 1, y 1) false (3) {x 1/A, y 1/B} (4) {x 1/B, y 1/C} false Nog een antwoord: u = A en v = B Derde antwoord: u = B en v = C 7

Logisch PROGRAMMEREN ¤ Door het berekenen van antwoord substituties vormt Logisch Programmeren de basis

Logisch PROGRAMMEREN ¤ Door het berekenen van antwoord substituties vormt Logisch Programmeren de basis voor enkele “general purpose” programmeertalen. è o. a. : Prolog, Mercury, XSB, … met een uitvoeringsefficiëntie vergelijkbaar met c ! è Voor sommige programma’s zelfs sneller. 8

Practisch programmeren? ¤ Voorbeeld aritmetiek: dubbel_plus_1(x, y) y is 2*x + 1 false dubbel_plus_1(3,

Practisch programmeren? ¤ Voorbeeld aritmetiek: dubbel_plus_1(x, y) y is 2*x + 1 false dubbel_plus_1(3, z) false dubbel_plus_1(2, 5) Yes: z=7 Yes ¤ Voorbeeld lijsten: append([], lijst) append([x|lijst 1], lijst 2, [x|lijst 3]) append(lijst 1, lijst 2, lijst 3) false append([1, 2], [3, 4, 5], z) false append([1, 2], y, [1, 2, 3]) Yes: z= [1, 2, 3, 4, 5] Yes: y= [3] false append(x, y, [1, 2]) Yes: x = [], y = [1, 2] x = [1], y = [2] 9 …

Kleinste model semantiek Compacter specifieren

Kleinste model semantiek Compacter specifieren

Kleinste model semantiek ¤ Voorbeeld: een gegevensbank: BV(Crabé) BV(Jambers) BV(Peeters) BV(Lisa) BV(Tieleman) BV(Samson) ¤

Kleinste model semantiek ¤ Voorbeeld: een gegevensbank: BV(Crabé) BV(Jambers) BV(Peeters) BV(Lisa) BV(Tieleman) BV(Samson) ¤ Is De. Schreye een BV ? ? false BV(De. Schreye) ¤ We krijgen geen inconsistentie bewijs ! è FOL semantiek zegt: BV(De. Schreye) is geen logisch gevolg, dus: we weten niet of het waar is of niet! èKleinste model semantiek zegt: ~ BV(De. Schreye) 11

Formeel: het idee ¤ Wat zijn de atomaire gevolgen van theorie T? q T

Formeel: het idee ¤ Wat zijn de atomaire gevolgen van theorie T? q T p model 2 ~r ~s ~q model 3 s model 1 è In FOL: Gevolgen zijn in de intersectie: p en ~r. Over waarheid van q en s weten we niets. è In LP: Gevolgen zijn in de intersectie: p en ~r. Alle andere eigenschappen zijn NIET waar: ~q en ~s. 12

Relatie tot FOL ¤ Het logisch programma: BV(Crabé) BV(Jambers) BV(Peeters) BV(Lisa) BV(Tieleman) BV(Samson) is

Relatie tot FOL ¤ Het logisch programma: BV(Crabé) BV(Jambers) BV(Peeters) BV(Lisa) BV(Tieleman) BV(Samson) is equivalent aan de oneindige FOL theorie: BV(Crabé) BV(Jambers) BV(Peeters) ~BV(De. Schreye) ~BV(Janssens) … BV(Lisa) BV(Tieleman) BV(Samson) ~BV(Cobain) ~BV(Dali) … of ook aan: x BV(x) (x = Crabé) (x = Jambers) (x = Peeters) (x = Lisa) ( x = Tieleman) (x = Samson) 13

De “gesloten wereld” assumptie ¤ Logisch programmeren geeft een compacte manier om ‘volledige kennis’

De “gesloten wereld” assumptie ¤ Logisch programmeren geeft een compacte manier om ‘volledige kennis’ over iets uit te drukken. ¤ Indien je niet zegt dat iets waar is, dan is het onwaar. è De Gesloten Wereld Assumptie ! u (= alles wat niet volgt uit de theorie is onwaar) ¤ Anders gezegd: Logisch Programmeren ondersteunt het formuleren van definities van je concepten. è Niet slechts formuleren van wat er waar is betreffende die concepten (=FOL) ! 14

Hoe relevant is de verandering in semantiek? ¤ In FOL: {slim(Kelly)} impliceert noch sterk(Kelly)

Hoe relevant is de verandering in semantiek? ¤ In FOL: {slim(Kelly)} impliceert noch sterk(Kelly) noch ~sterk(Kelly) ¤ In LP: {slim(Kelly)} impliceert ~sterk(Kelly) ¤ In het bijzonder: LP is een niet-monotone logica !! è In {slim(Kelly), sterk(Kelly)} is ~sterk(Kelly) geen gevolg meer. ¤ Kennis wordt verschillend voorgesteld in de 2 formalismen. ¤ Ook: sommige concepten kunnen volledig axiomatizeerd worden in LP en niet in FOL. è Vb. : de natuurlijke getallen ! 15

Negatie als eindige faling

Negatie als eindige faling

Negatie als eindige faling ¤ Het basis-idee: è uitbreiding van de representatiekracht van Logisch

Negatie als eindige faling ¤ Het basis-idee: è uitbreiding van de representatiekracht van Logisch Programmeren voorbij Horn clause logica ¤ Hoe? è equivalent: u laat disjuncties in de hoofden toe u laat negatie voor de body-atomen toe – beide geven volledige predicaten logica ! – (maar: door de kleinste model semantiek zullen we toch iets verschillends van FOL krijgen!) Hier: Introductie van negaties in bodies ! 17

Betekenis van negatie als eindige faling ¤ Is niet de betekenis van standaard negatie

Betekenis van negatie als eindige faling ¤ Is niet de betekenis van standaard negatie ¤ not(B) betekent: Als alle pogingen om B te bewijzen, gebruik makend van lineaire LP-resolutie, na eindige tijd allemaal falen, besluit dan not(B) ¤ Dit is alleen zinvol onder de kleinste model semantiek (waar alles wat niet bewijsbaar ‘waar’ is, toch ‘onwaar’ is) 18

Het ancestor voorbeeld anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y) parent(A,

Het ancestor voorbeeld anc(x, y) parent(x, y) anc(x, y) parent(x, z) anc(z, y) parent(A, B) (3) parent(B, C) false anc(u, v) (1) (2) (4) ¤ Probeer te bewijzen dat “anc(John, B)” geldt! false anc(John, B) (2) {x/John, y/B} (1) {x/John, y/B} false parent(John, B) false parent(John, z) anc(z, B) faalt ¤ Besluit: not anc(John, B) 19

Een ander voorbeeld even(0) even(s(s(x))) even(x) oneven(y) not even(y) false oneven(s(s(s(0)))) false not even(s(s(s(0))))

Een ander voorbeeld even(0) even(s(s(x))) even(x) oneven(y) not even(y) false oneven(s(s(s(0)))) false not even(s(s(s(0)))) Bewijs voor even(s(s(s(0)))) faalt: besluit not even(s(s(s(0)))) false even(s(s(s(0)))) {x/s(0)} false even(s(0)) faalt false 20

Nog een voorbeeld q q p not q false p false not q Bewijs

Nog een voorbeeld q q p not q false p false not q Bewijs voor q gaat in een oneindige afleiding: geen conclusie voor not q geen antwoord false q … ¤ Maar ~q is wel waar volgens kleinste model semantiek ! 21

Default redeneren in LP (1): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk)

Default redeneren in LP (1): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk) isa(x, Ostrich), not abnormal 2(x) isa(x, Bird) isa(x, Ostrich) abnormal 1(x) isa(x, Ostrich) Ook gegeven: isa(Fred, Bird) , Bewijs: x locomotion(Fred, x) false <- locomotion(Fred, x) {x/Fly} false <- isa(Fred, Bird), not abnormal 1(Fred) false <- isa(Fred, Ostrich) false <- faalt 22

Default redeneren in LP (2): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk)

Default redeneren in LP (2): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk) isa(x, Ostrich), not abnormal 2(x) isa(x, Bird) isa(x, Ostrich) abnormal 1(x) isa(x, Ostrich) isa(Fred, Bird) Ook gegeven: isa(Fred, Ostrich) , Bewijs: x locomotion(Fred, x) false <- locomotion(Fred, x) {x/Fly} false <- isa(Fred, Bird), not abnormal 1(Fred) false <- not abnormal 1(Fred) faalt (voor deze tak) backtracking: 2 de tak false <- abnormal 1(Fred) false <- isa(Fred, Ostrich) false <- 23

Default redeneren (3): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk) isa(x, Ostrich),

Default redeneren (3): locomotion(x, Fly) isa(x, Bird), not abnormal 1(x) locomotion(x, Walk) isa(x, Ostrich), not abnormal 2(x) isa(x, Bird) isa(x, Ostrich) abnormal 1(x) isa(x, Ostrich) isa(Fred, Bird) Ook gegeven: isa(Fred, Ostrich) , Bewijs: x locomotion(Fred, x) false <- locomotion(Fred, x) {x/Walk} false <- isa(Fred, Ostrich), not abnormal 2(Fred) false <- faalt 24

Prolog ¤ Een specifieke programmeertaal gebaseerd op LP. ¤ Gebruikt een diepte-eerst strategie voor

Prolog ¤ Een specifieke programmeertaal gebaseerd op LP. ¤ Gebruikt een diepte-eerst strategie voor het doorzoeken van de lineaire resolutie bewijzen. èniet volledig u kan in oneindige takken terecht komen ¤ Heeft een boel builtin predicaten (soms zonder logische betekenis) voor: ènumerisch berekeningen, input-output, beinvloeden van het zoekmechanisme, meta-programmatie, enz. ¤ Meer recente LP talen: Goedel, Mercury, Hal, . . 25

Voorbij FOL en Logisch Programmeren ¤ Logisch Programmeren is heel nuttig als je VOLLEDIGE

Voorbij FOL en Logisch Programmeren ¤ Logisch Programmeren is heel nuttig als je VOLLEDIGE kennis hebt over je predicaten ¤ FOL is heel nuttig als je ONVOLLEDIGE kennis hebt ¤ Combineer ! è Open Logisch Programmeren u LP-definities voor het gedeelte waarover je volledige kennis hebt, u FOL formules voor de rest. 26

Constraint Logic Programming ¤ Integreer constraint processing technieken (consistentie, forward checking, looking ahead, …)

Constraint Logic Programming ¤ Integreer constraint processing technieken (consistentie, forward checking, looking ahead, …) met Logisch Programmeren. ¤ Voordelen van Logica voor kennisrepresentatie ¤ Voordelen van Constraint solving voor problem solving efficientie ¤ Heel wat talen: CHIP, Prolog III, Eclipse, Sicsus, enz. 27