23
a.o.Univ.Prof. Dr. Franz Hörmann 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)

PROgramming in LOGic

  • Upload
    idra

  • View
    43

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: PROgramming in LOGic

a.o.Univ.Prof. Dr. Franz Hörmann 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-StandardViele unterschiedliche ImplementationenProblem oftmals: Integration grafischer Oberflächen (dazu zumeist objektorientierte Spracherweiterungen)

Page 2: PROgramming in LOGic

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?

Page 3: PROgramming in LOGic

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

Page 4: PROgramming in LOGic

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)

Page 5: PROgramming in LOGic

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 „_“

Page 6: PROgramming in LOGic

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)

Page 7: PROgramming in LOGic

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!

Page 8: PROgramming in LOGic

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

Page 9: PROgramming in LOGic

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!

Page 10: PROgramming in LOGic

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)

Page 11: PROgramming in LOGic

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?)

Page 12: PROgramming in LOGic

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)

Page 13: PROgramming in LOGic

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!

Page 14: PROgramming in LOGic

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

Page 15: PROgramming in LOGic

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)

Page 16: PROgramming in LOGic

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)

Page 17: PROgramming in LOGic

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?

Page 18: PROgramming in LOGic

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

Page 19: PROgramming in LOGic

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?

Page 20: PROgramming in LOGic

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.

Page 21: PROgramming in LOGic

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.

Page 22: PROgramming in LOGic

a.o.Univ.Prof. Dr. Franz Hörmann 22

PROgramming in LOGicProgram17.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?

Page 23: PROgramming in LOGic

a.o.Univ.Prof. Dr. Franz Hörmann 23

PROgramming in LOGicProlog-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