Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Listen & Beweisstrategie

Ähnliche Präsentationen


Präsentation zum Thema: "Listen & Beweisstrategie"—  Präsentation transkript:

1 Listen & Beweisstrategie
Prolog Grundkurs WS 99/00 Christof Rumpf

2 GK Prolog - Listen, Beweisstrategie
Listen sind zusammengesetzte Terme, die in eckigen Klammern eine beliebige Anzahl von Termen als Elemente haben können, die durch Kommata getrennt werden. Die Reihenfolge der Elemente ist im Gegensatz zu Mengen relevant: Listen sind Sequenzen, bzw. Folgen. [atom,1,X,2.0,p(Y),[],[x]] GK Prolog - Listen, Beweisstrategie

3 Rekursive Definition von Listen
Listen sind Terme. Es gibt zwei Arten von Listen: leere und nichtleere. leere Liste: [] nichtleere Liste: [Head|Tail] wobei Head ein Term ist und Tail eine Liste. GK Prolog - Listen, Beweisstrategie

4 GK Prolog - Listen, Beweisstrategie
Listenzerlegung Nichtleere Listen können mit dem Listenkonstruktor in Kopf und Rest zerlegt werden. ?- [1,2,3] = [H|T]. H = Kopf T = [2,3] Rest yes GK Prolog - Listen, Beweisstrategie

5 GK Prolog - Listen, Beweisstrategie
Leere Liste Die leere Liste ist nicht zerlegbar. Nichtleere Listen haben als Rest hinter dem letzten Listenelement die leere Liste. Das bedeutet nicht, daß die leere Liste Element in jeder nichtleeren Liste ist. ?-[a]=[H|T]. H=a, T=[], yes GK Prolog - Listen, Beweisstrategie

6 GK Prolog - Listen, Beweisstrategie
Zerlegungen von [1,2,3,4] ?- [1,2,3,4]=[A|T]. A=1, T=[2,3,4], yes ?- [1,2,3,4]=[A,B|T]. A=1, B=2, T=[3,4], yes ?- [1,2,3,4]=[A,B,C|T]. A=1, B=2, C=3, T=[4], yes ?- [1,2,3,4]=[A,B,C,D|T]. A=1, B=2, C=3, D=4, T=[], yes GK Prolog - Listen, Beweisstrategie

7 Zerlegen von Zerlegungen
?- [1,2,3,4]=[H1|T1], T1=[H2|T2], T2=[H3|T3], T3=[H4|T4]. H1=1, T1=[2,3,4] H2=2, T2=[3,4] H3=3, T3=[4] H4=4, T4=[] yes GK Prolog - Listen, Beweisstrategie

8 GK Prolog - Listen, Beweisstrategie
Listen als Strukturen Listen sind eigentlich Strukturen, für die eine besondere Schreibweise vereinbart wurde. Listennotation Prädikatsnotation [] [] [H|T] `.`(H,T) [1,2,3,4] `.`(1, `.`(2, `.`(3, `.`(4,[])))) GK Prolog - Listen, Beweisstrategie

9 GK Prolog - Listen, Beweisstrategie
Listenunifikation Leere Liste: mit Variablen und der leeren Liste unifizierbar. Nichtleere Listen: mit Variablen und nichtleeren Listen unifizierbar, wobei die Anzahl der Elemente gleich sein und das i-te Element der einen mit dem i-ten Element der anderen Liste unifizierbar sein muß. GK Prolog - Listen, Beweisstrategie

10 GK Prolog - Listen, Beweisstrategie
Listenkonstruktor Der Listenkonstruktor „|“ zerlegt nichtleere Listen in Kopf und Rest. Eine Liste [H1|T1] unifiziert mit einer Liste L, wenn L in [H2|T2] zerlegbar ist, die Terme H1 und H2 unifizierbar sind und die Listen T1 und T2 unifizierbar sind. GK Prolog - Listen, Beweisstrategie

11 Beispiele zur Listenunifikation
?- [X,Y,Z]=[paul,klaut,bananen]. ?- [katze]=[X|Y]. ?- [X,Y|Z]=[anna,liebt,wein]. ?- [[die,Y]|Z]=[[X,katze],[ist,weg]]. ?- [a|B]=[A|b]. !!! ?- [X,anna]=[Y|[maria]]. GK Prolog - Listen, Beweisstrategie

12 Rekursive Listenverarbeitung
Listen sind eine rekursiv definierte Datenstruktur. Deshalb sind Prädikate zur Listenverarbeitung meist rekursive Prädikate mit folgender Strategie: Zerlege die Liste in Kopf und Rest. Mach was mit dem Kopf und verarbeite den (verkürzten) Rest rekursiv weiter. Terminiere, wenn die Liste leer ist, oder der aktuelle Kopf bestimmte Merkmale aufweist. GK Prolog - Listen, Beweisstrategie

13 GK Prolog - Listen, Beweisstrategie
member/2 % member(Term,Liste) member(X,[X|_]). member(X,[_|T]):- member(X,T). Das Prädikat member/2 ist beweisbar, wenn Term ein Element von Liste ist. GK Prolog - Listen, Beweisstrategie

14 GK Prolog - Listen, Beweisstrategie
Anfragen an member/2 ?- member(2,[1,2,3]). yes ?- member(4,[1,2,3]). no ?- member([],[1,2,3]). ?- member(2,[1,X,3]). X=2 ?- member(X,[1,2,3]). X=1 ->; X=2 ->; X=3 ->; no ?- member(X,Y). X=_1 Y=[_1|_2] ->; Y=[_3,_1|_2] ->; ... GK Prolog - Listen, Beweisstrategie

15 Beweisstrategie des Interpreters
Anfrage gilt als zu beweisende Behauptung. Anfrage unifiziert mit Kopf einer Klausel. Unifikation liefert Variableninstanzen. Klauselrumpf wird bewiesen. Alternative Lösungen über Backtracking. Reihenfolge der Suchraumtraversierung: top-down depth-first left-to-right. GK Prolog - Listen, Beweisstrategie

16 GK Prolog - Listen, Beweisstrategie
Anfragen Anfragen werden als zu beweisende Behauptungen interpretiert. Der Beweis kann nur über entsprechende Klauseln in der Prolog-Datenbasis erbracht werden. ?- sterblich(X). Es gibt ein X mit der Eigenschaft sterblich. GK Prolog - Listen, Beweisstrategie

17 GK Prolog - Listen, Beweisstrategie
Head-Matching Ein Prädikat aus einer Anfrage muß mit dem Kopf einer Klausel unifizierbar sein. ?- sterblich(sokrates). sterblich(X):- mensch(X).  = {X=sokrates} GK Prolog - Listen, Beweisstrategie

18 GK Prolog - Listen, Beweisstrategie
Top-Down-Verfahren Das Head-Matching wird im top-down-Verfahren durchgeführt. Der Interpreter durchsucht die Datenbasis von oben nach unten, um passende Klauseln für einen Beweis zu finden. vorfahr(X,Y):- et(X,Y). vorfahr(X,Y):- et(X,Z), vorfahr(Z,Y). GK Prolog - Listen, Beweisstrategie

19 GK Prolog - Listen, Beweisstrategie
Lokale Variablen Variablen sind in Prolog immer lokale Variablen, d.h. Variablenidentität gleichnamiger Variablen existiert nur innerhalb einer Klausel. Unifikation ermöglicht Variablenidentität über Klauselgrenzen hinweg. GK Prolog - Listen, Beweisstrategie

20 Beweis von Regeln: left-to-right
Regelrümpfe werden von links nach rechts bewiesen (left-to-right). Erst wenn ein Beweis für das i-te Prädikat im Rumpf gefunden ist, kann das i+1-te Prädikat bewiesen werden. P0:- P1, ..., Pi, Pi+1, ..., Pn GK Prolog - Listen, Beweisstrategie

21 Backtracking: depth-first
Backtracking kann durch zwei Ursachen ausgelöst werden: Eine alternative Lösung soll berechnet werden. Der aktuelle Beweis ist in einer Sackgasse. In jedem Fall geht der Interpreter zur letzten Verzweigung im Beweisbaum zurück, an der noch Alternativen offen waren (depth-first). GK Prolog - Listen, Beweisstrategie

22 Backtracking Beispiel
oma(X,Y):- et(X,Z), %1. et(Z,Y). %2. et(anna,maria). et(maria,ilse). et(maria,petra). et(petra,ulla). ?- oma(X,Y). X = anna Y = ilse ->; Y = petra ->; X = maria Y = ulla ->; no Die Alternativen des zweiten et/2 im Rumpf von oma/2 werden vor den Alternativen des ersten et/2 berechnet. GK Prolog - Listen, Beweisstrategie

23 Suchraum-Traversierung
oma(X,Y) et(X,Z) et(Z,Y) et(anna,maria) et(anna,maria) et(maria,ilse) et(maria,ilse) et(maria,petra) et(maria,petra) et(petra,ulla) et(petra,ulla) GK Prolog - Listen, Beweisstrategie

24 Alternative Verfahren
top-down bottom-up, left-corner depth-first breadth-first, best-first left-to-right right-to-left, Zufallsauswahl GK Prolog - Listen, Beweisstrategie

25 Ablaufprotokoll (Trace)
Der Prolog-Interpreter verwendet ein Ablaufprotokoll, das 4 Typen von Beweisschritten unterscheidet: CALL Anfrage, neuer Schritt REDO Backtracking, alternativer Schritt EXIT Beweisschritt gelungen FAIL Beweischritt gescheitert GK Prolog - Listen, Beweisstrategie

26 GK Prolog - Listen, Beweisstrategie
Trace von member/2 (0) CALL: member(1,[1,2,1,3]) (0) EXIT(N): member(1,[1,2,1,3]) Backtracking (0) REDO: member(1,[1,2,1,3]) (1) CALL: member(1,[2,1,3]) (2) CALL: member(1,[1,3]) (2) EXIT(N): member(1,[1,3]) (1) EXIT(N): member(1,[2,1,3]) (0) REDO: member(1,[1,2,1,3]) (1) REDO: member(1,[2,1,3]) (2) REDO: member(1,[1,3]) (3) CALL: member(1,[3]) (4) CALL: member(1,[]) (4) FAIL: member(1,[]) (3) FAIL: member(1,[3]) (2) FAIL: member(1,[1,3]) (1) FAIL: member(1,[2,1,3]) (0) FAIL: member(1,[1,2,1,3]) No more solutions. EXIT(N) steht für „nondeterministic exit“, d.h. es gibt noch nicht besuchte Verzweigungen im Suchraum. GK Prolog - Listen, Beweisstrategie

27 GK Prolog - Listen, Beweisstrategie
Debugger Das Ablaufprotokoll des Interpreters kann mit dem Debugger angesehen werden. ?- trace. Debugger einschalten. ?- notrace. Debugger ausschalten. Bei eingeschaltetem Debugger wird nach jeder Anfrage das Debugger-Fenster eingeblendet. GK Prolog - Listen, Beweisstrategie

28 GK Prolog - Listen, Beweisstrategie
Deklarativ? Die Beweisstrategie des Prolog-Interpreters liefert eine prozedurale Interpretation von Prolog-Programmen, da Beweise Schritt für Schritt betrachtet werden. Trotzdem lohnt sich in der Regel eine deklarative Perspektive auf Prolog-Programme, bei der vom Beweisverfahren abstrahiert wird. GK Prolog - Listen, Beweisstrategie

29 GK Prolog - Listen, Beweisstrategie
member/2 deklarativ Logisch/deklarative Perspektive auf member/2. Wenn der Term X in der Liste ist, dann ist er entweder im Kopf der Liste, oder er ist im Rest der Liste. member(X,[X|_]). member(X,[_|T]):- member(X,T). GK Prolog - Listen, Beweisstrategie

30 GK Prolog - Listen, Beweisstrategie
Deklarativ ist besser. Die deklarative Logik von member/2 erfaßt ver-schiedene Fälle, für die in prozedurealen Sprachen separate Prozeduren geschrieben werden müßten. ?- member(1,[1,2,3]). Ist 1 in Liste [1,2,3]? ?- member(1,L). In welchen Listen ist 1? ?- member(X,[1,2,3]). Welche X sind in [1,2,3]? ?- member(X,L). In welchen Listen ist X? GK Prolog - Listen, Beweisstrategie


Herunterladen ppt "Listen & Beweisstrategie"

Ähnliche Präsentationen


Google-Anzeigen