Universität Paderborn Institut für Informatik Prof. Dr. Hans Kleine Büning Paderborn, 13. November 2009 Präsenzübungen zur Vorlesung Modellierung WS 2009/2010 Blatt 5 Aufgabe 33: Unifikation nach Robinson Prüfen Sie mit Hilfe des Unifikationsverfahrens von Robinson, welche der folgenden Termpaare mit den Variablen x, y und den Konstanten a, b unifizierbar sind. Schreiben Sie dazu die Schritte des RobinsonVerfahrens einzeln auf, und geben Sie einen allgemeinsten Unifikator an, wenn er existiert. Wenn ein Termpaar nicht unifizierbar ist, markieren sie die Stelle, an der keine weitere Unifikation möglich ist, und begründen Sie, warum es nicht geht. (a) h(x, g(y)) und h(g(g(y)), x) (b) f (g(a), x) und f (x, a) (c) f (a, x) und f (x, b) Aufgabe 34: Abstrakte Algebra Die Datenstruktur Schlange verwaltet Zahlen in der Reihenfolge ihres Eintreffens. Operationen auf einer Schlange erlauben es, Zahlen hinten anzufügen (enqueue) oder vorne die am längsten wartende Zahl zu entnehmen (dequeue). Zusätzlich gibt es Operationen, um eine neue leere Schlange zu erzeugen (createQueue), die erste Zahl zurückzugeben (front) sowie eine Methode, die anzeigt, ob die Schlange leer ist (empty). Die folgende abstrakte Algebra beschreibt eine Schlange (τ, Σ, Q) mit der Signatur Σ = (S , F): S = { Queue, Nat0, BOOL } F = { createQueue : enqueue : Queue × Nat0 dequeue : Queue f ront : Queue empty : Queue → Queue, → Queue, → Queue, → Nat0, → BOOL } (F1 ) (F2 ) (F3 ) (F4 ) (F5 ) Die Sorte Queue stellt eine Schlange dar; die Sorte Nat0 beschreibt Elemente der Schlange und stellt somit Zahlen dar. Für die Sorte BOOL sind die Konstanten true und false definiert. createQueue ist eine 0-stellige Operation und deshalb eine Konstante. 1 2009 Für die Menge der Axiome Q seien x, y Terme der Sorte Nat0 und q ein Term der Sorte Queue. Q={ Q1 : dequeue(enqueue(createQueue, x)) t → createQueue, t Q2 : dequeue(enqueue(enqueue(q, y), x)) → enqueue(dequeue(enqueue(q, y)), x), t Q3 : f ront(enqueue(createQueue, x)) → x, Q4 : f ront(enqueue(q, x)) → f ront(q), t t Q5 : empty(createQueue) → true, Q6 : empty(enqueue(createQueue, x)) → f alse t } Im Folgenden seien x, y Variable der Sorte Nat0. (a) Prüfen Sie, ob die folgenden Terme entsprechend der Signatur korrekt sind. Zeichnen Sie die Terme als Baum und notieren Sie an jedem Blatt und an jedem inneren Knoten die entsprechende Sorte. Kennzeichnen Sie die Stellen, an denen die Terme nicht korrekt gebildet wurden. (a1) f ront(enqueue(createQueue, f ront(enqueue(createQueue, x)))) (a2) empty(dequeue(enqueue(createQueue, x), y)) (a3) enqueue(dequeue(createQueue), f ront(enqueue(createQueue, x)) (b) Formen Sie die folgenden Terme mit Hilfe der Axiome so um, dass Sie als Ergebnis eine einzelne Variable oder Konstante erhalten. Geben Sie in jedem Schritt das verwendete Axiom an. (b1) empty(dequeue(enqueue(createQueue, y))) (b2) empty(enqueue(createQueue, f ront(enqueue(enqueue(createQueue, y), x)))) (b3) f ront(enqueue(dequeue(enqueue(createQueue, y)), x)) (c) Erweitern Sie die Algebra um eine zusätzliche Operation greatest, die die größte Zahlen der Schlange zurückgibt. Wenn die Schlange beispielsweise die Zahlen (2,3,8,5,7) enthält, soll greatest für diese Schlange 8 ausgeben. • Nehmen Sie an, dass für die Sorte Nat0 die Operation max : Nat0 × Nat0 → Nat0 gegeben ist. • max(x, y) gibt die größte der Zahlen x und y zurück. • Sie können davon ausgehen, dass keine Zahl mehrfach in der Schlange vorhanden ist und dass die kleinste Zahl in der Schlange größer als 0 ist. • Für die Sorte Nat0 ist eine Konstante zero definiert; diese soll dem Wert „0“ entsprechen. Geben Sie die nötigen Ergänzungen der Signatur sowie der Axiome an. Aufgabe 35: Algebra Gegeben sei für eine abstrakte Algebra Keller die Signatur Σ = (S , F) mit S = { Keller, BOOL, Element } F = { createS tack : push : Keller × Element pop : Keller top : Keller empty : Keller 2 → Keller, → Keller, → Keller, → Element, → BOOL } (F1 ) (F2 ) (F3 ) (F4 ) (F5 ) 2009 Sei t ein Element der Sorte Element und k ein Element der Sorte Keller. Überprüfen Sie, ob die folgenden Terme korrekt sind. Falls nicht, markieren Sie die fehlerhaften Stellen und begründen Sie, warum der Term nicht korrekt ist. (a) top(pop(push(t, k))) (b) pop(empty(top(k))) (c) push(k, top(push(pop(push(push(k, t), t)), t))) Aufgabe 36: Algebren Ein Binärbaum ist ein spezieller Baum, dessen Knoten höchstens zwei Söhne haben können. Die abstrakte Algebra Binärbaum mit der Signatur Σ = (S , F) beschreibt einen solchen Baum: S = { BinTree, BOOL, Element } F = { create : node : BinTree × Element × BinTree le f t : BinTree right : BinTree value : BinTree empty : BinTree → BinTree, → BinTree, → BinTree, → BinTree, → Element, → BOOL } (F1 ) (F2 ) (F3 ) (F4 ) (F5 ) (F6 ) Die Sorte BinTree stellt einen Binärbaum dar, die Sorte Element beschreibt den Inhalt eines Baumknotens. Für die Sorte BOOL sind Konstanten true und false definiert. create bezeichnet eine 0 - stellige Operation und ist damit eine Konstante. Sie steht für den leeren Baum. Die Operation node erzeugt einen neuen Wurzelknoten und verbindet zwei existierende Bäume als linken und rechten Teilbaum zu einem neuen Baum. Die Operationen left bzw. right liefern den linken bzw. rechten Teilbaum eines Baums. Die Operation value liefert den Inhalt des Wurzelknotens eines Baumes. Die Operation empty zeigt an, ob der Baum leer ist oder nicht. Für die Menge der Axiome Q seien l, r Terme der Sorte BinTree und v ein Term der Sorte Element. Q={ Q1 : empty(create) t → true, t Q2 : empty(node(l, v, r)) → f alse, t Q3 : le f t(node(l, v, r)) → l, Q4 : right(node(l, v, r)) → r, Q5 : value(node(l, v, r)) →v t t } 3 2009 (a) Stellen Sie zur oben angegebenen Algebra Binärbaum 2 korrekte Terme der Schachtelungstiefe 3 auf. (b) Formen Sie die folgenden Terme mit Hilfe der Axiome so um, dass Sie als Ergebnis x, y, z, true oder f alse erhalten. Notieren Sie bei jeder Umformung das benutzte Axiom. (b1) empty(le f t(right(node(create, z, node(right(node(create, y, create)), x, create))))) (b2) value(right(node(create, x, node(create, y, create)))) (c) Erweitern Sie die angegebene Algebra um eine Funktion count, die die Anzahl der Blätter eines Baum angibt. Ergänzen Sie die nötigen Sorten, die Funktionen mit ihren Signaturen und die Axiome, in den Mengen S , F und Q. Aufgabe 37: Algebren Es sei die abstrakte Algebra BOOL = (τ, Σ, Q) mit der Signatur Σ = (S , F) gegeben: S = { BOOL } F = { true : f alse : ∧: BOOL × BOOL ∨: BOOL × BOOL ¬: BOOL } → BOOL, → BOOL, → BOOL, → BOOL, → BOOL} (F1 ) (F2 ) (F3 ) (F4 ) (F5 ) Im Folgenden seien x, y, x0 , y0 Variable der Sorte BOOL. Q={ t Q1 : ¬true → f alse, Q2 : ¬ f alse → true, Q3 : true ∧ x → x, Q4 : t t t f alse ∧ x → f alse, Q5 : x ∨ y t → ¬(¬x ∧ ¬y) } (a) Formen sie die folgenden Terme mit den oben aufgeführten Axiomen Q1 bis Q5 soweit wie möglich um und geben Sie in jedem Schritt das benutze Axiom an. (a1) ¬true ∧ x (a2) ¬ f alse ∨ x (a3) (x ∨ y) ∧ (x0 ∨ y0 ) (b) Erweitern Sie die abstrakte Algebra BOOL um Operationen für die Implikation (→) und die Äquivalenz (↔). Geben Sie für jede der beiden Operationen ein sinnvolles Axiom an, das die Auflösung der entsprechenden Operation angibt. (c) Geben Sie Axiome für folgende Umformungsregeln aus der Aussagenlogik an: (c1) Idempotenz (c2) Komplement (c3) Negation 4 2009