1 / 23

PROgramming in LOGic

PROgramming in LOGic. Von Alain Colmerauer in Marseille entwickelt (70er Jahre) Standardwerk „Programming in Prolog“ (Clocksin/Mellish) Deklarative Sprache (Problem wird beschrieben, Interpreter sucht selbst nach Lösung) Keine Schleifen sondern Rekursion (Datentyp: Liste) ISO-Standard

idra
Download Presentation

PROgramming in LOGic

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. PROgramming in LOGic • Von Alain Colmerauer in Marseille entwickelt (70er Jahre) • Standardwerk „Programming in Prolog“ (Clocksin/Mellish) • Deklarative Sprache (Problem wird beschrieben, Interpreter sucht selbst nach Lösung) • Keine Schleifen sondern Rekursion (Datentyp: Liste) • ISO-Standard • Viele unterschiedliche Implementationen • Problem oftmals: Integration grafischer Oberflächen (dazu zumeist objektorientierte Spracherweiterungen) a.o.Univ.Prof. Dr. Franz Hörmann

  2. PROgramming in LOGic • Verwendete Version: SWI-Prolog (http://www.swi-prolog.org/) • Programme bestehen aus Fakten und Regeln, die zur Laufzeit geändert werden können (auch Regeln können geladen, verändert oder gelöscht werden – selbstmodifizierende Programme  AI) • Lösungssuche durch Interpreter: Backtracking • FRAGE: Können Programme jemals „intelligent“ sein? Was wären die Kriterien? a.o.Univ.Prof. Dr. Franz Hörmann

  3. PROgramming in LOGic • EXPERTENSYSTEME: • Programme, die selbst Probleme lösen (wie menschliche Experten) • Programme, die menschliche Experten unterstützen • Expert System Shell: • Benutzeroberfläche • Leere Fakten- und Regelbank • Schlußfolgerungsmechanismus (Inference Engine) •  Knowledge Engineer a.o.Univ.Prof. Dr. Franz Hörmann

  4. PROgramming in LOGic • Beispiele erfolgreicher Expertensysteme: • PROSPECTOR (fand ein Molybdänvorkommen im Wert von über US-$ 100 Mio) • R1 (konfigurierte VAX-Computersysteme) • DENDRAL (chemische Strukturanalysen) • CADUCEUS (Expertenwissen über interne Medizin) • PUFF (Expertensystem zur Diagnose von Lungenkrankheiten) a.o.Univ.Prof. Dr. Franz Hörmann

  5. PROgramming in LOGic • Facts: • fact(a, b, c). • Rules: • rule(A, B, C) :- rule1(A, B, C), rule2(A, B, C). • Queries (Goal): • ?-rule(A, B, C). • Variablen beginnen mit Großbuchstaben oder „_“ a.o.Univ.Prof. Dr. Franz Hörmann

  6. PROgramming in LOGic • SWI-Prolog: • File/Consult • Program1.pl • likes/2: Prädikat (predicate) von der Stelligkeit 2 (arity 2) • Wer liebt Erdbeeren? • ?- likes(X,strawberry). • X wird nach Suche in der Faktenbank gebunden (instantiated) a.o.Univ.Prof. Dr. Franz Hörmann

  7. PROgramming in LOGic • Program2.pl • Ausgabe der Lösung mittels write • Program2a.pl (verbesserte Ausgabe) • Program2b.pl (wer liebt was? Durch fail wird die Suche wiederholt = Backtracking ausgelöst) • Program2c.pl (fehlerhafte Programmänderung  Variable X kann nicht gebunden werden! a.o.Univ.Prof. Dr. Franz Hörmann

  8. PROgramming in LOGic • Program3a.pl (kommt man von Raum a2 nach Raum a5?) • trace,r(a2,a5). • Goal ändern: r(a1, a5). • Funktioniert ebenfalls a.o.Univ.Prof. Dr. Franz Hörmann

  9. PROgramming in LOGic • Program3a.pl (Endlosschleife!) • Goal r(a5,a1) testen • trace, r(a5,a1) • Mittels Taste ‚a‘ abbrechen! •  (jedem) Prolog fehlt (noch) Loop-Check Function! • Program3b.pl (Fakten wurden in c(a1, a2) umbenannt!) • r(a5,a1). • No  funktioniert problemlos! a.o.Univ.Prof. Dr. Franz Hörmann

  10. PROgramming in LOGic • Datenstrukturen: Terme • Ein Term besteht aus einem Funktor und einem oder mehreren Argumenten • functor(arg1, arg2, ...). • Auch Regeln (rules) sind Terme (terms)! • Program4.pl (arithmetische Prädikate) • Program4a.pl (allgemeingültige Version unter Verwendung des „Ungleich“-Prädikats) a.o.Univ.Prof. Dr. Franz Hörmann

  11. PROgramming in LOGic • Program5.pl (Verwendung von Listen: r(X,Y)  geht X in der Liste Y voran?) a.o.Univ.Prof. Dr. Franz Hörmann

  12. PROgramming in LOGic • Program6.pl (Modifikation der Datenbank zur Laufzeit: assert, retract) • ?- add_between(b1, a2, a3)  funktioniert! • Danach: • ?- remove_between(b1, a2, a3)  funktioniert NICHT (Datenbank wird zu Beginn wieder mit den URSPRÜNGLICHEN Fakten geladen, d.h. ohne b1!!) • Program6.pl (ein Element am Anfang einfügen: add_first) a.o.Univ.Prof. Dr. Franz Hörmann

  13. PROgramming in LOGic • Program7.pl (Einsatz des Prädikats not) • Fragen wie ?-tier(hund) sind möglich, aber auch „Generatoren“ wie • ?-tier(X),write(X),write(" ist ein Tier"),nl. • Program7a.pl • Fragen wie ?-tier(hund) funktionieren, aber • ?-tier(X),write(X),write(" ist ein Tier"),nl. sind nun NICHT MÖGLICH (im Prädikat not können keine Variablen gebunden werden!!) • Program7b.pl • Andere Möglichkeiten not darzustellen, Generatoren nicht darstellbar! a.o.Univ.Prof. Dr. Franz Hörmann

  14. PROgramming in LOGic • Program8.pl (einfache Arten der Wissensrepräsentation) • ?- X(lassie), write(X), nl. in SWI-Prolog leider nicht möglich! • Program9.pl (Mitarbeiterdatenbank) • Program10.pl (Kundendatenbank) • Es wird nur ein relevanter Kunde gefunden • Program10a.pl • Nun werden alle relevanten Kunden gefunden! • Program10b.pro • Wie Program10a.pro, aber ohne „No“ am Ende a.o.Univ.Prof. Dr. Franz Hörmann

  15. PROgramming in LOGic • Program11.pl (Prädikate zur Listenverarbeitung) • ?- member(c,[a,b,c,d]). • ?- member(X,[a,b,c,d]),write(X),nl,fail. • ?- append([1,2,3],[4,5],X),write_list(X). • ?- append([1,2,3],X,[1,2,3,4,5]),write_list(X). • Program11.pl (vollständige Zerlegung einer Liste in zwei Teil-Listen mittels append) a.o.Univ.Prof. Dr. Franz Hörmann

  16. PROgramming in LOGic • Program12.pl (verschachtelte Listen) • Program13.pl (Anwendung verschachtelter Listen: Einkaufsbummel) • Program14.pl (Arithmetische Listen- und andere Prädikate) a.o.Univ.Prof. Dr. Franz Hörmann

  17. PROgramming in LOGic • Program15.pl (Darstellung eines semantischen Netzwerks zum Liebesleben) • ?-likes(mary,john). • ?-likes(mary,X), write(X), nl. • ?-likes(X,Y), dislikes(Y,X), write(‘Poor ‘), write(X), nl. • ?-likes(X,Y), dislikes(Y,X), write(‘Poor ‘), write(X), nl, fail. • FRAGE: Wer wird von Anne nicht gemocht und beneidet jemanden, den Anne mag? a.o.Univ.Prof. Dr. Franz Hörmann

  18. PROgramming in LOGic • Program15a.pl • Allgemeingültige Formulierung von envies/2. • Program15b.pl (Strukturiertes Wissen mit verschachtelten Termen) • ?-knows(john,X),write(X),nl. • ?-knows(john,likes(anne,X)),write(X),nl. • ?-is_a(john,person). • ?-is_a(john,man). a.o.Univ.Prof. Dr. Franz Hörmann

  19. PROgramming in LOGic • Program16.pl (Klassifizierte Fähigkeiten) • ?-can(dolphin,swim). • Modifizieren, damit das stimmt (auch alle anderen Fakten ergänzen!) • FRAGE: Ein neues Säugetier wurde entdeckt – das Quirn. Was wissen wir alles über das Quirn? Woher wissen wir es? Wie sieht eine Prolog-Datenbank dazu aus? a.o.Univ.Prof. Dr. Franz Hörmann

  20. PROgramming in LOGic • Program16a.pl selbst erstellen nach folgenden Regeln: • If a patient is sweating and has high temperature  then the patient has a fever. • If the patient has a fever and a cough  then the patient has the flu. • If the patient has a rash and a fever  then the patient has chicken-pox. • If the patient has the flu  then go to bed and take aspirin. • If the patient has chicken-pox  then keep away from other people and go to bed. a.o.Univ.Prof. Dr. Franz Hörmann

  21. PROgramming in LOGic • Anwendung dieser Regeln von links nach rechts  forward chaining (aus Indizien werden Schlüsse gezogen) • Zweite Möglichkeit: die Regeln von rechts nach links anwenden  Vermutungen werden (durch Fakten) bewiesen = backward chaining • Die meisten Expertensysteme wenden beide Techniken an. a.o.Univ.Prof. Dr. Franz Hörmann

  22. PROgramming in LOGic • Program17.pl (Infektionsgefahr!) • ?-infect(john,X). • ?-infect(X,Y). • ?-infect(mary,X). • Im Trace-Modus beobachten! • Program18.pl (Expertensystem zur Tiererkennung) • Wird mittels ?-recognize(animal). gestartet • Program18.pl (Erweiterte Version – erklärt die Schlußfolgerung) • Wo muß der Term explain(List) eingebaut werden? a.o.Univ.Prof. Dr. Franz Hörmann

  23. PROgramming in LOGic • Prolog-Versionen im Internet • SWI-Prolog: http://www.swi-prolog.org/ • Strawberry Prolog: http://www.dobrev.com/ • Trinc-Prolog: http://www.trinc-prolog.com/ • BinProlog: http://www.binnetcorp.com/ • Visual Prolog: http://www.visual-prolog.com/ • Amzi Prolog: http://www.amzi.com/ • Arity Prolog: http://www.arity.com/ • LPA Prolog: http://www.lpa.co.uk/ • Ausführlichere Liste: • Logic Programming Archive: http://archive.comlab.ox.ac.uk/logic-prog.html a.o.Univ.Prof. Dr. Franz Hörmann

More Related