Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
Diskussion am Ende der Seite…
männlich(tobias). männlich(alexander). weiblich(susi). weiblich(dagmar). weiblich(mina). kind_von(mina,tobias,susi). tochter_von(X,Y):− frau(X), kind_von(X,Y,_). tochter_von(X,Y):− frau(X), kind_von(X,_,Y).
Eine grundlegende Aussage, die nicht weiter aufgespalten werden kann. Sie stellt eine Beziehung zwischen verschiedenen Entitäten her. Jedes Fakt wird mit einem Punkt abgeschlossen.
Beispiel:
buch('Herr der Ringe', 'J. R. R. Tolkien').
Einer intuitiven Semantik (einer von vielen möglichen) folgend ist die Aussage dieses Fakts die folgende: es gibt ein Buch mit dem Titel Herr der Ringe und dem Autor J. R. R. Tolkien.
Eine Regel hat die Form
L :- L1, L2, ..., Ln.
wobei die Li Literale sind und zusammen den Regelkörper darstellen. L wird Kopf der Regel genannt. Jede Regel wird mit einem Punkt abgeschlossen.
Semantik: Wenn alle Li wahr sind, dann ist auch L wahr.
Ein nicht teilbarer Term. Ein Atom ist eine Zeichenkette beginnend mit einem Kleinbuchstaben oder eine zwischen zwei Anführungsstrichen stehende Zeichenkette.
Beispiele:
auto, '/var/lib'
Atome stellen die Grundelemente der Faktenbasis dar.
Zeichenfolgen, welche die syntaktische Form von Fakten haben (ohne abschließenden Punkt). Literale sind (eventuell via ~ negierte) atomare Aussagen.
Beispiel:
auto(rot)
ist die Generalisierung von Fakten und Regeln. Die Stelligkeit von Klauseln, also die Anzahl ihrer Argumente, wird metasprachlich hinter einem Slash angegeben.
Beispiel:
mann/1, frau/1, tochter_von/2 und kind_von/3
Prädikate sind Mengen von Klauseln, die hinsichtlich Ihrer Prädikatnamen und Stelligkeit übereinstimmen. Sowohl Fakten als auch Regeln definieren Prädikate. Listing 2.7 enthält das Prädikat tochter_von/2, das aus zwei Klauseln besteht.
Eine Zahl oder ein Atom.
Term ist die grundlegende Datenstruktur in Prolog. Terme werden aus ASCII Zeichen gebildet und sind in Prolog induktiv definiert:
1. Alle Atome und Variablen sind Terme. 2. Ist a ein n-stelliges Prädikat und sind t1, ..tn Terme, so ist auch a(t1, ..tn) ein Term. |
Mit Termen können beliebig komplexe, verschachtelte Datenstrukturen beschrieben werden.
Besteht aus dem Namen eines Literals oder einer Klausel und dessen Stelligkeit. Der Funktor zu f(p1, …, pn) lautet f/n
Besteht aus einem Namen und mindestens einem Argument. Jedes Argument ist ein Term. Beispiel:
buch(titel('Herr der Ringe'), autor('J. R. R. Tolkien'))
(kein Punkt am Ende) Insbesondere kann in Prolog jede Liste als eine Struktur mit dem Punkt (.) als Funktor aufgefasst werden. So kann die Liste [a, b, c] auch folgendermaÿen dargestellt werden:
.(a, .(b, .(c, [])))
, wobei [] die leere Liste repräsentiert.
Repräsentiert eine Menge von Klauseln, deren Köpfe denselben Funktor haben (der Kopf eines Fakts besteht aus dem Fakt selbst).
Beispiel:
auto(rot). auto(blau). auto(weiss) :- auto(keine_farbe).
sind Klauseln des einstelligen Prädikats auto.
werden in der Form einer ’umgedrehten Implikation’ formuliert: Das Regelzeichen ’:-’ in einer Regel p(a):-q(b) liest sich als ”p(a) ist dann wahr, wenn q(b) wahr ist”. Der Regelkopf besteht aus einem Prädikat. Im Rumpf k¨onnen beliebig viele Strukturen logisch verkn¨upft werden, wobei das ’,’ der Konjunktion und das ’;’ der Disjunktion entspricht. Variablen beginnen Großbuchstaben. Zur Unterscheidung beginnen daher Pr¨adikate und Argumente mit Kleinbuchstaben. Die Variablen sind nicht typisiert und binden beliebige Entit¨aten. Sie erm¨oglichen die generische Beschreibung von Regeln und Anfragen.
treffen Aussagen über andere Prädikate und können neue Anfragen während der Ausführung formulieren.
Listen sind weitere Sprachkomponenten von Prolog. Sie können beliebige Elemente enthalten. Syntaktisch sind zwei verschiedene Schreibweisen möglich:
Liste mit den Elementen a,b,c. a ist der Kopf (Head), also das erste Element der Liste. [b,c] der Schwanz (Tail) der Liste und enthält die restlichen Elemente.
[a,b,c]
Der Head der Liste wird vom Tail durch das Pipe-Symbol '|’ getrennt. Head und Tail können wieder als Listen dargestellt werden. Die alternative Darstellung von Listen ermöglicht die Beschreibung der inneren Struktur einer Liste. Die folgenden Darstellungen beschreiben die selbe Liste a,b,c.
[a|[b, c]] [a|[b|[c]]] [a,b|[c]]
Die leere Liste wird mit '[]' dargestellt.
Das Schreiben/Einbringen von Prolog-Programmen in eine Faktenbasis, wobei die Programme als Textdatei vorliegen.
Bezeichnet das Gleichsetzen zweier Terme durch konsistente Ersetzung von Variablen durch andere geeignete Terme. Wenn eine Variable durch einen Term substituiert wurde, ist sie gebunden. Zwei ungebundene Variablen unifizieren immer. Zwei Atome unifizieren nur, wenn sie identisch sind. Die Unifation zweier Terme scheitert, wenn sie syntaktisch nicht gleich sind oder wenn die Argumentwerte in den gleichen Argumentpositionen beider Terme nicht unifizieren.
Beispiel: die Terme schwester(anna, petra) und schwester(anna, X) können unifiziert werden, indem X durch petra ersetzt wird.
Überarbeitete Version des Originals. Quelle: [Facb]
TODO
Backtracking ist das Zurücksetzen des Beweisganges an den letzten Verzweigungspunkt des Beweisbaumes, um eine weitere Alternative zu versuchen. Bei diesem Schritt werden allfällige Variablenbindungen bis zum Verzweigungspunkt zurück aufgelöst.
Wenn ich mich auf “Logik beziehe, meine ich meistens das Skript zur Logik I VL von Koepke. Für uns interessant sind die Definitionen in den Abschnitten 4 und 5. Ich probiere mal ein Beispiel.
?- r(A,f(x)).
?- gehört (zunächst einmal) nicht zur Sprache. Intuitiv heißt es “Ist die (folgende) Formel in meiner Theorie ableitbar?”
Es sei an dieser Stelle noch mal darauf hingewiesen - Günter erwähnte es bereits - Das Formeln und Terme, insb. syntatktisch, NICHT das selbe sind. So sind insb. die Mengen der Funktions- und der Relationssymbole disjunkt. In Prolog schmeißt man das schonmal durcheinander.
Synonym? Wenn nicht, kann jemand den Unterschied klären?
Wird in vielen Logikbüchern einfach als Funktionssymbol mit Stelligkeit 0 betrachtet. Ich denke das macht Sinn. Koepke macht das nicht. Ist aber im Prinzip auch egal.
atom
ein Konstantensymbol. Siehe z.b. build-in atom/1
.atomar
. relationale Formeln
Kann man synonym behandeln, denke ich.