Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
s (T, state) = wahr<br />
s (F, state) = falsch<br />
s (Prädikat Symbol (termlist), state) = B(Prädikat Symbol) (slist (termlist, state))<br />
s (Konstantes Prädikat, state) = B(Konstantes Prädikat)<br />
s (Term1 = Term2, state) = if s (Term1, state) = s (Term2, state)<br />
then wahr else falsch<br />
s ((¬ Satz), state) = (nicht s (Satz, state))<br />
s ((Satz1 ∧ Satz), state) = (s (Satz1, state) und s (Satz2, state))<br />
s ((Satz1 ∨ Satz), state) = (s (Satz1, state) o<strong>der</strong> s (Satz2, state))<br />
s ((Satz1 ⇒ Satz), state) = (s (Satz1, state) impl s (Satz2, state))<br />
s ((Satz1 ⇔ Satz), state) = (s (Satz1, state) gleich s (Satz2, state))<br />
s ((∀ Variable : Bereich . Satz), state) = if Bereich = {} then wahr<br />
else let x ∈ Bereich in<br />
s (Satz, state + [Variable ↦→ x]) und<br />
s ((∀ Variable : Bereich-{x} . Satz), state)<br />
s ((∃ Variable : Bereich . Satz ), state) = if Bereich = {} then falsch<br />
else let x ∈ Bereich in<br />
s (Satz, state + [Variable ↦→ x]) o<strong>der</strong><br />
s ((∃ Variable : Bereich-{x} . Satz), state)<br />
s (Variable, state) = state(Variable)<br />
s (Konstante, state) = B(Konstante)<br />
s (Funktions Symbol (termlist), state) = B(Funktions Symbol) (slist (termlist, state))<br />
slist (termlist, state) = if einelementig(termlist)<br />
then s (termlist, state)<br />
else s (head(termlist), state) cons<br />
slist (tail(termlist), state))<br />
Abbildung 2.13: Semantik prädikatenlogischer Formeln mit endlichen Bereichen<br />
Analog zu dem ’if then else’-Konstrukt, wird hier eine weitere, die Bildung <strong>der</strong> Zielsprachensätze betreffende<br />
Konstruktion verwandt, das ’let’-Konstrukt. ‘let x = Ausdruck1 in Ausdruck2’ bedeutet, daß einmal <strong>der</strong><br />
Wert von Ausdruck1 bestimmt wird und dann alle Vorkommen von x in Ausdruck2 durch den Wert von<br />
Ausdruck1 ersetzt werden. Erst dann erfolgt die Bestimmung von Ausdruck2.<br />
Eine Liste ist eine geordnete Reihung ihrer Elemente, in <strong>der</strong> im Gegensatz zu einer Menge Elemente auch<br />
mehrfach vorkommen dürfen. Die nicht weiter definierte Funktion tail angewandt auf eine Liste von Termen<br />
liefert uns die Liste <strong>der</strong> Terme, die sich aus <strong>der</strong> Ausgangsliste ohne das erste Element ergeben. Das erste<br />
Element (<strong>der</strong> “Kopf”) wird von <strong>der</strong> Funktion head geliefert. Die Funktion einelementig testet, ob eine<br />
Liste nur ein Element hat und die (Infix-)Funktion cons hängt ein Element vor den Anfang einer Liste. Der<br />
Ausdruck state + [Variable ↦→ e] bedeutet, daß sich die Funktionstabelle für diesen Ausdruck von <strong>der</strong> des<br />
Zustandes state nur an <strong>der</strong> Stelle Variable unterscheidet. Sie hat hier den Eintrag Variable ↦→ e.<br />
Die auf den ersten Blick vielleicht aufwendige Konstruktion im Fall des ∃ und des ∀ Operators dient nur dazu,<br />
die Elemente aus <strong>der</strong> Menge Bereich 6 aufzuzählen. ’ . ’ trennt dabei die Festlegung <strong>der</strong> durch den Quantor<br />
gebundenen Variablen und die Bereichsangabe von <strong>der</strong> eigentlichen Aussage. Man mache sich klar, daß im<br />
Fall endlicher Bereiche die Bedeutung <strong>der</strong> beiden Operatoren durch eine (unter Umständen ziemlich lange)<br />
6 An dieser Stelle sei noch einmal deutlich herausgehoben, daß im Rahmen dieser Vorlesung nur Quantoren mit endlichen<br />
Bereichen benutzt werden. Die allgemeine Logik erklärt Quantoren natürlich auch für unendliche Bereiche wie den <strong>der</strong> natürlichen<br />
Zahlen. Dabei än<strong>der</strong>t sich die Syntax nicht im geringsten, aber die obige, konstruktive Definition <strong>der</strong> Semantik muß durch eine<br />
weniger konstruktive ersetzt werden, welche Zielsprachenoperatoren “für alle” und “es gibt” benutzt. Die Bedeutung solcher<br />
Zielsprachenoperatoren kann allerdings wesentlich weniger klar angegeben werden als z.B. die von und und ist deshalb in <strong>der</strong><br />
Fachwelt durchaus umstritten.