Skript zu Signaturen und Strukturen

Werbung
Prädikatenlogische Signaturen und Strukturen
Emanuel Kitzelmann ∗
Professur für Angewandte Informatik / Kognitive Systems
Fakultät für Wirtschaftsinformatik und Angewandte Informatik
Otto-Friedrich-Universität Bamberg
8. Dezember 2005
1 Einleitung
In formalen Sprachen, also nicht nur, aber auch in der mathematischen Logik, differenziert man
Syntax von Semantik. Die Syntax einer Sprache beschreibt die Ausdrücke, die zur Sprache
gehören. Den Ausdrücken selbst kommt noch keine Bedeutung zu. Die Sätze beispielsweise,
die ich bis jetzt in diesem Artikel geschrieben habe, sind hoffentlich grammatikalisch korrekt.
Um diese Korrektheit feststellen zu können, ist es nicht notwendig, die Sätze ihrem Inhalt nach
zu verstehen. Man muss lediglich die grammatikalischen Regeln können und wissen, zu welcher
Form von Wörtern die einzelnen in den Sätzen vorkommenden Wörter gehören. Die Semantik
einer Sprache beschreibt die Bedeutung ihrer Ausdrücke.
Die Trennung in Syntax und Semantik ist sinnvoll, um beispielsweise verschiedene Sprachen
ihrer Struktur (Syntax) nach vergleichen zu können. Für das Entwickeln von Programmiersprachen ist die Trennung z.B. auch deshalb sinnvoll, um eine Sprache unabhängig von ihrer
konkreten Realisierung für ein konkretes Betriebssystem entwickeln zu können. So ist beispielsweise (zumindest in der Theorie) ein C-Programm unabhängig davon syntaktisch korrekt, auf
welchem Betriebssystem es kompiliert werden soll. Die Kompilierung (in der dem syntaktischen Konstrukt dann bestimmte Funktionen zugewiesen werden) ist dann natürlich betriebssystemabhängig.
Die hier betrachtete Sprache ist die Prädikatenlogik 1. Stufe.
∗ [email protected],
http://www.cogsys.wiai.uni-bamberg.de
1
2 Signaturen
Signaturen legen die Syntax fest.
Eine prädikatenlogische Signatur Σ ist ein Tripel Σ = (S, OP, R). Dabei ist S eine Menge, deren
Elemente Sorten genannt werden, OP eine Menge, deren Elemente Operationssymbole genannt
werden und R eine Menge, deren Elemente Relationssymbole genannt werden.
(Auf der Semantik-Seite (also in einer Struktur, s.u) werden den Sorten Mengen, den Operationssymbolen Funktionen auf diesen Mengen und den Relationssymbolen Relationen auf diesen
Mengen zugewiesen.)
Jedem Operationssymbol f ∈ OP ist abhängig von den Sorten in S eine Deklaration zugewiesen:
f : s1 . . . sn → s, wobei s1 , . . . , sn , s ∈ S. Für n > 0 nennen wir f n-stelliges Operationssymbol, für
n = 0 hat f die Deklaration f :→ s und wird nullstelliges Operationssymbol (Konstantensymbol)
genannt.
Jedem Relationssymbol r ∈ R ist abhängig von den Sorten in S eine Deklaration zugewiesen:
r : s1 . . . sn , wobei s1 , . . . , sn ∈ S. Wir nennen r ein n-stelliges Relationssymbol.
Σ1 = (S, OP, R) mit S = {nat}, OP = {zero, succ, plus}, R = {prim, ≤} und den Deklarationen zero :→ nat; succ : nat → nat; plus : nat, nat → nat; prim : nat; ≤: nat, nat.
Beispiel:
Terme werden über den Operationssymbolen und einer Menge von Variablen {x, y, z, . . .} gebildet (nicht über Relationssymbolen!):
1. Sei x eine Variable der Sorte s ∈ S, dann ist x ein Term der Sorte s.
2. Sei c ∈ OP mit c :→ s ein Konstantensymbol der Sorte s, dann ist c ein Term der Sorte s.
3. Sei f ∈ OP ein Operationssymbol mit der Deklaration f : s1 . . . sn → s mit s1 , . . . , sn , s ∈ S
und seien t1 , . . . ,tn Terme der Sorten s1 , . . . , sn , dann ist f (t1 , . . . ,tn ) ein Term der Sorte s.
4. Nichts sonst ist ein Term.
Beispiel:
Einige Terme:
• x
• zero
• succ(zero)
• succ(plus(succ(x), plus(zero, succ(succ(y)))))
Prädikate werden durch die Anwendung eines Relationssymbols auf eine entsprechende Anzahl von Termen gebildet: Sei r ∈ R ein Relationssymbol mit der Deklaration r : s1 . . . sn mit
s1 , . . . , sn ∈ S und seien t1 , . . . ,tn Terme der Sorten s1 , . . . , sn , dann ist r(t1 , . . . ,tn ) ein Prädikat.
2
Beispiel:
Einige Prädikate:
• prim(x)
• prim(zero)
• prim(succ(zero))
• ≤ (succ(plus(succ(x), plus(zero, succ(succ(y))))), plus(zero, zero))
Prädikate sind (atomare) Formeln. Terme sind keine Formeln. Komplexere Formeln als Prädikate bekommt man, indem man beliebige Formeln mit den Symbolen ¬, →, ∧, ∨, ∃, ∀ verbindet
(siehe Skript). Prädikate und Prädikate, die durch ein Voranstellen von ¬ negiert sind, nennt man
Literale.
3 Strukturen
Strukturen legen die Semantik der Terme und Formeln fest, die vermittels einer Signatur gebildet
werden können.
Sei Σ = (S, OP, R) eine Signatur. Eine Struktur zu Σ (Σ-Struktur) ist ein Tripel:
A = ((As )s∈S , ( fA ) f ∈OP , (rA )r∈R )
Für jede Sorte s ∈ S ist As eine nichtleere Menge, die Trägermenge der Sorte s genannt wird.
Für jedes Konstantensymbol c :→ s, c ∈ OP ist cA ein Element aus As . Für jedes n-stellige
Operationssymbol f : s1 . . . sn → s, f ∈ OP ist fA eine Funktion vom Typ As1 × . . . × Asn → As .
Und für jedes Relationssymbol r : s1 . . . sn , r ∈ R ist rA eine Relation vom Typ As1 × . . . × Asn
(also rA ⊆ As1 × . . . × Asn ).
Σ1 -Struktur A = ({Anat }, {zeroA , succA , plusA }, {primA , ≤A }) mit Anat = N,
zeroA = 0, succA : N → N die Nachfolgefunktion auf N, plusA : N × N → N die Addition über
natürlichen Zahlen, primA ⊆ N die Menge der Primzahlen und ≤A ⊆ N × N die Menge aller
Paare von natürlichen Zahlen, für die gilt, dass die erste Zahl kleiner als die zweite ist.
Beispiel:
Wenn durch eine Struktur allen Symbolen eine Bedeutung gegeben wurde, können die Terme
und Formeln, die über der entsprechenden Signatur gebildet wurden, ausgewertet werden. Indem
also den einzelnen Symbolen einer Signatur durch eine Struktur eine Bedeutung zugeordnet
wurde, wird damit auch den Termen und Formeln über der Signatur eine Bedeutung zugeordnet.
(Jeweils abhängig von einer konkreten Belegung der freien Variablen in dem Term oder der
Formel). Dabei gilt, dass ein Term der Sorte s immer zu einem Element der Trägermenge As
auswertet und eine Formel immer zu true oder false auswertet.
Ein Prädikat r(t1 , . . . ,tn ) wertet dann zu true aus, wenn die Terme zu v1 , . . . , vn auswerten und es
gilt (v1 , . . . , vn ) ∈ rA .
3
Beispiel:
Es gelte die Beispiel-Signatur Σ1 und die entsprechende Beispielstruktur:
• prim(x) wertet z.B. mit der Belegung x ← 3 zu true aus, weil 3 ∈ primA , denn primA sollte
ja die Menge der Primzahlen sein. Mit der Belegung x ← 4 wertet die Formel jedoch zu
false aus, weil 4 keine Primzahl ist.
• ≤ (succ(plus(succ(x), plus(zero, succ(succ(y))))), plus(zero, zero)) wertet z.B. mit der Belegung x ← 1, y ← 2 zu false aus, denn der Term succ(plus(succ(x), plus(zero, succ(succ(y)))))
wertet dann zu 7 un der Term plus(zero, zero) zu 0 aus und (7, 0) 6∈≤A , denn 7 ist nicht
kleiner als 0.
4
Herunterladen