Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Helmut Fuhrmann Geändert vor über 6 Jahren
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
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.