# HG changeset patch # User Cezary Kaliszyk # Date 1295352745 -32400 # Node ID 3c493c9513880e61a96c58f9ee104588a58b0ce0 # Parent 1d1772a89026d33f28effe3b6c19f319704aa3f2 alpha_abs_let_stronger is not true in the same form diff -r 1d1772a89026 -r 3c493c951388 Nominal/Ex/Let.thy --- a/Nominal/Ex/Let.thy Tue Jan 18 11:02:57 2011 +0100 +++ b/Nominal/Ex/Let.thy Tue Jan 18 21:12:25 2011 +0900 @@ -30,40 +30,54 @@ thm trm_assn.exhaust thm trm_assn.strong_exhaust -(* + lemma lets_bla: - "x \ z \ y \ z \ x \ y \(Lt (Lcons x (Vr y) Lnil) (Vr x)) \ (Lt (Lcons x (Vr z) Lnil) (Vr x))" - by (simp add: trm_lts.eq_iff) + "x \ z \ y \ z \ x \ y \(Let (ACons x (Var y) ANil) (Var x)) \ (Let (ACons x (Var z) ANil) (Var x))" + by (simp add: trm_assn.eq_iff) + lemma lets_ok: - "(Lt (Lcons x (Vr y) Lnil) (Vr x)) = (Lt (Lcons y (Vr y) Lnil) (Vr y))" - apply (simp add: trm_lts.eq_iff) + "(Let (ACons x (Var y) ANil) (Var x)) = (Let (ACons y (Var y) ANil) (Var y))" + apply (simp add: trm_assn.eq_iff Abs_eq_iff ) apply (rule_tac x="(x \ y)" in exI) - apply (simp_all add: alphas eqvts supp_at_base fresh_star_def) + apply (simp_all add: alphas atom_eqvt supp_at_base fresh_star_def trm_assn.bn_defs trm_assn.supp) done lemma lets_ok3: "x \ y \ - (Lt (Lcons x (Ap (Vr y) (Vr x)) (Lcons y (Vr y) Lnil)) (Ap (Vr x) (Vr y))) \ - (Lt (Lcons y (Ap (Vr x) (Vr y)) (Lcons x (Vr x) Lnil)) (Ap (Vr x) (Vr y)))" - apply (simp add: alphas trm_lts.eq_iff) + (Let (ACons x (App (Var y) (Var x)) (ACons y (Var y) ANil)) (App (Var x) (Var y))) \ + (Let (ACons y (App (Var x) (Var y)) (ACons x (Var x) ANil)) (App (Var x) (Var y)))" + apply (simp add: trm_assn.eq_iff) done lemma lets_not_ok1: "x \ y \ - (Lt (Lcons x (Vr x) (Lcons y (Vr y) Lnil)) (Ap (Vr x) (Vr y))) \ - (Lt (Lcons y (Vr x) (Lcons x (Vr y) Lnil)) (Ap (Vr x) (Vr y)))" - apply (simp add: alphas trm_lts.eq_iff fresh_star_def eqvts) + (Let (ACons x (Var x) (ACons y (Var y) ANil)) (App (Var x) (Var y))) \ + (Let (ACons y (Var x) (ACons x (Var y) ANil)) (App (Var x) (Var y)))" + apply (simp add: alphas trm_assn.eq_iff trm_assn.supp fresh_star_def atom_eqvt Abs_eq_iff trm_assn.bn_defs) done lemma lets_nok: "x \ y \ x \ z \ z \ y \ - (Lt (Lcons x (Ap (Vr z) (Vr z)) (Lcons y (Vr z) Lnil)) (Ap (Vr x) (Vr y))) \ - (Lt (Lcons y (Vr z) (Lcons x (Ap (Vr z) (Vr z)) Lnil)) (Ap (Vr x) (Vr y)))" - apply (simp add: alphas trm_lts.eq_iff fresh_star_def) + (Let (ACons x (App (Var z) (Var z)) (ACons y (Var z) ANil)) (App (Var x) (Var y))) \ + (Let (ACons y (Var z) (ACons x (App (Var z) (Var z)) ANil)) (App (Var x) (Var y)))" + apply (simp add: alphas trm_assn.eq_iff fresh_star_def trm_assn.bn_defs Abs_eq_iff trm_assn.supp trm_assn.distinct) done -*) + +lemma + fixes a b c :: name + assumes x: "a \ c" and y: "b \ c" + shows "\p.([atom a], Var c) \lst (op =) supp p ([atom b], Var c)" + apply (rule_tac x="(a \ b)" in exI) + apply (simp add: alphas trm_assn.supp supp_at_base x y fresh_star_def atom_eqvt) + by (metis Rep_name_inverse atom_name_def flip_fresh_fresh fresh_atom fresh_perm x y) + +lemma + assumes "atom a \ atom c \ atom b \ atom c" + shows "\p. ([atom a], Var c) \lst (op =) supp p ([atom b], Var c) \ supp p \ (supp (Var c) \ {atom a}) \ (supp (Var c) \ {atom b})" + apply (simp add: alphas trm_assn.supp supp_at_base assms trm_assn.eq_iff atom_eqvt fresh_star_def) + oops end