08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!