Grundlagen der Logik in der Informatik WS 2015 Übungsblatt 9 Abgabe der Lösungen: 18.01.–22.01. Aufgabe 1 Variablensubstitution (Präsenzaufgabe) Man erinnere sich aus der Vorlesung, dass eine Substitution eine Funktion ist, die Variablen auf Terme abbildet und dabei alle bis auf endlich viele Variablen auf sich selbst abbildet. Mit [E1 /x1 , . . . , En /xn ] bezeichnen wir die Substitution, die jeweils xi auf Ei abbildet und alle anderen Variablen auf sich selbst. Für Formeln φ und Ausdrücke E wird das Ergebnis φσ bzw. Eσ der Anwendung von σ auf φ bzw. E wie folgt rekursiv berechnet: • xσ = σ(x); • f (E1 , . . . , En )σ = f (E1 σ, . . . , En σ), wobei f ein Funktions- oder Prädikatensymbol ist; • (E = D)σ = (Eσ = Dσ); • (¬φ)σ = ¬(φσ); • (φ ∧ ψ)σ = (φσ ∧ ψσ); • (∀x. φ)σ = ∀y. φσ 0 , wobei σ 0 (x) = y, σ 0 (z) = σ(z) für jedes z 6= x, und wobei ferner y so gewählt ist, dass y ∈ / F V (σ(z)) für alle z ∈ F V (∀x. φ). (Damit ist Substitution natürlich nur bis auf Umbenennung gebundener Variablen eindeutig definiert.) Geben Sie (unter Angabe der zugehörigen Rechnung) entsprechende Gleichungen für (φ ∨ ψ)σ und (∃x. φ)σ an, die sich aus der Kodierung von φ∨ψ als ¬(¬φ∧¬ψ) und von ∃x. φ als ¬(∀x. ¬φ) ergeben. Aufgabe 2 Unifikation (Präsenzaufgabe) Berechnen Sie mittels des Unifikationsalgorithmus einen allgemeinsten Unifikator für die folgenden formalen Gleichungen, bzw. zeigen Sie ggf., dass die Gleichungen nicht unifizierbar sind. . 1. plus(plus(x, o), y) = plus(plus(y, o), plus(o, plus(o, plus(z, o)))); . 2. branch(x, branch(end, end)) = branch(branch(z, y), branch(x, end)). Annotieren Sie dabei alle Umformungsschritte explizit mit der jeweils verwendeten Regel des Unifikationsalgorithmus. Aufgabe 3 Prädikatenlogik in Coq (6 Punkte) Formalisieren Sie Ihre Beweise von Aufgabe 4, Übungsblatt 8 nun in Coq. Verwenden Sie dabei (falls nötig) die Tabelle von Aufgabe 2, Übungsblatt 8. GLoIn, WS 2015 Aufgabe 4 Präordnungen in Coq (6 Punkte) Formalisieren Sie ferner Ihre Beweise von Aufgabe 5, Übungsblatt 8 in Coq. Ergänzen Sie dazu die folgende Vorlage. 1 Require Import Classical . 2 3 Parameter D : Set . 4 5 6 Parameter m : D -> D -> D . Parameter e : D . 7 8 9 10 Axiom right_neutral : forall x :D , ( m x e ) = x . Axiom left_neutral : forall x :D , ( m e x ) = x . Axiom assoc : forall x y z :D , m ( m x y ) z = m x ( m y z ). 11 12 Variables x y z : D . 13 14 Definition leq x y : Prop := exists z : D , y = m x z . 15 16 Theorem ord_refl : leq x x . 17 (* Ihren Beweis hier einf ü gen *) 18 19 20 Qed . 21 22 Theorem ord_trans : leq x y /\ leq y z -> leq x z . 23 (* Ihren Beweis hier einf ü gen *) 24 25 26 Qed . Dabei ist auf Folgendes zu achten. 1. Axiome (Zeilen 8–10) kann man jederzeit mit der pose proof Taktik aufrufen, z.B. fügt pose proof left_neutral. das Axiom left_neutral zu den Prämissen hinzu. 2. Definitionen (Zeile 14) dienen zur Vereinfachung und Verkürzung der Beweise. Definitionen werden mittels der Taktik unfold aufgefaltet, z.B. ersetzt unfold leq. das Prädikat leq durch seine Definition. 3. Das Fitch-Regel (=I) entspricht der Coq-Taktik reflexivity. 4. Das Fitch-Regel (=E) entspricht den Coq-Taktiken rewrite -> und rewrite <-, z.B. ersetzt rewrite -> H. im aktuellen Beweisziel ein Vorkommen der linken Seite der Gleichung H durch die rechte (natürlich nur dann, wenn die Annahme H tatsächlich eine Gleichung ist); entsprechend ersetzt rewrite <- H. in der umgekehrten Richtung. Beide Taktiken führen vorab ggf. noch eine Substitution durch, so dass z.B. eine Gleichung x + y = y + x auch verwendet werden kann, um 3 + x in x + 3 zu überführen. 2 GLoIn, WS 2015 Aufgabe 5 Variablensubstitution (2 Punkte) Berechnen Sie das Ergebnis der folgenden Substitutionsanwendung: ((∃y. P(x, y)) ∧ ∀z. (R(y, z) ∨ ∃y. R(y, z)))[f (x, y)/x, c/y, f (f (x, y), z)/z]. Verwenden Sie dabei die Ergebnisse von Aufgabe 1. Aufgabe 6 Unifikation (6 Punkte) Berechnen Sie mittels des Unifikationsalgorithmus einen allgemeinsten Unifikator für die folgenden formalen Gleichungen, bzw. zeigen Sie ggf., dass die Gleichungen nicht unifizierbar sind. Dabei sind x, y und z Variablennamen, alle anderen Bezeichner sind Funktionssymbole (inklusive Konstanten). . 1. plus(plus(x, z), x) = plus(y, plus(y, z)); . 2. link2(link3(a, y, link2(a, a)), x) = link2(x, link3(a, link2(a, z), y)); . 3. branch(y, branch(branch(x, y), y)) = branch(branch(z, y), branch(end, z)). Annotieren Sie dabei alle Umformungsschritte explizit mit der jeweils verwendeten Regel des Unifikationsalgorithmus. Was passiert, wenn man den Occurs Check aus dem Unifikationsalgorithmus weglässt, d.h. (elim) . auf x = E anwendet, ohne zu prüfen, ob x ∈ FV (E)? 3