Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
6.1. DAS INITIALE MODELL 135<br />
Beispiel 6.1 Unerwünschte Datenelemente im Normalformmodell<br />
head(x:xs) → x<br />
tail(x:xs) → xs<br />
ist ein terminierendes Programm mit Pattern mit C = {[] (0) , : (2) } und F = {head (1) ,tail (1) }.<br />
TΣ ↓ = {[], [[]], [[], []], . . .,head([]),tail([]), . . .}<br />
ist der Träger des Normalformmodells Mnf P . ✷<br />
Dies widerspricht jedoch dem geforderten Prinzip der Konstruktorbasiertheit der Programmiersprache,<br />
wonach die Datenelemente durch die Konstruktoren aufgebaut werden, und die Funktions- und<br />
Hilfsoperationen nur auf diesen Datenelementen operieren.<br />
Daher ist das Normalformmodell auch nicht kompositionell (siehe S. 62); die Erweiterung eines<br />
Programms um zusätzliche Funktionssymbole mit zugehörigen Programmregeln führt im allgemeinen<br />
zu einer Erweiterung des Trägers und damit auch zu einer Änderung der ” alten“ Operationen.<br />
Das Konzept des Basisdatentyps garantiert dagegen die Kompositionalität der Semantik. Die<br />
Funktionsoperationen (und Hilfsoperationen) operieren auf dem fest gegebenen Träger des Basisdatentyps.<br />
In unseren konstruktorbasierten Programmiersprachen sollen die Datenelemente dieses<br />
Trägers durch die Konstruktoren aufgebaut werden. In dem Normalformmodell ist jedoch überhaupt<br />
kein Basisdatentyp auffindbar. Dieses Problem ist auch im Bereich der algebraischen Spezifikationen<br />
bekannt. Als Reaktion wurde in [Gut77] der Begriff der ausreichenden Vollständigkeit (sufficient<br />
completeness) von Spezifikationen eingeführt (siehe auch [Gut&Hor78] und 3.2 in [Der&Jou90]).<br />
Übertragen auf unsere Programme ist diese wie folgt definiert:<br />
Definition 6.3 Ausreichende Vollständigkeit<br />
Ein Programm P heißt genau dann ausreichend vollständig, wenn für jeden Term t ∈ TΣ ein<br />
∗<br />
Konstruktorterm c ∈ TC mit t −−→ c existiert2 . ✷<br />
P<br />
Ausreichende Vollständigkeit impliziert selbstverständlich TΣ ↓ = TC, und garantiert damit die<br />
Kompositionalität des Normalformmodells.<br />
Offensichtlich ist für die ausreichende Vollständigkeit eines Programms die Vollständigkeit der Redexschemata<br />
in folgendem Sinne notwendig:<br />
Definition 6.4 Vollständigkeit der Redexschemata<br />
Die Menge der Redexschemata, RedSP, heißt genau dann vollständig, wenn für alle f (n) ∈ F( ˙∪ H)<br />
und c ∈ (TC) n f(c) ein Redex ist. ✷<br />
Lemma 6.1 Vollständigkeit der Redexschemata ausreichend vollständiger<br />
Programme<br />
Wenn P ein ausreichend vollständiges Programm ist, dann ist die Menge der Redexschemata,<br />
RedSP, vollständig.<br />
t<br />
2 Die für die ausreichende Vollständigkeit beliebiger Termersetzungssysteme in [Der&Jou90] geforderte Eigenschaft<br />
∗<br />
←→ P c ist hier aufgrund der Konfluenz von −−→<br />
P<br />
äquivalent zu t<br />
∗<br />
−−→ c.<br />
P