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.

3.1. DIE ABSTRAKTE SYNTAX 41<br />

Definition 3.3 Kanonische Hilfssymbole zu einer Signatur<br />

Sei C eine Signatur. Die dazugehörige Signatur kanonischer Hilfssymbole H ist definiert durch:<br />

H := {cond (3)<br />

G | G ∈ C} (Verzweigungssymbole)<br />

˙∪ {sel (1)<br />

G,i | G(n) ∈ C, i ∈ [n]} (Selektionssymbole)<br />

Dabei soll C ∩ H = ∅ sein. ✷<br />

Die Hilfssymbole fügen wir jetzt als dritte Teilsignatur zu unserer Programmsignatur hinzu.<br />

Definition 3.4 Programmsignatur mit Hilfssymbolen<br />

Sei Σ = (C, F) eine Programmsignatur. Sei H die Signatur der kanonischen Hilfssymbole zur Signatur<br />

der Konstruktorsymbole C mit H ∩Σ = ∅. Dann heißt Σ ′ := (C, H, F) Programmsignatur<br />

mit Hilfssymbolen. Auch hier verwenden wir oft schlicht Σ ′ = C ˙∪ H ˙∪ F. ✷<br />

Aus folgendem Grund haben wir kombinierte Test- und Verzweigungssymbole condG anstelle eines<br />

einzigen Verzweigungssymbols (if-then-else-fi) und von Testsymbolen für jedes Konstruktorsymbol<br />

(test (1)<br />

G ) definiert: Bei einer Trennung müßten wir die Existenz zweier verschiedener<br />

Konstruktorterme true, false ∈ TC voraussetzen, die durch ihre Verwendung als logische Werte<br />

ausgezeichnet wären. Bei der Verwendung von Sorten würde dies praktisch die Existenz einer Sorte<br />

Boolean voraussetzen. Außerdem ist der Einsatz des Tests im ersten Argument der Verzweigung<br />

üblicherweise dessen einzige Anwendung, so daß wir die beiden auch gleich verschmelzen können.<br />

Definition 3.5 Programm mit Hilfsfunktionen<br />

Sei Σ eine Programmsignatur mit Hilfssymbolen und X eine Variablenmenge. Ein geordnetes Paar<br />

von Termen<br />

f(x1, . . .,xn) → r<br />

mit f (n) ∈ F, x1, . . .,xn ∈ X paarweise verschieden und r ∈ TΣ({x1, . . .,xn}) heißt Programmregel<br />

mit Hilfsfunktionen. Eine endliche Menge P von Programmregeln mit Hilfsfunktionen, die<br />

die Eindeutigkeitsbedingung<br />

f(x1, . . .,xn)→r1, f(y1, . . .,yn)→r2 ∈ P =⇒ f(x1, . . .,xn)→r1 = f(y1, . . .,yn)→r2<br />

erfüllt, heißt Programm mit Hilfsfunktionen. ✷<br />

Die Einhaltung der Konsistenzbedingung<br />

Wenn eine rechte Regelseite r einen Teilterm t ′ = selG,i(t) besitzt, dann hat sie auch<br />

einen Teilterm t ′′ = condG(t, t1, t2), und t ′ ist ein Teilterm von t1, d. h. vor jeder Anwendung<br />

der Selektionsoperation wird sichergestellt, daß t = G(. . .).<br />

Formaler: Zu u ∈ Occ(r) mit r/u = t ′ existieren v, w mit u = v.2.w und r/v = t ′′ .<br />

ist sicherlich vernünftig, wird jedoch nicht verlangt. Auch für den Fall eines Verstoßes gegen diese<br />

Konsistenzbedingung sind die später betrachteten Semantiken definiert.<br />

Die Eindeutigkeitsbedingung besagt, daß zu jedem Funktionssymbol höchstens eine Programmregel<br />

existieren darf. Diese Forderung erfolgt mit der gleichen Intention wie bei der Eindeutigkeitsbedingung<br />

der Programme mit Pattern. Es handelt sich schlicht um eine angepaßte Form dieser Eindeutigkeitsbedingung,<br />

abgesehen davon, daß hier auch direkt der triviale Fall, daß zwei Programmregeln

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!