Blatt 10 - Institut für Informatik - Universität Paderborn
Blatt 10 - Institut für Informatik - Universität Paderborn
Blatt 10 - Institut für Informatik - Universität Paderborn
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Universität</strong> <strong>Paderborn</strong><br />
<strong>Institut</strong> <strong>für</strong> <strong>Informatik</strong><br />
H. Kleine Büning<br />
Abgabe: 07. Januar 2013, 11:15h<br />
Modellierung – WS 2012/2013<br />
Hausaufgaben<br />
<strong>Blatt</strong> <strong>10</strong><br />
Organisatorisches: Die Lösungen der Hausaufgaben sind in die Kästen im D3-Flur einzuwerfen.<br />
Bilden Sie bitte innerhalb ihrer Übungsgruppe Gruppen von 2-3 Personen zur Lösung der Aufgaben.<br />
Die Lösung muss die Namen und Matrikelnummern derjenigen enthalten, die die Aufgaben<br />
gelöst haben sowie die Übungsgruppennummer.<br />
Aufgabe 1: Substitution (4 Punkte)<br />
Fassen Sie folgende Substitutionen zusammen.<br />
(a) [x/y][v/w]<br />
(b) [x/y][y/z]<br />
(c) [y/z][x/y]<br />
(d) [y/z + x][x/y][y/3]<br />
Aufgabe 2: Term-Notationen & Kantorowitsch-Bäume (9 Punkte)<br />
Im Folgenden sind Terme in der Notation Infix gegeben. Erstellen Sie <strong>für</strong> jeden der Terme den<br />
zugehörigen Kantorowitsch-Baum und geben Sie den Term in den beiden fehlenden Notationen<br />
Präfix und Postfix an. Hinweis: Bei gleichstark bindenden Operatoren, hier + und -, gehen wir von<br />
einer Linksklammerung aus.<br />
(a) x + (6 ∗ (y − 5)) − (h − 4)<br />
(b) ((a ∗ b) − (c − d)) + ((5 + x) ∗ (y − c))<br />
(c) (((a + b)/5) − (c + 1)) ∗ 3<br />
Aufgabe 3: Signatur ergänzen (6 Punkte)<br />
Auf Zeichenketten sind diverse Operationen definiert. Einige davon sind:<br />
(a) emptyString: eine 0-stellige Operation, die eine leere Zeichenkette erzeugt.<br />
(b) addChar: liefert die Konkatenation aus einer Zeichenkette und einem Zeichen.<br />
(c) length: gibt die Länge der Zeichenkette an.<br />
(d) toLowerCase: wandelt alle Großbuchstaben einer Zeichenkette in Kleinbuchstaben um.<br />
(e) isSubstring: überprüft, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist.<br />
1 2012
(f) concat: verkettet zwei Zeichenketten.<br />
Sei die Signatur Σ = (S, F) mit<br />
S = { ZEICHENKETTE, ZEICHEN, NAT, BOOL }<br />
gegeben. Geben Sie die Menge F bezüglich den oben aufgelisteten Operationen an.<br />
Aufgabe 4: Algebren (<strong>10</strong> Punkte)<br />
Ein Binärbaum ist ein spezieller Baum, dessen Knoten einen Ausgangsgrad von höchstens 2<br />
haben.<br />
Die abstrakte Algebra Binärbaum mit der Signatur Σ = (S, F) beschreibt einen solchen Baum:<br />
S = { BinTree, BOOL, Element }<br />
F = { create : → BinTree, (F 1 )<br />
node : BinTree × Element × BinTree → BinTree, (F 2 )<br />
le f t : BinTree → BinTree, (F 3 )<br />
right : BinTree → BinTree, (F 4 )<br />
value : BinTree → Element, (F 5 )<br />
empty : BinTree → BOOL } (F 6 )<br />
Die Sorte BinTree stellt einen Binärbaum dar, die Sorte Element beschreibt den Inhalt eines<br />
Baumknotens. Für die Sorte BOOL sind Konstanten true und false definiert. create bezeichnet<br />
eine 0 - stellige Operation und ist damit eine Konstante. Sie steht <strong>für</strong> den leeren Baum. Die Operation<br />
node erzeugt einen neuen Wurzelknoten und verbindet zwei existierende Bäume als linken<br />
und rechten Teilbaum zu einem neuen Baum. Die Operationen left bzw. right liefern den linken<br />
bzw. rechten Teilbaum eines Baums. Die Operation value liefert den Inhalt des Wurzelknotens<br />
eines Baumes. Die Operation empty zeigt an, ob der Baum leer ist oder nicht.<br />
Für die Menge der Axiome Q seien l, r Terme der Sorte BinTree und v ein Term der Sorte Element.<br />
Q = {<br />
}<br />
Q 1 : empty(create) → true,<br />
Q 2 : empty(node(l, v, r)) → f alse,<br />
Q 3 : le f t(node(l, v, r)) → l,<br />
Q 4 : right(node(l, v, r)) → r,<br />
Q 5 : value(node(l, v, r)) → v<br />
2 2012
(a) Geben Sie zur oben angegebenen Signatur je einen korrekten Term an, der die Schachtelungstiefe<br />
0, 1, 2, 3 hat.<br />
Hinweis<br />
• Terme der Schachtelungstiefe 0: Variablen und Konstanten.<br />
• Ein Term der Schachtelungstiefe i: Anwendung einer Operation auf Unterterme, von denen<br />
mindestens einer die Schachtelungstiefe i − 1 hat und keiner eine größere Schachtelungstiefe.<br />
(b) Formen Sie die folgenden Terme mit Hilfe der Axiome so um, dass Sie als Ergebnis x, y, z, true<br />
oder f alse erhalten. Notieren Sie bei jeder Umformung das benutzte Axiom.<br />
(b1) empty(le f t(right(node(create, z, node(right(node(create, y, create)), x, create)))))<br />
(b2) value(right(node(create, x, node(create, y, create))))<br />
(c) Erstellen Sie zu dem in (b1) angegeben Term einen Kantorowitsch-Baum. Notieren Sie in<br />
jedem Knoten zusätzlich die entsprechende Sorte.<br />
(d) Erweitern Sie die angegebene Algebra um eine Operation count, die die Anzahl der Blätter<br />
eines Baum angibt. Ergänzen Sie die nötigen Sorten, die Operationen mit ihren Signaturen<br />
und die Axiome, in den Mengen S , F und Q. (Hinweis: Verwenden Sie eine Sorte Nat0 <strong>für</strong><br />
die die Konstanten zero und one definiert seien.)<br />
• Nehmen Sie an, dass <strong>für</strong> die Sorte Nat0 die Operation add : Nat0 × Nat0 → Nat0<br />
gegeben ist.<br />
• add(x, y) gibt die Summe der Zahlen x und y zurück.<br />
• Für die Sorte Nat0 seien die Konstanten zero und one definiert.<br />
3 2012