Termersetzungsysteme SS 2014 Übungsblatt 4 Abgabe der Lösungen: 14.05.2014 Aufgabe 1 Substitution im Kontext (3 Punkte) Geben Sie eine formale Definition des Operators t[s]p , der den Unterterm von t an der Position p ∈ Pos(t) durch s ersetzt, an. Beweisen Sie dann die Gleichung t[t |p ]p = t. Aufgabe 2 Eigenschaften vom TES-Reduktion (5 Punkte) Beweisen Sie, dass die Relation →R die folgenden Eigenschaften hat: falls s →R t, dann gilt 1. C[s] →R C[t] für jeden (Ein-Lücken-)Kontext C; 2. r[s/x] →∗R r[t/x] für jeden Term r; 3. sσ →R tσ für jede Substitution σ. Aufgabe 3 Listen mit TRS (8 Punkte) Betrachten Sie die Signatur Σ = {o : 0 → 1, s : 1 → 1, nil : 0 → 1, cons : 2 → 1}. Dabei haben die Signatursymbole die folgende intuitive Bedeutung. • o repräsentiert die natürliche Zahl 0 ; • s(x) repräsentiert den Nachfolger der natürlichen Zahn x; • nil repräsentiert die leere Liste; • cons(x, l) hängt das Element x vorn an die Liste l. Somit kann man beispielsweise die Zahl 3 als s(s(s(o))) repräsentieren und die liste [1, 2] als cons(s(o), cons(s(s(o)), nil)). Beachten Sie, dass man auch Terme hinschreiben kann, die keine sinnvolle Bedeutung haben, wie z.B. cons(s(o), o). Geben Sie TRS über passenden Erweiterungen von Σ an, die folgende Operationen über Listen und natürlichen Zahlen definieren: • binäre Multiplikation von natürlichen Zahlen; • binäre Exponentiation; • binäre Listenkonkatenation; • Konkatenation einer Liste von Listen; • Summe einer Liste von natürlichen Zahlen. GLoLoP, SS 2014 Musterbeispiel: um die binäre Summe von natürlichen Zahlen zu definieren, muss man Σ mit einer Operation p : 2 → 1 erweitern und ein TES mit zwei Regeln p(x, o) → x und p(x, s(y)) → s(p(x, y)) einführen. Aufgabe 4 Reaktive Programmierung mit TRS (4 Punkte) Mann kann nicht-terminierende TES verwenden, um unendliche Folgen (Streams) zu definieren. Dafür verwenden wir ein spezielles Funktionssymbol out : 2 → 1 und Regeln der Form t → out(s, r), wobei out ansonsten weder in t noch in s noch in r vorkommt. Die Regel nat(x) → out(x, nat(s(x))). definiert beispielsweise die Folge aller natürlichen Zahlen in dem Sinne, dass jede Reduktion, die in nat(o) beginnt, die folgende Form hat: nat(o) → o : nat(o) → o : s(o) : nat(o) → o : s(o) : s(s(o)) : nat(o) → · · · , wobei wir x : y statt out(x, y) schreiben. Geben Sie ein TES an, das auf die gleiche Weise die Folge aller Fibonacci-Zahlen 1, 1, 2, 3, 5, 8, . . . ausgibt (s. Übungsblatt 3, Aufgabe 3). Bonusaufgabe (2 Punkte) Ergänzen Sie die Definitionen von Aufgabe Aufgabe 3 mit einem TRS, das ihren Lieblingssortieralgorithmus definiert. 2