230 likes | 301 Views
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
E N D
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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