Vorlesung 18
This commit is contained in:
parent
13e27ab74e
commit
13e6195c4e
BIN
Assets/Logik-logische-programmierung-einordnung.png
Normal file
BIN
Assets/Logik-logische-programmierung-einordnung.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 232 KiB |
BIN
Assets/Logik-prädikate-suche-fail-2.png
Normal file
BIN
Assets/Logik-prädikate-suche-fail-2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
BIN
Assets/Logik-prädikate-suche-fail.png
Normal file
BIN
Assets/Logik-prädikate-suche-fail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 104 KiB |
BIN
Assets/Logik-prädikate-suche.png
Normal file
BIN
Assets/Logik-prädikate-suche.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
@ -3013,3 +3013,140 @@ Dies geschieht solange, bis
|
|||||||
|
|
||||||
Zusätzliche Markierung der Kanten mit der Variablenersetzung (dem Unifikator).
|
Zusätzliche Markierung der Kanten mit der Variablenersetzung (dem Unifikator).
|
||||||
|
|
||||||
|
|
||||||
|
### PROLOG aus prozeduraler Sicht
|
||||||
|
Beispiel: die „Hackordnung“
|
||||||
|
1. chef_von(mueller,mayer).
|
||||||
|
2. chef_von(mayer,otto).
|
||||||
|
3. chef_von(otto,walter).
|
||||||
|
4. chef_von(walter,schulze).
|
||||||
|
5. weisungsrecht(X,Y) :- chef_von(X,Y).
|
||||||
|
6. weisungsrecht(X,Y) :- chef_von(X,Z), weisungsrecht(Z,Y).
|
||||||
|
|
||||||
|
> Deklarative Interpretation
|
||||||
|
In einem Objektbereich $I=\{mueller, mayer, schulze, ...\}$ bildet das Prädikat $weisungsrecht(X,Y)$ $[X,Y]$ auf wahr ab, gdw.
|
||||||
|
- das Prädikat $chef_von(X,Y)$ das Paar $[X,Y]$ auf wahr abbildet oder
|
||||||
|
- es ein $Z\in I$ gibt, so dass
|
||||||
|
- das Prädikat $chef_von(X,Z)$ das Paar $[X,Z]$ auf wahr abbildet und
|
||||||
|
- das Prädikat $weisungsrecht(Z,Y)$ das Paar $[Z,Y]$ auf wahr abbildet.
|
||||||
|
|
||||||
|
> Prozedurale Interpretation
|
||||||
|
Die Prozedur $weisungsrecht(X,Y)$ wird abgearbeitet, indem
|
||||||
|
1. die Unterprozedur $chef_von(X,Y)$ abgearbeitet wird. Im Erfolgsfall ist die Abarbeitung beendet; anderenfalls werden
|
||||||
|
2. die Unterprozeduren $chef_von(X,Z)$ und $weisungsrecht(Z,Y)$ abgearbeitet; indem systematisch Prozedurvarianten beider Unterprozeduren aufgerufen werden.Dies geschieht bis zum Erfolgsfall oder erfolgloser erschöpfender Suche.
|
||||||
|
|
||||||
|
|
||||||
|
| deklarative Interpretation | prozedurale Interpretation |
|
||||||
|
| --- | --- |
|
||||||
|
Prädikat | Prozedur
|
||||||
|
Ziel | Prozeduraufruf
|
||||||
|
Teilziel | Unterprozedur
|
||||||
|
Klauseln mit gleichem Kopfprädikat | Prozedur-varianten
|
||||||
|
Klauselkopf | Prozedurkopf
|
||||||
|
Klauselkörper | Prozedurrumpf
|
||||||
|
|
||||||
|
Die Gratwanderung zwischen Wünschenswertem und technisch Machbarem erfordert mitunter „Prozedurales Mitdenken“, um
|
||||||
|
1. eine gewünschte Reihenfolge konstruktiver Lösungen zu erzwingen,
|
||||||
|
2. nicht terminierende (aber – deklarativ, d.h. logisch interpretiert - völlig korrekte) Programme zu vermeiden,
|
||||||
|
3. seiteneffektbehaftete Prädikate sinnvoll einzusetzen,
|
||||||
|
4. (laufzeit-) effizienter zu programmieren und
|
||||||
|
5. das Suchverfahren gezielt zu manipulieren.
|
||||||
|
|
||||||
|
Programm inkl. Deklarationsteil (BSP3.PRO)
|
||||||
|
```
|
||||||
|
domains
|
||||||
|
person = symbol
|
||||||
|
predicates
|
||||||
|
chef_von(person,person)
|
||||||
|
weisungsrecht(person,person)
|
||||||
|
clauses
|
||||||
|
chef_von(mueller,mayer).
|
||||||
|
chef_von(mayer,otto).
|
||||||
|
chef_von(otto,walter).
|
||||||
|
chef_von(walter,schulze).
|
||||||
|
weisungsrecht(X,Y) :- chef_von(X,Y).
|
||||||
|
weisungsrecht(X,Y) :- chef_von(X,Z), weisungsrecht(Z,Y).
|
||||||
|
goal
|
||||||
|
weisungsrecht(Wer,Wem).
|
||||||
|
```
|
||||||
|
|
||||||
|
Prädikate zur Steuerung der Suche nach einer Folge von Resolutionsschritten!
|
||||||
|
|
||||||
|
!(cut)
|
||||||
|
Das Prädikat $!/0$ ist stets wahr. In Klauselkörpern eingefügt verhindert es ein Backtrack der hinter $!/0$ stehenden Teilziele zu den vor $!/0$ stehenden Teilzielen sowie zu alternativen Klauseln des gleichen Kopfprädikats. Die Verarbeitung von $!/0$ schneidet demnach alle vor der Verarbeitung verbliebenen Lösungswege betreffenden Prozedur ab.
|
||||||
|
|
||||||
|
Prädikate zur Steuerung der Suche: $!/0$
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
Prädikate zur Steuerung der Suche nach einer Folge von Resolutionsschritten
|
||||||
|
**fail**
|
||||||
|
Das Prädikat $fail/0$ ist stets falsch. In Klauselkörpern eingefügt löst es ein Backtrack aus bzw. führt zum Misserfolg, falls der Backtrack-Keller leer ist, d.h. falls es keine verbleibenden Lösungswege (mehr) gibt.
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
### Listen und rekursive Problemlösungsstrategien
|
||||||
|
Listen
|
||||||
|
1. $[]$ ist eine Liste.
|
||||||
|
2. Wenn $T$ ein Term und $L$ eine Liste ist, dann ist
|
||||||
|
1. $[T|L]$ eine Liste.
|
||||||
|
2. $T.L$ eine Liste. (ungebräuchlich)
|
||||||
|
3. $.(T,L)$ eine Liste. (ungebräuchlich)
|
||||||
|
Das erste Element $T$ heißt Listenkopf, $L$ heißt Listenkörper oder Restliste.
|
||||||
|
3. Wenn $t_1, ... ,t_n$ Terme sind, so ist $[t_1,...,t_n]$ eine Liste.
|
||||||
|
4. Weitere Notationsformen von Listen gibt es nicht.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Listen als kompakte Wissensrepräsentation: ein bekanntes Beispiel (BSP5.PRO)
|
||||||
|
- arbeiten_in([meier, mueller], raum_1).
|
||||||
|
- arbeitet_in(meier, raum_1).
|
||||||
|
- arbeitet_in(mueller, raum_1).
|
||||||
|
- arbeitet_in(otto, raum_2).
|
||||||
|
- arbeiten_in([otto], raum_2 ).
|
||||||
|
- arbeitet_in(kraus, raum_3).
|
||||||
|
- arbeiten_in([kraus], raum_3 ).
|
||||||
|
- anschluesse_in([raum_2, raum_3]).
|
||||||
|
- anschluss_in(raum_2).
|
||||||
|
- anschluss_in(raum_3).
|
||||||
|
|
||||||
|
**Rekursion** in der Logischen Programmierung
|
||||||
|
Eine Prozedur heißt (direkt) rekursiv, wenn in mindestens einem der Klauselkörper ihrer Klauseln ein erneuter Aufruf des Kopfprädikates erfolgt.
|
||||||
|
Ist der Selbstaufruf die letzte Atomformel des Klauselkörpers der letzten Klausel dieser Prozedur - bzw. wird er es durch vorheriges „Abschneiden“ nachfolgender
|
||||||
|
Klauseln mit dem Prädikat $!/0$ - , so spricht man von Rechtsrekursion ; anderenfalls von Linksrekursion.
|
||||||
|
Eine Prozedur heißt indirekt rekursiv, wenn bei der Abarbeitung ihres Aufrufes ein erneuter Aufruf derselben Prozedur erfolgt.
|
||||||
|
|
||||||
|
Wissensverarbeitung mit Listen: (BSP5.PRO)
|
||||||
|
- erreichbar(K) :- arbeitet_in(K,R), anschluss_in(R).
|
||||||
|
- erreichbar(K) :- anschluesse_in(Rs), member(R, Rs), arbeiten_in(Ks, R), member(K, Ks).
|
||||||
|
- koennen_daten_austauschen(K1,K2) :- arbeitet_in(K1,R),arbeitet_in(K2,R).
|
||||||
|
- koennen_daten_austauschen(K1,K2) :- arbeiten_in(Ks,_),member(K1,Ks), member(K2,Ks).
|
||||||
|
- koennen_daten_austauschen(K1,K2) :- erreichbar(K1),erreichbar(K2).
|
||||||
|
- koennen_daten_austauschen(K1,K2) :- erreichbar(K1),erreichbar(K2).
|
||||||
|
|
||||||
|
BSP5.PRO
|
||||||
|
```
|
||||||
|
domains
|
||||||
|
person, raum = symbol
|
||||||
|
raeume = raum*
|
||||||
|
personen = person*
|
||||||
|
predicates
|
||||||
|
arbeiten_in(personen, raum)
|
||||||
|
anschluesse_in(raeume)
|
||||||
|
erreichbar(person)
|
||||||
|
koennen_daten_austauschen(person,person)
|
||||||
|
member(person,personen)
|
||||||
|
member(raum,raeume)
|
||||||
|
clauses
|
||||||
|
... (siehe oben)
|
||||||
|
member(E,[E|_]).
|
||||||
|
member(E,[_|R]) :- member(E,R).
|
||||||
|
goal
|
||||||
|
erreichbar(Wer).
|
||||||
|
```
|
||||||
|
|
||||||
|
**Unifikation 2er Listen**
|
||||||
|
1. Zwei leere Listen sind (als identische Konstanten aufzufassen und daher) miteinander unifizierbar.
|
||||||
|
1. Zwei nichtleere Listen $[K_1|R_1]$ und $[K_2|R_2]$ sind miteinander unifizierbar, wenn ihre Köpfe ($K_1$ und $K_2$) und ihre Restlisten ($R_1$ und $R_2$) jeweils miteinander unifizierbar sind.
|
||||||
|
3. Eine Liste $L$ und eine Variable $X$ sind miteinander unifizierbar, wenn die Variable selbst nicht in der Liste enthalten ist. Die Variable $X$ wird bei erfolgreicher Unifikation mit der Liste $L$ instanziert: $X:=L$.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user