• Keine Ergebnisse gefunden

Einführung in Prolog Simon Bischof

N/A
N/A
Protected

Academic year: 2022

Aktie "Einführung in Prolog Simon Bischof"

Copied!
23
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Einführung in Prolog

Simon Bischof

KIT – Universität des Landes Baden-Württemberg und

IPD Snelting

www.kit.edu

(2)

Terme

id:= [a-z][a-zA-Z0-9]*

var:= [A-Z][a-zA-Z0-9]*

num:= [0-9]*

Term:=Functor |var|num

Functor :=id|id (Term{,Term}*) Beispiele:

lisa, leaf,X,node(leaf, leaf ),node(X,node(Y,leaf)),0,plus(0,3)

Variablenfreie Terme stehen nur für sich selbst!

2 7. Mai 2018 Einführung in Prolog

(3)

Regeln, Fakten

Rule:=Functor .|Functor :-Goal {,Goal }*. Goal:=Functor |Term=Term|TermisTerm|!

Ohne Ziele (Fakt) = wahre Aussage Mit Zielen = Implikation

Mehrere Regeln = Disjunktion Mehrere Ziele = Konjunktion

Abfrage durch Eingabe von Zielliste

(4)

Fakten und Regeln

% Marge i s t M u t t e r von L i s a und B a r t mother ( marge , l i s a ) .

mother ( marge , b a r t ) . f a t h e r ( homer , b a r t ) . f a t h e r ( grampa , homer ) .

% Wenn Homer der V a t e r von B a r t i s t ,

% i s t e r auch e i n E l t e r n t e i l von ihm p a r e n t ( homer , b a r t ) : f a t h e r ( homer , b a r t ) . p a r e n t ( grampa , homer ) : mother ( grampa , homer ) . p a r e n t ( grampa , homer ) : f a t h e r ( grampa , homer ) . p a r e n t ( homer , n e l s o n ) : f a t h e r ( homer , n e l s o n ) .

% Grampa i s t Groß e l t e r n t e i l von B a r t ,

% wenn e r E l t e r n t e i l von Homer

% und Homer E l t e r n t e i l von B a r t i s t g r a n d p a r e n t ( grampa , b a r t ) :

p a r e n t ( grampa , homer ) , p a r e n t ( homer , b a r t ) . g r a n d p a r e n t ( grampa , n e l s o n ) :

p a r e n t ( grampa , homer ) , p a r e n t ( homer , n e l s o n ) .

4 7. Mai 2018 Einführung in Prolog

(5)

Variablen

Nicht sinnvoll/möglich alle Kombinationen aufzuschreiben Lösung: Regeln mit Variablen

Variablen können für beliebigen Term stehen

mother ( marge , l i s a ) . mother ( marge , b a r t ) . f a t h e r ( homer , b a r t ) . f a t h e r ( grampa , homer ) . p a r e n t ( X , Y ) : f a t h e r ( X , Y ) .

p a r e n t ( X , Y ) : mother ( X , Y ) .

g r a n d p a r e n t ( X , Y ) : p a r e n t ( X , Z ) , p a r e n t ( Z , Y ) .

Mögliche Abfragen:

? mother(marge, lisa).=⇒yes.

? mother(marge, nelson).=⇒no.

? mother(marge, X).=⇒X = lisa;X = bart;no.

? grandparent(X, Y).=⇒X = grampa, Y = bart;no.

(6)

Variablen

Nicht sinnvoll/möglich alle Kombinationen aufzuschreiben Lösung: Regeln mit Variablen

Variablen können für beliebigen Term stehen

mother ( marge , l i s a ) . mother ( marge , b a r t ) . f a t h e r ( homer , b a r t ) . f a t h e r ( grampa , homer ) . p a r e n t ( X , Y ) : f a t h e r ( X , Y ) .

p a r e n t ( X , Y ) : mother ( X , Y ) .

g r a n d p a r e n t ( X , Y ) : p a r e n t ( X , Z ) , p a r e n t ( Z , Y ) .

Mögliche Abfragen:

? mother(marge, lisa).=⇒yes.

? mother(marge, nelson).=⇒no.

? mother(marge, X).=⇒X = lisa;X = bart;no.

? grandparent(X, Y).=⇒X = grampa, Y = bart;no.

5 7. Mai 2018 Einführung in Prolog

(7)

Variablen

Nicht sinnvoll/möglich alle Kombinationen aufzuschreiben Lösung: Regeln mit Variablen

Variablen können für beliebigen Term stehen

mother ( marge , l i s a ) . mother ( marge , b a r t ) . f a t h e r ( homer , b a r t ) . f a t h e r ( grampa , homer ) . p a r e n t ( X , Y ) : f a t h e r ( X , Y ) .

p a r e n t ( X , Y ) : mother ( X , Y ) .

g r a n d p a r e n t ( X , Y ) : p a r e n t ( X , Z ) , p a r e n t ( Z , Y ) .

Mögliche Abfragen:

? mother(marge, lisa).=⇒yes.

? mother(marge, nelson).=⇒no.

? mother(marge, X).=⇒X = lisa;X = bart;no.

? grandparent(X, Y).=⇒X = grampa, Y = bart;no.

(8)

Substitution

Ersetzen von Variablen durch Terme Kann partielle Abbildung sein

σ= [X ⇒b]: σ(f(X)) =f(b)

σ= [X ⇒b,Yg(a)]: σ(f(X,Y)) =f(b,g(a))

σ= [X ⇒b,ZW,Af(a,Y)]: σ(g(X,Y,f(X,W),h(Z),f(A,B))) = g(b,Y,f(b,W),h(W),f(f(a,Y),B))

6 7. Mai 2018 Einführung in Prolog

(9)

Substitution

Ersetzen von Variablen durch Terme Kann partielle Abbildung sein σ= [X ⇒b]:

σ(f(X)) =f(b)

σ= [X ⇒b,Yg(a)]: σ(f(X,Y)) =f(b,g(a))

σ= [X ⇒b,ZW,Af(a,Y)]: σ(g(X,Y,f(X,W),h(Z),f(A,B))) = g(b,Y,f(b,W),h(W),f(f(a,Y),B))

(10)

Substitution

Ersetzen von Variablen durch Terme Kann partielle Abbildung sein σ= [X ⇒b]:

σ(f(X)) =f(b)

σ= [X ⇒b,Yg(a)]: σ(f(X,Y)) =f(b,g(a))

σ= [X ⇒b,ZW,Af(a,Y)]: σ(g(X,Y,f(X,W),h(Z),f(A,B))) = g(b,Y,f(b,W),h(W),f(f(a,Y),B))

6 7. Mai 2018 Einführung in Prolog

(11)

Substitution

Ersetzen von Variablen durch Terme Kann partielle Abbildung sein σ= [X ⇒b]:

σ(f(X)) =f(b)

σ= [X ⇒b,Yg(a)]: σ(f(X,Y)) =f(b,g(a))

σ= [X ⇒b,ZW,Af(a,Y)]: σ(g(X,Y,f(X,W),h(Z),f(A,B))) = g(b,Y,f(b,W),h(W),f(f(a,Y),B))

(12)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)} Lösungσ= [X ⇒f(b),Yb,Zb] {X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

7 7. Mai 2018 Einführung in Prolog

(13)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)} Lösungσ= [X ⇒f(b),Yb,Zb] {X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

(14)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)}

Lösungσ= [X ⇒f(b),Yb,Zb] {X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

7 7. Mai 2018 Einführung in Prolog

(15)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)} Lösungσ= [X ⇒f(b),Yb,Zb]

{X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

(16)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)} Lösungσ= [X ⇒f(b),Yb,Zb] {X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

7 7. Mai 2018 Einführung in Prolog

(17)

Unifikation

Gegeben: Menge von Termgleichungen

Gesucht: Substitution, nach deren Anwendung alle Gleichungen erfüllt sind (Unifikator)

{X =Y,Z =a}

Lösungen z.B.σ= [X ⇒Y,Za],σ= [Y ⇒X,Za], σ= [X ⇒b,Yb,Za]

{X =f(Y),g(X,Y) =g(f(Z),b)} Lösungσ= [X ⇒f(b),Yb,Zb] {X =f(Y),h(X) =h(g(a))}

Nicht unifizierbar! Widerspruch durch Gleichungf(Y) =g(a)!

(18)

Genaue Abarbeitung

mother ( marge , l i s a ) . mother ( marge , b a r t ) . f a t h e r ( homer , b a r t ) . f a t h e r ( grampa , homer ) . p a r e n t ( X , Y ) : f a t h e r ( X , Y ) .

p a r e n t ( X , Y ) : mother ( X , Y ) .

g r a n d p a r e n t ( X , Y ) : p a r e n t ( X , Z ) , p a r e n t ( Z , Y ) .

Versuche, passende Regel zu finden

Unifiziere den gesuchten Term mit Regelkopf Versuche, Teilziele von links nach rechts zu zeigen

Bei Fehlschlag: versuche, Teilziel links davon auf andere Weise zu erfüllen

Bei Fehlschlag für Regel: suche nächste Regel Beispielabfrage? grandparent(X, Y).

8 7. Mai 2018 Einführung in Prolog

(19)

Programme

Prolog hat nur Prädikate und Erfüllbarkeit

Insbesondere keine Funktionen mit Rückgabewerten Idee: mache Rückgabewert zum Teil des Prädikats

gegenueber ( l i n k s , r e c h t s ) . gegenueber ( r e c h t s , l i n k s ) . m i r r o r ( l e a f , l e a f ) .

m i r r o r ( node ( X , Y ) , node ( Y1 , X1 ) ) : m i r r o r ( X , X1 ) , m i r r o r ( Y , Y1 ) . symmetric ( X ) : m i r r o r ( X , X ) .

(20)

Zusatz: Unifikationsziele

Ziele der FormTerm=Term Unifiziert die beiden Terme erfüllbar, falls Unifikation gelingt

10 7. Mai 2018 Einführung in Prolog

(21)

Zusatz: Arithmetik

Erinnerung: Terme stehen nur für sich selbst Daher Gleichungen wie4 = 1 + 3nicht erfüllbar Daher: Spezielles RechenprädikatTermisTerm

Rechte Seite darf nur Arithmetik und keine Variablen enthalten Rechte Seite wird ausgerechnet und mit der linken Seite unifiziert

Beispiele:

? X is 0.=⇒X = 0.

? X is 1 + 3.=⇒X = 4.

? 4 is 1 + 3.=⇒yes.

? 5 is 1 + 3.=⇒no.

? 1 + 3 is 1 + 3.=⇒no.

? X is 1 + Y.=⇒Exception

? X is homer.=⇒Exception

(22)

Zusatz: Arithmetik

Erinnerung: Terme stehen nur für sich selbst Daher Gleichungen wie4 = 1 + 3nicht erfüllbar Daher: Spezielles RechenprädikatTermisTerm

Rechte Seite darf nur Arithmetik und keine Variablen enthalten Rechte Seite wird ausgerechnet und mit der linken Seite unifiziert Beispiele:

? X is 0.=⇒X = 0.

? X is 1 + 3.=⇒X = 4.

? 4 is 1 + 3.=⇒yes.

? 5 is 1 + 3.=⇒no.

? 1 + 3 is 1 + 3.=⇒no.

? X is 1 + Y.=⇒Exception

? X is homer.=⇒Exception

11 7. Mai 2018 Einführung in Prolog

(23)

Zusatz: Cut

Spezialziel!(Ausrufezeichen) Gelingt zunächst

Bei Reerfüllung: Fehlschlag der kompletten Regel inklusiver aller alternativen Versionen des Regelkopfes

a ( X , Z ) : b ( X , X , Z ) . a ( 1 , 3 ) .

b ( X , 1 , Z ) : e ( X , Z ) , ! , f ( Z ) . b ( X , 2 , Z ) : e ( X , Z ) , ! , f ( Z ) . b ( X , Y , 6 ) .

e ( 1 , 4 ) . e ( 1 , 5 ) . e ( 2 , 5 ) .

f ( 5 ) .

Referenzen

ÄHNLICHE DOKUMENTE

175—176 für den Sextanten angegebene Methode (mit Abschrauben des grossen Spiegels) auch auf den Spiegel—Prismenkreis angewendet werden, und zwar bequemer als beim Sextanten,

Die weitere Ein- richtung ist nun sofort verständlich. Mit dem grossen drehbaren Spiegel S wird eine Alhidade verbunden, welche Null zeigen soll, wenn S und 3 parallel sind, und

Das Dreifache aus der Summe einer Zahl und 4 ist genau gleich gross wie das Vierfache dieser Zahl.. Wie lautet die

rechne geteilt dividiere der x-te Teil Quotient. Klammern auflösen und

Das Wort Term stammt aus der lateinischen Sprache.*Terme können bestehen aus: Zahlen, Variablen (= Platzhalter, Unbekannte) wie z. Meistens sind Terme aller dings zusammengesetzt

Ich werde beschreiben, wie moderne Methoden der Hamiltonschen Dynamik (Floer Homologie) verwendet werden können, um dies zu beweisen. Felix Schlenk (Université Libre

Der Kanton soll eine Soforthilfe möglich machen: Auf unbürokratische Art und Weise sollen in Härtefällen Geschädigte in den verschiedenen Regionen und besonders

Dabei wurde festgestellt, dass für die Verarbeitung organischer Abfälle aus dem Abfallbereich keine zusätzlichen Vergärungsanlagen erforderlich sind, umso mehr als bei