diff -r d0f774d06e6e -r 0f0335d91456 Nominal/Ex/LamTest.thy --- a/Nominal/Ex/LamTest.thy Sun Jan 09 01:17:44 2011 +0000 +++ b/Nominal/Ex/LamTest.thy Sun Jan 09 04:28:24 2011 +0000 @@ -1600,21 +1600,73 @@ ML {* trace := true *} +lemma test: + assumes a: "[[x]]lst. t = [[x]]lst. t'" + shows "t = t'" +using a +apply(simp add: Abs_eq_iff) +apply(erule exE) +apply(simp only: alphas) +apply(erule conjE)+ +apply(rule sym) +apply(clarify) +apply(rule supp_perm_eq) +apply(subgoal_tac "set [x] \* p") +apply(auto simp add: fresh_star_def)[1] +apply(simp) +apply(simp add: fresh_star_def) +apply(simp add: fresh_perm) +done + +lemma test2: + assumes "a \ x" "c \ x" "b \ y" "c \ y" + and "(a \ c) \ x = (b \ c) \ y" + shows "x = y" +using assms by (simp add: swap_fresh_fresh) + +lemma test3: + assumes "x = y" + and "a \ x" "c \ x" "b \ y" "c \ y" + shows "(a \ c) \ x = (b \ c) \ y" +using assms by (simp add: swap_fresh_fresh) + nominal_primrec depth :: "lam \ nat" where "depth (Var x) = 1" | "depth (App t1 t2) = (max (depth t1) (depth t2)) + 1" | "depth (Lam x t) = (depth t) + 1" -thm depth_graph.intros apply(rule_tac y="x" in lam.exhaust) apply(simp_all)[3] apply(simp_all only: lam.distinct) apply(simp add: lam.eq_iff) apply(simp add: lam.eq_iff) -sorry +apply(subgoal_tac "finite (supp (x, xa, t, ta, depth_sumC t, depth_sumC ta))") +apply(erule_tac ?'a="name" in obtain_at_base) +unfolding fresh_def[symmetric] +apply(drule_tac a="atom x" and b="atom xa" and c="atom a" in test3) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(rule_tac a="atom x" and b="atom xa" and c="atom a" in test2) +apply(simp add: pure_fresh) +apply(simp add: pure_fresh) +apply(simp add: pure_fresh) +apply(simp add: pure_fresh) +apply(simp add: eqvt_at_def) +apply(drule test) +apply(simp) +apply(simp add: finite_supp) +done + +termination depth + apply(relation "measure size") + apply(auto simp add: lam.size) + done thm depth.psimps +thm depth.simps nominal_primrec frees :: "lam \ name set" @@ -1628,7 +1680,17 @@ apply(simp add: lam.eq_iff) apply(simp add: lam.eq_iff) apply(simp add: lam.eq_iff) -sorry +apply(subgoal_tac "finite (supp (x, xa, t, ta, frees_sumC t, frees_sumC ta))") +apply(erule_tac ?'a="name" in obtain_at_base) +unfolding fresh_def[symmetric] +apply(drule_tac a="atom x" and b="atom xa" and c="atom a" in test3) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp) +apply(drule test) +oops nominal_primrec subst :: "lam \ name \ lam \ lam" ("_ [_ ::= _]" [100,100,100] 100) @@ -1644,11 +1706,42 @@ apply(simp add: lam.eq_iff lam.distinct) apply(auto)[1] apply(simp add: fresh_star_def lam.eq_iff lam.distinct) -apply(simp_all add: lam.distinct) +apply(simp_all add: lam.distinct)[5] apply(simp add: lam.eq_iff) apply(simp add: lam.eq_iff) apply(simp add: lam.eq_iff) -sorry +apply(subgoal_tac "finite (supp (ya, sa, x, xa, t, ta, subst_sumC (t, ya, sa), subst_sumC (ta, ya, sa)))") +apply(erule_tac ?'a="name" in obtain_at_base) +unfolding fresh_def[symmetric] +apply(rule_tac a="atom x" and b="atom xa" and c="atom a" in test2) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(erule conjE)+ +apply(drule_tac a="atom x" and b="atom xa" and c="atom a" in test3) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: Abs_fresh_iff) +apply(simp add: eqvt_at_def) +apply(drule test) +apply(simp) +apply(subst (2) swap_fresh_fresh) +apply(simp) +apply(simp) +apply(subst (2) swap_fresh_fresh) +apply(simp) +apply(simp) +apply(subst (3) swap_fresh_fresh) +apply(simp) +apply(simp) +apply(subst (3) swap_fresh_fresh) +apply(simp) +apply(simp) +apply(simp) +apply(simp add: finite_supp) +done (* this should not work *) nominal_primrec