Vorlesung 17
This commit is contained in:
		
							parent
							
								
									32d0bbea05
								
							
						
					
					
						commit
						13e27ab74e
					
				| @ -2919,3 +2919,97 @@ BACKUS-NAUR-Form | ||||
| - Name ::= Kleinbuchstabe |Kleinbuchstabe Restname | "Zeichenfolge" | Sonderzeichenfolge | ||||
| - RestName ::= Kleinbuchstabe | Ziffer | _ | Kleinbuchstabe RestName | Ziffer RestName | _ RestName | ||||
| - ... | ||||
| 
 | ||||
| ### PROLOG aus logischer Sicht | ||||
| Was muss der Programmierer tun?  | ||||
| - Formulierung einer Menge von Fakten und Regeln (kurz: Klauseln), d.h. einer Wissensbasis $M\equiv\{K_1,...,K_n\}$ | ||||
| - Formulierung einer negierten Hypothese (Frage, Ziel) $\lnot H\equiv\bigwedge_{i=1}^m H_i \equiv false\leftarrow \bigwedge_{i=1}^m H_i$ | ||||
| 
 | ||||
| Was darf der Programmierer erwarten?  | ||||
| - Dass das „Deduktionstool“ PROLOG $M \Vdash H$ zu zeigen versucht, d.h. $kt(\bigwedge_{i=1}^n K_i\wedge \lnot H)$ ) | ||||
| - ..., indem systematisch die Resolutionsmethode auf $\lnot H$ und eine der Klauseln aus $M$ angewandt wird, solange bis $\lnot H\equiv false\leftarrow true$ entsteht | ||||
| 
 | ||||
| #### Formulierung von Wissensbasen | ||||
| 1. Beispiel 1 (BSP1.PRO) | ||||
| - Yoshihito und Sadako sind die Eltern von Hirohito. | ||||
|   - vater_von(yoshihito,hirohito). | ||||
|   - mutter_von(sadako,hirohito). | ||||
| - Kuniyoshi und Chikako sind die Eltern von Nagako. | ||||
|   - vater_von(kunioshi,nagako). | ||||
|   - mutter_von(chikako,nagako). | ||||
| - Akihito‘s und Hitachi‘s Eltern sind Hirohito und Nagako. | ||||
|   - vater_von(hirohito,akihito). | ||||
|   - vater_von(hirohito,hitachi). | ||||
|   - mutter_von(nagako,akihito). | ||||
|   - mutter_von(nagako,hitachi). | ||||
| - Der Großvater ist der Vater des Vaters oder der Vater der Mutter. | ||||
|   - grossvater_von(G,E) :- vater_von(G,V), vater_von(V,E). | ||||
|   - grossvater_von(G,E) :-vater_von(G,M),mutter_von(M,E). | ||||
| - Geschwister haben den gleichen Vater und die gleiche Mutter. | ||||
|   - geschwister(X,Y) :- vater_von(V,X), vater_von(V,Y), mutter_von(M,X), mutter_von(M,Y). | ||||
| 
 | ||||
| Visual Prolog benötigt aber einen Deklarationsteil für Datentypen und Aritäten der Prädikate, der für die o.g. Wissensbasis so aussieht: | ||||
| ``` | ||||
| domains | ||||
|   person = symbol | ||||
| predicates | ||||
|   vater_von(person,person)        % bei nichtdeterministischen Prädikaten | ||||
|   mutter_von(person,person).      % kann man „nondeterm“ vor das | ||||
|   grossvater_von(person,person)   % Prädikat schreiben, um die | ||||
|   geschwister(person,person)      % Kompilation effizienter zu machen | ||||
| clauses | ||||
|   < Wissensbasis einfügen und Klauseln gleichen Kopfprädikates gruppieren> | ||||
| goal | ||||
|   < Frage ohne „?-“ einfügen> | ||||
| ``` | ||||
| 
 | ||||
| 2. Beispiel 2 (BSP2.PRO) | ||||
| - Kollegen Meier und Müller arbeiten im Raum 1, Kollege Otto im Raum 2 und Kollege Kraus im Raum 3. | ||||
|   - arbeitet_in(meier,raum_1). | ||||
|   - arbeitet_in(mueller,raum_1). | ||||
|   - arbeitet_in(otto,raum_2). | ||||
|   - arbeitet_in(kraus,raum_3). | ||||
| - Netzanschlüsse gibt es in den Räumen 2 und 3. | ||||
|   - anschluss_in(raum_2). | ||||
|   - anschluss_in(raum_3). | ||||
| - Ein Kollege ist erreichbar, wenn er in einem Raum mit Netzanschluss arbeitet. | ||||
|   - erreichbar(K) :- arbeitet_in(K,R),anschluss_in(R). | ||||
| - 2 Kollegen können Daten austauschen, wenn sie im gleichen Raum arbeiten oder beide erreichbar sind.  | ||||
|   - koennen_daten_austauschen(K1,K2) :- arbeitet_in(K1,R),arbeitet_in(K2,R). | ||||
|   - koennen_daten_austauschen(K1,K2) :- erreichbar(K1),erreichbar(K2). | ||||
| 
 | ||||
| Deklarationsteil | ||||
| ``` | ||||
| domains | ||||
|   person, raum: symbol | ||||
| predicates | ||||
|   arbeitet_in(person,raum) | ||||
|   ansluss_in(raum) | ||||
|   erreichbar(person) | ||||
|   koennen_daten_austauschen(person,person) | ||||
| clauses | ||||
|   ... | ||||
| goal | ||||
|   ... | ||||
| ``` | ||||
| 
 | ||||
| #### Verarbeitung Logischer Programme | ||||
| ##### Veranschaulichung ohne Unifikation | ||||
|  | ||||
| 
 | ||||
| Tiefensuche mit Backtrack: | ||||
| Es werden anwendbare Klauseln für das erste Teilziel gesucht. Gibt es ... | ||||
| - ... genau eine, so wird das 1. Teilziel durch deren Körper ersetzt. | ||||
| - ... mehrere, so wird das aktuelle Ziel inklusive alternativ anwendbarer Klauseln im Backtrack-Keller abgelegt und die am weitesten oben stehende Klausel angewandt. | ||||
| - ... keine (mehr), so wird mit dem auf dem Backtrack-Keller liegendem Ziel die Bearbeitung fortgesetzt. | ||||
|    | ||||
| Dies geschieht solange, bis | ||||
| - das aktuelle Ziel leer ist oder | ||||
| - keine Klausel (mehr) anwendbar ist und der Backtrack-Keller leer ist. | ||||
| 
 | ||||
| 
 | ||||
| ##### Veranschaulichung mit Unifikation | ||||
|  | ||||
| 
 | ||||
| Zusätzliche Markierung der Kanten mit der Variablenersetzung (dem Unifikator). | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user