Prof. Dr. Hans-Jörg Kreowski Studiengang Informatik OAS 3001, Tel.: 2956, 3697 (Sekr.), Fax: 4322 E-Mail: [email protected] 5. Mai 2008 Aufgaben 2 Algebraische Spezifikation 2. Übungsblatt Geübt werden Gleichungen, ihre Gültigkeit, die Äquivalenz von Termen und der Zusammenhang zwischen Spezifikationen und zugehörigen Algebren (vgl. die Definitionen vom Ergänzungsblatt und 4.1, 4.5, 4.7.1 im Skript). 1. Betrachte die folgende Spezifikation der natürlichen Zahlen. spec Nat1 = sorts Nat opns 0 : → Nat succ : Nat → Nat + : Nat × Nat → Nat eqns +(0, n) = n +(succ(m), n) = succ(+(m, n)) (a) Zeige, dass die Gleichung succ(n) = +(succ(0), n) in jeder Nat1-Algebra gilt. (b) Die Gleichung succ(n) = +(n, succ(0)) gilt nicht in jeder Nat1-Algebra. Konstruiere eine Nat1-Algebra (mit möglichst kleiner Datenmenge für Nat), in der diese Gleichung nicht gilt. 2. Betrachte die folgenden Gleichungen zur Signatur Set vom 1. Übungsblatt: insert(x, insert(x, S)) = insert(x, S) insert(x, insert(y, S)) = insert(y, insert(x, S)) union(∅, S ) = S union(insert(x, S), S ) = insert(x, union(S, S )) (i) (ii) (iii) (iv) (a) Zeige, dass diese Gleichungen in der Set-Algebra 2A = (A, 2A , a1 , . . . , an , ∅, ins, ∪) gelten. (b) Welche der Gleichungen gelten in der Set-Algebra A∗ = (A, A∗ , a1 , . . . , an , λ, insert, concat)? Gib für jede Gleichung, die nicht gilt, eine Wertzuweisung als Gegenbeispiel an. 3. In einer Menge kommt ein Element ein- oder keinmal vor. In einer Multimenge (engl. multiset oder bag) darf ein Element mehrfach vorkommen. Formal ist eine Multimenge M über einer Menge A definiert als eine Abbildung M : A → N, die jedem Element a ∈ A seine Häufigkeit M(a) zuordnet. Die leere Multimenge ist mit (a) = 0 für alle a ∈ A, und die Menge aller Multimengen über A wird mit NA bezeichnet. Die Summe zweier Multimengen M1 , M2 ∈ NA ist M1 ⊕ M2 mit M1 ⊕ M2 (a) = M1 (a) + M2 (a) für alle a ∈ A. Daraus folgt, dass ⊕ assoziativ und kommutativ ist, d.h. für alle Multimengen M1 , M2 , M3 ∈ NA gilt M1 ⊕(M2 ⊕M3 ) = (M1 ⊕M2 )⊕M3 und M1 ⊕ M2 = M2 ⊕ M1 . Die Operation add : A × NA → NA fügt ein Element a zu einer Multimenge M dazu, was definiert ist als add(a, M) = a ⊕ M. Dabei ist a die Multimenge, die genau einmal a enthält und sonst nichts (d.h. a(a ) ist 1, falls a = a ist, und 0 sonst). Die folgende Spezifikation soll den Datentyp der Multimengen über einer endlichen Menge beschreiben. spec MSet = sorts A, MSet opns a1 , . . . , an : → A ∅ : → MSet add : A × MSet → MSet sum : MSet × MSet → MSet eqns add(x, add(y, m)) = add(y, add(x, m)) sum(m, ∅) = m sum(m, add(x, m )) = add(x, sum(m, m )) Zeige die folgenden Äquivalenzen für MSet, wobei die Terme t1 , t2 , t3 ∈ TMSet,MSet nur aus den Konstanten ∅ und ai , i = 1, . . . , n, sowie dem Operationssymbol add aufgebaut sind und a ∈ TMSet,A ist. (a) sum(t1 , ∅) ≡ t1 (b) sum(∅, t2 ) ≡ t2 (c) sum(sum(∅, t1 ), t2 ) ≡ sum(t1 , t2 ) (d) add(a, sum(t1 , t2 )) ≡ sum(add(a, t1 ), t2 ) (e) sum(sum(t1 , t2 ), t3 ) ≡ sum(t1 , sum(t2 , t3 )) (f) sum(t1 , t2 ) ≡ sum(t2 , t1 ) Abgabe bis zum 20. Mai 2008.