Einf - PowerPoint PPT Presentation

1 / 53
About This Presentation
Title:

Einf

Description:

Einf hrung in PROLOG Referat zur Veranstaltung Informatik VI (18.635) StD G. Noll Rhein Gymnasium Sinzig Februar 2001 f (x) f g g (x) sterblich(A) :- mensch(A). – PowerPoint PPT presentation

Number of Views:102
Avg rating:3.0/5.0
Slides: 54
Provided by: Grego45
Category:
Tags: einf

less

Transcript and Presenter's Notes

Title: Einf


1
Einführung in PROLOG
Referat zur Veranstaltung Informatik VI
(18.635) StD G. Noll Rhein Gymnasium
Sinzig Februar 2001
f
(
x
)



f
(
)


g
(
)


g
(
x
)



sterblich(A) - mensch(A). mensch(x).
barbara
2
Logik
  • Aristoteles Syllogismen ( 330 v. Chr.)
  • Gottlob Frege Begriffsschrift (1879)
  • Bertrand Russel, Alfred North Whitehead Principia
    Mathematica (1910)
  • Colmerauer e.a. System-Q (1971)

3
PROLOG
  • PROgrammieren in LOGik
  • Anfang der 70er Jahre in Edinburgh von Kowalski
    und van Emden entwickelt
  • in Marseille von Colmerauer zum ersten Mal
    implementiert
  • in der Mitte der 80er Jahre weltweiter Durchbruch
    als Sprache der KI und bei der Entwicklung von
    Expertensystemen
  • heute hat das Interesse an PROLOG nachgelassen

4
Vorteile für die Schule
  • überschaubare Syntax
  • interaktive Programmerstellung
  • deklaratives Programmieren als Gegenstück zum
    imperativen Konzept
  • kostenlose (gepflegte) PROLOG-Implementationen im
    InternetSWI-Prolog www.swi.psy.uva.nl/projects/S
    WI-Prolog/Strawberry Prolog www.dobrev.com/Visua
    l Prolog www.visual-prolog.com/

5
PROLOG-Programm
  • Programmieren in PROLOG bedeutet
  • das Erstellen einer Wissensbasis
  • die Formulierung intelligenter Anfragen

6
Wissensbasis
  • Wissen ist die Fähigkeit zur sachgerechten
    Interpretation von Daten
  • Daten führen über eine Interpretation zur
    Information
  • Daten werden für PROLOG in einer Wissensbasis
    gespeichert

7
PROLOG - System
Eingabe von Daten
Benutzerin Benutzer
Anfrage
Suchstrategien
Inferenzmaschine
Logik
Antworten
8
Klauseln
Fakten Eigenschaften von Objekten
oder Beziehungen zwischen
ihnen Regeln wenn-dann Aussagen
9
Fakten
  • Mit Fakten stellt man Konstanten, Eigenschaften
    von Objekten oder Beziehungen zwischen Objekten
    dar

sonnig. frau(elisabeth). mutter(elisabeth,gre
gor).
  • Fakten bestehen aus einem Klauselkopf, d. h.
    einem Funktor mit keinem, einem oder mehreren
    Argumenten

10
Regeln
  • Mit Regeln beschreibt man wenn-dann Aussagen (
    d. h. bedingte Beziehungen) zwischen Objekten
  • Sie bestehen aus einem (Klausel-) Kopf und einem
    Körper mit Termen (Zielen) frau(X) -
    mutter(X,_).
  • Der Körper beschreibt eine Folge von
    Voraussetzungen, aus deren Gültigkeit auf die
    Gültigkeit des Kopfes geschlossen wird

11
Terme
  • Im Körper einer Regel können als Terme auftreten
  • Klauselköpfe frau(X) - mutter(X,_).
  • Operationen old(X) - X gt 80.
  • Systemprozeduraufrufe out(X) - write(X), nl.

12
Termverknüpfungen
  • Terme im Regelkörper lassen sich logisch
    miteinander verbinden
  • ein Komma , steht für UND
  • ein Semikolon für ODER
  • Die ODER-Verknüpfung wird selten verwendet.
    Stattdessen fügt man eine weitere Regel hinzu.
  • opa(O,E) - vater(O,V), vater(V,E).
  • opa(O,E) - vater(O,M), mutter(M,E).

13
Prädikate
  • Klauseln werden identifiziert über ihren
    eindeutigen Bezeichner, den Funktor, und ihre
    Stelligkeit.

mutter(claudia). mutter/1mutter(else,pia). mutt
er/2
  • Alle Klauseln mit gleichem Funktor und gleicher
    Stelligkeit bilden ein Prädikat

14
Syntax
  • Bezeichner werden aus Buchstaben, Ziffern und
    Unterstrich gebildet
  • Bezeichner für Funktoren beginnen mit einem
    Kleinbuchstaben
  • Bezeichner für Konstanten beginnen mit einem
    Kleinbuchstaben
  • Bezeichner für Variable beginnen mit einem
    Großbuchstaben
  • der Unterstrich _ bezeichnet eine anonyme
    Variable
  • Klauseln und Abfragen enden mit einem Punkt .
  • Kommentare stehen zwischen / und /

15
Anfragen
  • Erkenntnisse aus einer Datenbasis gewinnen wir
    durch Anfragen. Diese werden interaktiv an das
    System als Ziele (goals) in Form von
    Klauselköpfen gestellt
  • ?- mutter(claudia). Antwort yes
  • ?- mutter(M,pia). Antwort
    Melse more (y/n)?

16
Übung 1
  • Geben Sie in das PROLOG-System folgende Daten
    ein
  • vater(egon,hans). / vater(Vater,Kind) /
  • vater(hans,fritz).
  • vater(emil,maria).
  • mutter(maria,fritz). / mutter(Mutter,Kind) /
  • Definieren Sie eine Regel für opa(Opa,Enkelkind)
    und stellen Sie geeignete Anfragen, u.a. nach dem
    Opa von Fritz
  • Untersuchen Sie, was passiert, wenn Sie die
    Reihenfolge der Klauseln im Programm ändern
  • Wie findet PROLOG die Antworten auf Ihre Anfragen

17
Semantik
  • PROLOG besitzt neben der deklarativen Semantik
    auch eine prozedurale.
  • deklarativ logische Bedeutung des Programms
  • prozedural Abarbeitung des Programms
  • Anfragen werden mit Hilfe der Klauseln solange
    auf einfachere Aussagen zurückgeführt, bis diese
    Fakten des Programms sind. Dies leistet die
    Inferenzmaschine.

18
Matching
  • Das Systems geht auf die Suche nach einer
    passenden Klausel
  • Eine Klausel passt zu einem Ziel (matched),
    wenn der Klauselkopf mit dem Ziel unifiziert
    (verschmilzt)
  • Klausel und Ziel haben den gleichen Namen und
    gleiche Stelligkeit
  • die Parameter passen zueinander, d. h. sie sind
    entweder identisch oder mindestens ein Parameter
    ist eine Variable
  • Im Prozess der Unifikation werden die Variablen
    an die Parameter des anderen Ausdrucks gebunden
    sie werden instantiiert (instanziert) oder
    gleichgesetzt

19
Backtracking
  • Der Suchprozess nach einer passenden Klausel kann
    in Sackgassen gelangen
  • eine ausgewählte passende Klausel führt nicht zum
    Ziel, so dass später eine alternative, ebenfalls
    passende Klausel versucht werden muss
  • Ein damit verbundenes Zurücksetzen auf einen
    früheren Zustand im Suchprozess wird Backtracking
    genannt
  • Die Rückkehr ist verbunden mit der Freigabe aller
    Variablenbindungen, die seit dem ersten Anlauf
    des früheren Zustandes vorgenommen wurden

20
UND-ODER-Baum
  • An der Wurzel steht der Funktor des Prädikats,
    das mit der Anfrage matched.
  • Die Nachfolgeknoten enthalten die Klauseln des
    PrädikatesBei Regeln bilden die Klauseln des
    Rumpfes die Nachfolgeknoten
  • UND-Verknüpfungen von Klauseln werden mit einem
    Winkelbogen dargestellt.

21
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vfritz Efritz
Vhans Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
Inst Oegon Inst Vhans
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Opa egon
Inst Ohans Inst Vfritz
22
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vfritz Efritz
Vmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Ohans Inst Vmaria
Inst Ohans Inst Vfritz
23
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Vmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Ohans Inst Vmaria
24
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mhans Efritz
Mfritz Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oegon Inst Mhans
Inst Ohans Inst Mfritz
25
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mmaria Efritz
Mfritz Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oemil Inst Mmaria
Inst Ohans Inst Mfritz
26
opa(Opa,fritz).
opa / 2
Ident OOpa Inst Efritz
opa(O,E)
opa(O,E)
Mmaria Efritz
mutter(M,E)
vater(V,E)
vater(O,M)
vater(O,V)
Opa emil
vater(egon,hans)
vater(egon,hans)
vater(egon,hans)
mutter(maria,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater (hans,fritz)
vater(emil,maria)
vater(emil,maria)
vater(emil,maria)
Inst Oemil Inst Mmaria
27
Trace
  • Einem Trace liegt das Vier-Port-Boxmodell zugrunde
  • call das Ziel wird das erste Mal aufgerufen
  • exit das Ziel ist erfolgreich abgearbeitet worden
  • redo nach erfolgreicher Abarbeitung wird das Ziel
    zu einem späteren Zeitpunkt nochmals über
    Backtracking aktiviert
  • fail der Versuch das Ziel zu beweisen scheitert

28
fixPROLOG Trace
  • Die Trace-Implementation von fixPROLOG entspricht
    leider nicht dem Standard

?- opa(Opa,fritz).
  • CALL opa(Opa_1,fritz)
  • COMP opa(O_2,E_2) - vater(O_2,V_2)
    , vater(V_2,E_2)
  • IDEN O_2 lt-- Opa_1
  • INST E_2 lt-- fritz
  • CALL vater(O_2,V_2)
  • COMP vater(egon,hans)
  • INST Opa_1 lt-- egon
  • INST V_2 lt-- hans
  • EXIT vater(egon,hans)
  • CALL vater(hans,fritz)
  • COMP vater(egon,hans)
  • FAIL vater(hans,fritz)
  • REDO vater(hans,fritz)
  • COMP vater(hans,fritz)
  • EXIT vater(hans,fritz)
  •  
  • Opa egon
  •  
  • REDO vater(hans,fritz)

29
Übung 2
  • Bearbeiten Sie die Arbeitsanweisungen des
    Kapitels 4.4 der Handreichung
    Wissensverarbeitung mit PROLOG
  • Verwenden Sie auch die Möglichkeit, die Arbeit
    der Inferenzmaschine mit einem Trace zu verfolgen.

30
Rekursion
  • Eine besondere Stärke erfährt PROLOG durch die
    Möglichkeit, eine Beziehung durch Rückgriff auf
    sich selbst definieren zu können.
  • In der Wissenbasis sei das Ergebnis eines kleinen
    Wettlaufs erfasst. Dabei besagt das Prädikat
    vor/2 beim Faktum vor(L1,L2). , dass L1
    unmittelbar vor L2 ins Ziel kommt.
  • vor(lisa,tom). vor(tom,elke). vor(elke,karl).
  • vor(karl,petra). vor(petra,ria). vor(ria,mario).
  • Wir wollen ein Prädikat besser/2 definieren mit
    folgender Bedeutung besser(L1,L2). / L1 hat
    eine bessere Zeit als L2 /

31
besser/2
  • Ein erster Ansatz wäre
  • besser(L1,L2) - vor(L1,L2).
  • L1 braucht aber nicht unmittelbar vor L2 ins Ziel
    zu kommen, um eine bessere Zeit zu haben, deshalb
    wären
  • besser(L1,L2) - vor(L1,L3),vor(L3,L2).
    oder
  • besser(L1,L2) - vor(L1,L3),vor(L3,L4),vor(L4,L2
    ). usw.
  • ebenfalls mögliche Klauseln.

32
besser/2
besser(L1,L2) - vor(L1,L3), besser (L3,L2).
33
besser/2
  • Testen Sie das Prädikat besser/2 z. B. mit der
    Anfrage besser(tom,petra).
  • Leider erhalten Sie nicht die erwarteten
    Antworten!
  • Es fehlt eine Abbruchbedingung für die Rekursion

besser(L1,L2) - vor(L1,L3), besser(L3,L2).besser
(L1,L2) - vor(L1,L2).
34
besser/2
  • Testen Sie, wie sich für besser/2
  • eine Vertauschung der beiden Klauseln
  • eine Vertauschung der Ziele im Regelrumpf
  • auf die Abfragen auswirken

35
Übung 3
  • Wir betrachten das Prädikat wechsel/2 mit den
    Klauseln wechsel(a,b). wechsel(X,Y) -
    wechsel(Y,X).Welche Ausgabe liefert die Anfrage
    wechsel(A,B) ?
  • Untersuchen Sie auch hier die Wirkung einer
    Vertauschung der beiden Klauseln

36
Übung 4
  • Bearbeiten Sie die Arbeitsanweisungen des
    Kapitels 4.5 der Handreichung
    Wissensverarbeitung mit PROLOG

37
Listen
  • Die Liste ist die zentrale Datenstruktur in
    PROLOG.Sie besteht aus einer Folge beliebiger
    Elemente
  • liste( ).
  • liste(Kopf Rest) - liste(Rest).
  • Beispiele a,b,c a,b,c,d /
    geschachtelte Liste/ / leere
    Liste /

38
Listenstruktur
  • Die Zerlegung einer Liste in Kopf und Rest ist
    sehr flexibelrhein,ahr,mosel rhein
    ahr,mosel
  • rhein,ahr mosel rhein,ahr,mosel
  • ?- a,b,c,d K Rs. / Rs
    Listenvariable / K aRs b,c,d

39
Listenoperationen
  • Listen sind rekursive Datenstrukturen.
    Dementsprechend sind auch die Operationen auf
    Listen rekursiv erklärt.
  • member/2 / member(X,Xs) ? X ist Element der
    Liste Xs /member(X,XLs).member(X,YXs) -
    member(X,Xs).

40
member/2
  • Wir können member/2 auf dreierlei Arten verwenden
  • als Zugehörigkeitstest ?- member(c,a,b,c). Ant
    wort yes ?- member(e,a,b,c). Antwort no
  • zur Erzeugung aller Elemente einer Liste?-
    member(X,a,b,c). Antwort Xa Xb Xc no
  • zur Erzeugung von Listen, die ein bestimmtes
    Element enthalten?- member(a,Ls). Antwort Ls
    aRs_2
  • Ls X_2,aRs_3 Ls
    X_3,X_3,aRs_4

41
laenge/2 - append/3
  • laenge/2 / laenge(Xs,N) ? die Liste Xs hat N
    Elemente /
  • laenge( ,0).laenge(XXs,N) -
    laenge(Xs,N1), N is N11.
  • append/3 / append(Xs,Ys,Es) ? die Liste Es ist
    die Verkettung von Xs und Ys/
  • append( ,Ls,Ls).append(XXs,Ys,XEs) -
    append(Xs,Ys,Es).

42
delete/3 - insert/3
  • delete/3 / delete(X,Xs,Es) ? Es ist die Liste
    Xs ohne das Element X /
  • delete(X,XLs,Ls).delete(X,YYs,YEs) -
    delete(X,Ys,Es).
  • insert/3 / insert(X,Xs,Es) ? die Liste Es ist
    die Liste Xs mit eingefügtem X/
  • insert(X,Xs,Es) - delete(X,Es,Xs).

43
Beispiel für insert/3
  • Wie verarbeitet PROLOG die Anfrage
    insert(3,1,2,Es) ?

insert(X,Xs,Es) - delete(X,Es,Xs).
  • Die Anfrage verlangt den Beweis von
    delete(3,Es,1,2)
  • Die erste delete-Klausel delete(X,XLs,Ls)
    passt dazu mit den Instantiierungen X ? 3, Ls ?
    1,2 und damit Es ? 31,2
  • Als Ergebnis wird somit Es 3,1,2 ausgegeben

44
Ablaufsteuerung
  • Bei der Bearbeitung einer Anfrage führt PROLOG
    automatisch Backtracking durch, wenn dies zur
    Erfüllung des Ziels erforderlich ist. Manchmal
    ist dies aber nicht notwendig oder nicht
    gewünscht.
  • max(X,Y,X) - X gt Y. / X max(X,Y)
    / max(X,Y,Y) - X lt Y. / Y max(X,Y) /
  • Das Systemprädikat ! (Cut) verhindert die
    Suche nach alternativen Lösungen
  • über nachfolgende Klauseln des gerade
    bearbeiteten Prädikats
  • über Ziele des Regelkörpers, die vor dem Cut
    stehen

45
Probleme mit dem Cut
  • Bei Programmen ohne Cut spielt die Reihenfolge
    der Klauseln für die Lösung höchstens
    hinsichtlich der Effizienz der Lösungssuche eine
    Rolle
  • Bei Verwendung des Cut erhalten wir je nach
    Klauselreihenfolge eventuell verschiedene
    logische Bedeutungen

p - c.p - a, !, b.
p - a, !, b.p - c.
46
Verneinung
  • Neben den logischen Standardverknüpfungen UND und
    ODER gibt es das Systemprädikat NOT/1
  • not(X) - X, !, fail. / X ist beweisbar
    /not(X). / X ist nicht beweisbar /
  • Die Verwendung von not/1 ist nicht
    unproblematischfrau(else). frau(petra).
    mann(peter). mann(frank).?- not
    frau(karin). ?- mann(heinz).
  • Antwort yes Antwort no closed world
    assumption

47
Übung 5
  • Laden Sie das Menue-Programm. Stellen Sie
    geeignete Anfragen und analysieren Sie die
    Prädikate start/0 und null_auffuellen/1
  • Laden Sie das Inssort-Programm. Stellen Sie
    geeignete Anfragen und analysieren Sie die
    Prädikate insertsort/2 und fuege_ein/3

48
Startprädikat
  • Querydatei für die Datenbasis menue.dtb

start - reconsult('menue.dtb'),
write('Menues unter 20 DM'),nl,
write('-----------------------------'),nl,
write('Gregor Noll 2001'),nl,nl,nl,
menue(V,H,N,DM,Pf),
DMlt20, write(V),tab(15),write(H),tab(15)
,write(N),tab(15),write(DM),write(','),write(Pf),
null_auffuellen(Pf),
tab(15),write('DM'),nl, nl, fail.
null_auffuellen(Pf) - Pf0,!,
write('0'). null_auffuellen(Pf).
49
Sortieren
  • Sortieren durch Einfügen

start - L-2,22,1,10,-3,4,2,-1,5,9,4,32,
nl,nl,nl,nl,nl, write('Insertsort '),nl,nl,
write(L),nl,nl, insertsort(L,S),
write(S),nl,nl, fail.
insertsort( , ). insertsort(XRest,Sortiert)
- insertsort(Rest,Sortierter_Rest),fuege_ein(X,
Sortierter_Rest,Sortiert).
fuege_ein(X,Sortierter_Rest,Sortiert). fuege_ein(X
,YSortiert,YSortiert1) - XgtY,!,
fuege_ein(X,Sortiert,Sortiert1). fuege_ein(X,Sorti
ert,XSortiert).
50
Endliche Automaten
  • Mit PROLOG lassen sich besonders durchsichtige
    Simulationsprogramme für endliche Automaten
    schreiben
  • Laden Sie das Programm Akzeptor und analysieren
    Sie seine Funktionsweise
  • Laden Sie das Programm RightShi und analysieren
    Sie seine Funktionsweise

51
Akzeptor
start - akzeptiert (a,b,a,b,a,b,a),!,fail. akze
ptiert(W) - nl,schreibe(W),
startzustand(S), akzeptiert(S,W),
write(' lt--- Wort akzeptiert'),nl,nl,
!,fail. akzeptiert(W) - write(' lt---
Wort nicht akzeptiert'),nl,nl.
akzeptiert(S,KRs) - pfeil(S,K,S1),
akzeptiert(S1,Rs). akzeptiert(S, ) -
endzustand(S).
startzustand(s). endzustand(s). pfeil(s,a,r).
pfeil(r,b,s).
schreibe(KRs) - write(K),
schreibe(Rs). schreibe( ).
52
Right - Shifter
start - nl, write('RIGHT-SHIFTER'),nl,nl, tra
nsduktor(1,0,1,1,0,1,0), !,fail. transduktor(Ei
ngabe) - schreibe(Eingabe), write(' ---gt
'), startzustand(S), transduktor(S,Eingabe). tr
ansduktor(Zustand,ERest) - pfeil(Zustand,E,A,
Neuer_Zustand), write(A), transduktor(Neuer_Zust
and,Rest). transduktor(S, ) - nl,nl.
startzustand(s). pfeil(s,0,0,n).
pfeil(s,1,0,e). pfeil(n,0,0,n).
pfeil(n,1,0,e). pfeil(e,0,1,n). pfeil(e,1,1,e).
schreibe(KRs) - write(K),
schreibe(Rs). schreibe( ).
53
Literatur
  • Wissensverarbeitung mit PROLOGHandreichung zum
    Lehrplan InformatikKoblenz 1995
    (LMZ)informatikag.bildung-rp.de
  • Bothe,K. / Stojanow,St.Praktische
    Prolog-ProgrammierungBerlin 1991 (ISBN
    3-341-01035-7)
  • Göhner,H. / Hafenbrak,B.Arbeitsbuch PROLOGBonn
    1991 (ISBN3-427-46861-5)
Write a Comment
User Comments (0)
About PowerShow.com