¨Ubungsblatt 9

Werbung
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
Herunterladen