Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer

Ähnliche Präsentationen


Präsentation zum Thema: "Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer"—  Präsentation transkript:

1 Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer
Prolog – erste Schritte

2 Plan der Veranstaltung (1)
Grundlagen der Prädikatenlogik (optional und Umfang je nach vorhandenen Vorkenntnissen) Prolog-Einführung Fakten und Regeln Rekursive Definitionen ‚Pure Prolog‘ und prozedurale Erweiterungen Spezielle Programmiertechniken (Differenzlisten etc.) Warren Abstract Machine (WAM)

3 Prolog-Interpreter http://www.swi-prolog.org/
Wissenbasis mit Prolog als Anfragesprache:

4 Rückblick: Syntax FOL Variablensymbole Prädikatensymbole
x, y, z, ... bzw. xi mit i=1,2, ... Prädikatensymbole P, Q, R, ... bzw. Pik, i=1,2, ... k Funktionssymbole f, g, h oder bzw. fik, i=1,2, ... mit Stelligkeit k Funktionssymbole mit Stelligkeit 0 sind Konstanten

5 Konjunktive Normalform
Ein Literal ist eine atomare Formel oder die Negation einer atomaren Formel z.B. A, ¬A oder generell (L1, ¬L2) Eine Klausel ist eine Disjunktion von Literalen z.B. (A  B  D), (A  ¬ B  ¬ D) , einzelne Literale sind ebenfalls Klauseln Eine Formel  ist in konjunktiver Normalform (KNF, engl. CNF) wenn sie eine Konjunktion von Klauseln ist  = (C1 ...  Cn) Konjunktion von Klauseln Ci = ( L1i  ...  L1ki) Disjunktion von Literalen

6 KNF (2) Theorem Transformation in KNF
Zu jeder Formel  existiert eine Formel  in KNF mit    Transformation in KNF Negationen in die Klammern ziehen: Doppelte Negation, de Morgan Disjunktionen in die Klammern ziehen: Distributivität (Kommutativität)

7 KNF aus der Wahrheitstafel
Jede Belegung, die kein Modell ist, entspricht einer Klausel Klausel Negation der Belegungen, die keine Modelle sind, z.B. ¬ (¬ A  ¬ B  C)  ( A  B  ¬ C) A B C 1 A  B  ¬ C 1 A  ¬ B  C 1 A  ¬ B  ¬ C 1 1 1 1 1 1 1 ¬A  ¬B  C 1 1 ¬A  ¬B  ¬C 1 1 1 KNF() = (A  B  ¬ C)  ... (¬A  ¬B  ¬C )

8 Horn-Formeln Definition Beispiel
Eine Formel in KNF ist eine Horn-Formel, wenn jede Klausel höchstens ein positives Literal enthält Beispiel Horn-Formel (A  ¬B)  (¬A  ¬C  D)  D  ¬E Anschaulicher: (B  A)  (A  C  D)  (1  D)  (E  0) 0 für beliebige unerfüllbare Formel 1 für beliebige Tautologie

9 Fakten und Regeln: A (Fakt)‏ (A1  A2   An  D) (Regel)‏ D :- A1  A2 ,  An . head, neck, body

10 Notationskonventionen:
Atome: a, b, a1, 'Hier ist alles erlaubt', ... Variablen: A, Abc, _, _3248, “anonyme Variable”: _ Fakten: a(b,c), a(b), - N.B.: a/2 ist verschieden von a/1! b, b(b(c)), ...

11 Standardbeispiel Verwandtschaftsbeziehungen:
/* Exemplarische Prolog-Wissensbasis */ kind_von(klaus, maria). % klaus ist kind von maria usw. kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin).

12 Anfragen an eine Wissensbasis
kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). ?- kind_von(X, Y). X = klaus, Y = maria; X = klaus, Y = martin; no 12

13 Anfragen an eine Wissensbasis
kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). 13

14 Anfragen an eine Wissensbasis
kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria 14

15 Anfragen an eine Wissensbasis
kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria kind_von(Y,maria)‏ 15

16 Anfragen an eine Wissensbasis
kind_von(klaus, maria). kind_von(klaus, martin). weiblich(maria). männlich(klaus). männlich(martin). mutter(X) :- weiblich(X), kind_von(Y,X). ?-mutter(X). weiblich(X) kind_von(Y,X)‏ X = maria kind_von(Y,maria)‏ kind_von(klaus, maria)‏ 16

17 Rekursive Regeln ?- kind_von(klaus, maria). kind_von(klaus, martin).
kind_von(martin, ludwig). vorfahr(X,Y) :- kind(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- 17

18 Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, maria).
kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). 18

19 Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏
kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ fail 19

20 Rekursive Regeln ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏
kind_von(klaus, maria). kind_von(klaus, martin). kind_von(martin, ludwig). vorfahr(X,Y) :- kind_von(Y,X). kind_von(Y,Z), vorfahr(X,Z). ?- vorfahr(ludwig,klaus). kind_von(klaus, ludwig)‏ fail kind_von(klaus,Z) vorfahr(ludwig,Z)‏ Z = maria ... fail Z = martin vorfahr(ludwig, martin)‏ 20

21 list([X|R]) :- list(R).
Listen: [a,b,c], [], [a,X,c], [a|X] [[a],b] list([]). list([X|R]) :- list(R). 21

22 Listen: ?- member(a,[a,b,c]). yes ?- member(X,[a,b,c]). X = a; ...
?- member(d,[a,b,c]). no ?- member(X,[]). 22

23 Listen: member(X,[X|R]). member(X,[Y|R]) :- member(X,R). 23

24 ?- append([a],[b,c],[a,b,c,d]). no
Listen: ?- append([a,b],[c,d],X). X = [a,b,c,d] ?- append([a],[b,c],[a,b,c,d]). no 24

25 ?- append([a],[b,c],[a,b,c,d]). no
Listen: ?- append([a,b],[c,d],X). X = [a,b,c,d] ?- append([a],[b,c],[a,b,c,d]). no append([],X,X). append([X|R],Y,[X|R2]) :- append(R,Y,R2). 25

26 Manipulation der Wissensbasis in Prolog
Einfügen von Fakten oder Regeln in die aktuelle Wissensbasis assert, asserta, assertz Beispiel: ?- weiblich(anne). no ?- assert(weiblich(anne)). yes 26

27 Manipulation der Wissensbasis in Prolog (2)‏
Entfernen von Fakten oder Regeln aus der aktuellen Wissensbasis retract, retractall Beispiel: ?- weiblich(anne). yes ?- retract(weiblich(anne)). no 27

28 Manipulation der Wissensbasis in Prolog (3)‏
Enfernen von Fakten oder Regeln aus der aktuellen Wissensbasis retract, retractall Beispiel: ?- assert(weiblich(anne)), assert(weiblich(berta)). yes ?- retractall(weiblich(_)). ?- weiblich(anne). no 28

29 Manipulation der Wissensbasis in Prolog (4)‏
Laden eines Prolog-Programms (implementationsspezifisch)‏ ?- consult(family). - lädt family.pl ohne Überschreiben yes ?- [family] dto. ?- reconsult(family). - lädt family.pl mit Überschreiben ?- listing schreibt Wissensbasis 29

30 Weitere wichtige Builtin-Prädikate
?- halt beendet Prolog-Session ?- trace Startet Trace-Modus (Debugging)‏ yes ?- notrace Beendet Trace-Modus debug, nodebug 30


Herunterladen ppt "Prolog-Kurs SomSem 2017 Daniel Beßler/Hagen Langer"

Ähnliche Präsentationen


Google-Anzeigen