1 / 27

Logisch Programmeren

Logisch Programmeren. Automatisch Redeneren in de praktijk. Eerste-orde logica is monotoon :. T ’. |=. T. F2. F1. F3. G. Maar : mensen redeneren zelden monotoon !. Vogels vliegen + Fred is vogel. Fred vliegt. + Fred is pinguin. Motivatie: monotoniciteit. Default redeneren:.

erin-bolton
Download Presentation

Logisch Programmeren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Logisch Programmeren Automatisch Redeneren in de praktijk

  2. Eerste-orde logica is monotoon: T ’ |= T F2 F1 F3 G • Maar: mensen redeneren zelden monotoon ! Vogels vliegen + Fred is vogel Fred vliegt + Fred is pinguin Motivatie: monotoniciteit

  3. Default redeneren: • Is een redeneervorm die we voortdurend willen kunnen gebruiken • anders worden de regels veel te complex ! • Is typisch wat ondersteund wordt door hierarchie-en, 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 … …

  4. 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 semantiekin plaats van standaard FOL model semantiek • Uitbreiding van Horn clause logica met Negatie als Eindige Faling

  5. Antwoord substituties De link naar programmeren

  6. 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) (2) {u/x1,v/y1} false  parent(x1,z1)  anc(z1,y1) Antwoord: Ja, u v anc(u,v) (3) {x1/A,z1/B} false  anc(B,y1) (1) {x2/B, y2/y1} false  parent(B,y1) (4) {y1/C} false  Antwoord substituties false  anc(u,v) Namelijk: u = A en v = C (de samenstelling van alle mgu’s toe- gepast op de variabelen in de goal)

  7. 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) (1) {u/x1,v/y1} false  parent(x1,y1) (3) {x1/A,y1/B} false  (4) {x1/B,y1/C} false  En berekent ALLE antwoorden false  anc(u,v) Derde antwoord: u = B en v = C Nog een antwoord: u = A en v = B

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

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

  10. Kleinste model semantiek Compacter specifieren

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

  12. Wat zijn de atomaire gevolgen van theorie T? model 2 T model 3 ~s ~r p model 1 q ~q s Formeel: het idee • 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.

  13. 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(DeSchreye) ~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) Relatie tot FOL

  14. 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 ! • (= alles wat niet volgt uit de theorie is onwaar) • Anders gezegd: Logisch Programmeren ondersteunt het formuleren van definitiesvan je concepten. • Niet slechts formuleren van wat er waar is betreffende die concepten (=FOL) !

  15. Hoe relevant is de verandering in semantiek? • In FOL: • {slim(Kelly)}impliceert nochsterk(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 verschillendvoorgesteld in de 2 formalismen. • Ook: sommige concepten kunnen volledig axiomatizeerd worden in LP en niet in FOL. • Vb.: de natuurlijke getallen !

  16. Negatie als eindige faling

  17. Hier: Introductie van negaties in bodies ! Negatie als eindige faling • Het basis-idee: • uitbreiding van de representatiekracht van Logisch Programmeren voorbij Horn clause logica • Hoe? • equivalent: • laat disjuncties in de hoofden toe • 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!)

  18. 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) Betekenis van negatie als eindige faling • Is niet de betekenis van standaard negatie • Dit is alleen zinvol onder de kleinste model semantiek (waar alles wat niet bewijsbaar ‘waar’ is, toch ‘onwaar’ is)

  19. 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  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 faalt Het ancestor voorbeeld • Probeer te bewijzen dat “anc(John,B)” geldt! • Besluit: not anc(John,B)

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

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

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

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

  24. locomotion(x,Fly) isa(x,Bird), not abnormal1(x) locomotion(x,Walk)  isa(x,Ostrich), not abnormal2(x) isa(x,Bird)  isa(x,Ostrich) abnormal1(x)  isa(x,Ostrich) isa(Fred,Bird) Ook gegeven: isa(Fred,Ostrich) , Bewijs:x locomotion(Fred,x) false <- locomotion(Fred,x) {x/Walk} false <- abnormal2(Fred) false <- Default redeneren (3): false <- isa(Fred,Ostrich), not abnormal2(Fred) false <- not abnormal2(Fred) faalt

  25. Prolog • Een specifieke programmeertaal gebaseerd op LP. • Gebruikt een diepte-eerst strategie voor het doorzoeken van de lineaire resolutie bewijzen. • niet volledig • 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, ..

  26. 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 • LP-definities voor het gedeelte waarover je volledige kennis hebt, • FOL formules voor de rest.

  27. 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.

More Related