Transcript
Page 1: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

Listen&

Beweisstrategie

Prolog Grundkurs WS 99/00

Christof Rumpf

[email protected]

Page 2: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 2

Listen 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]]

Page 3: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

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

Page 4: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 4

Listenzerlegung

Nichtleere Listen können mit dem Listenkonstruktor in Kopf und Rest zerlegt werden.

?- [1,2,3] = [H|T]. H = 1 Kopf T = [2,3] Rest yes

Page 5: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 5

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

Page 6: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 6

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

Page 7: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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

Page 8: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 8

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,

[]))))

Page 9: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 9

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

Page 10: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 10

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.

Page 11: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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]].

Page 12: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

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

Page 13: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 13

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.

Page 14: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 14

Anfragen an member/2

?- member(2,[1,2,3]). yes ?- member(4,[1,2,3]). no ?- member([],[1,2,3]). no ?- member(2,[1,X,3]). X=2 yes

?- member(X,[1,2,3]). X=1 ->; X=2 ->; X=3 ->; no ?- member(X,Y). X=_1 Y=[_1|_2] ->; X=_1 Y=[_3,_1|_2] ->; ...

Page 15: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

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

Page 16: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 16

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.

Page 17: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 17

Head-Matching

Ein Prädikat aus einer Anfrage muß mit dem Kopf einer Klausel unifizierbar sein.

?- sterblich(sokrates).

sterblich(X):- mensch(X).

= {X=sokrates}

Page 18: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 18

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

Page 19: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 19

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.

Page 20: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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

Page 21: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

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

Page 22: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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 ->; X = anna 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.

Page 23: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 23

Suchraum-Traversierung

oma(X,Y) 1 3 et(X,Z) et(Z,Y) 2 4 et(anna,maria) et(anna,maria) et(maria,ilse) et(maria,ilse) et(maria,petra) et(maria,petra) et(petra,ulla) et(petra,ulla)

Page 24: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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

Page 25: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 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

Page 26: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 26

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) EXIT(N): member(1,[1,2,1,3]) Backtracking

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

Page 27: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 27

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.

Page 28: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 28

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.

Page 29: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 29

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

Page 30: Listen & Beweisstrategie Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

15.11.99 GK Prolog - Listen, Beweisstrategie 30

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?


Recommended