# HG changeset patch # User Christian Urban # Date 1290898529 0 # Node ID 3ebc7ecfb0dd47bc89db80e42ecb7f24e71e850a # Parent 385add25dedffed47d63dafd88fd97c32059dfd1 disabled the Foo examples, because of heavy work diff -r 385add25dedf -r 3ebc7ecfb0dd Nominal/Ex/Foo1.thy --- a/Nominal/Ex/Foo1.thy Fri Nov 26 22:43:26 2010 +0000 +++ b/Nominal/Ex/Foo1.thy Sat Nov 27 22:55:29 2010 +0000 @@ -148,9 +148,58 @@ using assms apply(simp only: foo.eq_iff uu1 tt1[symmetric] permute_Abs[symmetric]) apply(simp del: permute_Abs) -apply(rule at_set_avoiding3) -apply(simp_all only: finite_supp Abs_fresh_star finite_set) -done +sorry + +lemma strong_exhaust1: + fixes c::"'a::fs" + assumes "\name. y = Var name \ P" + and "\trm1 trm2. y = App trm1 trm2 \ P" + and "\name trm. {atom name} \* c \ y = Lam name trm \ P" + and "\assn trm. set (bn1 assn) \* c \ y = Let1 assn trm \ P" + and "\assn trm. set (bn2 assn) \* c \ y = Let2 assn trm \ P" + and "\assn trm. set (bn3 assn) \* c \ y = Let3 assn trm \ P" + and "\assn' trm. (bn4 assn') \* c \ y = Let4 assn' trm \ P" + shows "P" +apply(rule_tac y="y" in foo.exhaust(1)) +apply(rule assms(1)) +apply(rule exI) +apply(assumption) +apply(rule assms(2)) +apply(rule exI)+ +apply(assumption) +apply(rule assms(3)) +apply(subgoal_tac "\q. (q \ {atom name}) \* c \ supp (Lam name trm) \* q") +apply(erule exE) +apply(erule conjE) +apply(rule assms(3)) +apply(perm_simp) +apply(assumption) +apply(simp) +apply(drule supp_perm_eq[symmetric]) +apply(perm_simp) +apply(simp) +apply(rule at_set_avoiding2) +apply(simp add: finite_supp) +apply(simp add: finite_supp) +apply(simp add: finite_supp) +apply(simp add: foo.fresh fresh_star_def) +apply(drule Let1_rename_a) +apply(erule exE) +apply(erule conjE) +apply(rule assms(4)) +apply(simp only: set_eqvt tt1) +apply(assumption) +(* +apply(subgoal_tac "\q. (q \ (set (bn2 assg))) \* c \ supp ([bn2 assg]lst.trm) \* q") +apply(erule exE) +apply(erule conjE) +*) +thm assms(5) +apply(rule assms(5)) +prefer 2 +apply(clarify) +unfolding foo.eq_iff +apply lemma strong_exhaust1: fixes c::"'a::fs" @@ -188,10 +237,24 @@ apply(rule assms(4)) apply(simp only: set_eqvt tt1) apply(assumption) +(* apply(subgoal_tac "\q. (q \ (set (bn2 assg))) \* c \ supp ([bn2 assg]lst.trm) \* q") apply(erule exE) apply(erule conjE) +*) +thm assms(5) apply(rule assms(5)) +prefer 2 +apply(clarify) +unfolding foo.eq_iff +apply(rule conjI) +prefer 2 +apply(rule uu2) +apply(simp only: tt2[symmetric]) +prefer 2 +apply(simp only: tt2[symmetric]) + +apply(simp_all only:)[2] apply(simp add: set_eqvt) apply(simp add: tt2) apply(simp add: foo.eq_iff) diff -r 385add25dedf -r 3ebc7ecfb0dd Nominal/Ex/Foo2.thy --- a/Nominal/Ex/Foo2.thy Fri Nov 26 22:43:26 2010 +0000 +++ b/Nominal/Ex/Foo2.thy Sat Nov 27 22:55:29 2010 +0000 @@ -314,6 +314,82 @@ apply(simp) done +lemma abs_rename_set1: + fixes x::"'a::fs" + assumes "(p \ b) \ x" + shows "\y. [{b}]set. x = [{p \ b}]set. y" +apply(rule_tac x="(b \ (p \ b)) \ x" in exI) +apply(subst Abs_swap1[where a="b" and b="p \ b"]) +apply(simp) +using assms +apply(simp add: fresh_def) +apply(perm_simp) +apply(simp) +done + +lemma yy: + assumes "finite bs" + and "bs \ p \ bs = {}" + shows "\q. q \ bs = p \ bs \ supp q \ bs \ (p \ bs)" +using assms +apply(induct) +apply(simp add: permute_set_eq) +apply(rule_tac x="0" in exI) +apply(simp add: supp_perm) +apply(perm_simp) +apply(drule meta_mp) +apply(auto)[1] +apply(erule exE) +apply(simp) +apply(case_tac "q \ x = p \ x") +apply(rule_tac x="q" in exI) +apply(auto)[1] +apply(rule_tac x="((q \ x) \ (p \ x)) + q" in exI) +apply(subgoal_tac "p \ x \ p \ F") +apply(subgoal_tac "q \ x \ p \ F") +apply(simp add: swap_set_not_in) +apply(rule subset_trans) +apply(rule supp_plus_perm) +apply(simp) +apply(rule conjI) +apply(simp add: supp_swap) +defer +apply(auto)[1] +apply(erule conjE)+ +apply(drule sym) +apply(auto)[1] +apply(simp add: mem_permute_iff) +apply(simp add: mem_permute_iff) +apply(auto)[1] +apply(simp add: supp_perm) +apply(auto)[1] +done + +lemma zz: + fixes bs::"atom list" + assumes "set bs \ (set (p \ bs)) = {}" + shows "\q. q \ bs = p \ bs \ supp q \ (set bs) \ (set (p \ bs))" +sorry + +lemma abs_rename_set2: + fixes x::"'a::fs" + assumes "(p \ bs) \* x" "bs \ p \ bs ={}" "finite bs" + shows "\y. [bs]set. x = [p \ bs]set. y" +using yy assms +apply - +apply(drule_tac x="bs" in meta_spec) +apply(drule_tac x="p" in meta_spec) +apply(auto) +apply(rule_tac x="q \ x" in exI) +apply(subgoal_tac "(q \ ([bs]set. x)) = [bs]set. x") +apply(simp add: permute_Abs) +apply(rule supp_perm_eq) +apply(rule fresh_star_supp_conv) +apply(simp add: fresh_star_def) +apply(simp add: Abs_fresh_iff) +apply(auto) +done + lemma abs_rename_list: fixes x::"'a::fs" assumes "b' \ x" "sort_of b = sort_of b'" @@ -328,6 +404,26 @@ apply(simp) done +lemma abs_rename_list2: + fixes x::"'a::fs" + assumes "(set (p \ bs)) \* x" "(set bs) \ (set (p \ bs)) ={}" + shows "\y. [bs]lst. x = [p \ bs]lst. y" +using zz assms +apply - +apply(drule_tac x="bs" in meta_spec) +apply(drule_tac x="p" in meta_spec) +apply(auto simp add: set_eqvt) +apply(rule_tac x="q \ x" in exI) +apply(subgoal_tac "(q \ ([bs]lst. x)) = [bs]lst. x") +apply(simp) +apply(rule supp_perm_eq) +apply(rule fresh_star_supp_conv) +apply(simp add: fresh_star_def) +apply(simp add: Abs_fresh_iff) +apply(auto) +done + + lemma test3: fixes c::"'a::fs" assumes a: "y = Let2 x1 x2 trm1 trm2" @@ -338,62 +434,30 @@ apply(subgoal_tac "\q::perm. (q \ {atom x1, atom x2}) \* (c, x1, x2, trm1, trm2)") apply(erule exE) apply(perm_simp) +apply(simp only: foo.eq_iff) apply(drule_tac x="q \ x1" in spec) apply(drule_tac x="q \ x2" in spec) -apply(simp only: foo.eq_iff) apply(simp) apply(erule mp) apply(rule conjI) apply(simp add: fresh_star_prod) apply(rule conjI) -prefer 2 -apply(rule abs_rename_list) -apply(simp add: fresh_star_prod) -apply(simp add: fresh_star_def) -apply(simp) -apply(case_tac "x1=x2") -apply(simp) -apply(subst Abs_swap2[where a="atom x2" and b="atom (q \ x2)"]) -apply(simp) -apply(simp add: fresh_star_def) -apply(simp add: fresh_def supp_Pair) -apply(simp) -apply(rule exI) -apply(rule refl) -apply(subst Abs_swap2[where a="atom x2" and b="atom (q \ x2)"]) -apply(simp) -apply(simp add: fresh_star_def) -apply(simp add: fresh_def supp_Pair) -apply(simp) -apply(simp add: flip_def[symmetric] atom_eqvt) -apply(subgoal_tac "q \ x2 \ x1") -apply(simp) -apply(subst Abs_swap2[where a="atom x1" and b="atom (q \ x1)"]) -apply(simp) -apply(subgoal_tac " atom (q \ x1) \ supp ((x2 \ q \ x2) \ trm1)") -apply(simp add: fresh_star_def) -apply(simp add: fresh_star_def) -apply(simp add: fresh_def supp_Pair) -apply(erule conjE)+ -apply(rule_tac p="(x2 \ q \ x2)" in permute_boolE) -apply(simp add: mem_eqvt Not_eqvt atom_eqvt supp_eqvt) -apply(subgoal_tac "q \ x2 \ q \ x1") -apply(subgoal_tac "x2 \ q \ x1") -apply(simp) -apply(simp add: supp_at_base) -apply(simp) -apply(simp) -apply(rule exI) -apply(rule refl) -apply(simp add: fresh_star_def) -apply(simp add: fresh_def supp_Pair) -apply(simp add: supp_at_base) -apply(rule at_set_avoiding3[where x="()", simplified]) -apply(simp) -apply(simp add: finite_supp) -apply(simp add: finite_supp) -apply(simp add: fresh_star_def fresh_Unit) -done +apply(simp add: atom_eqvt[symmetric]) +apply(subst (2) permute_list.simps(1)[where p="q", symmetric]) +apply(subst permute_list.simps(2)[symmetric]) +apply(subst permute_list.simps(2)[symmetric]) +apply(rule abs_rename_list2) +apply(simp add: atom_eqvt fresh_star_prod) +apply(simp add: atom_eqvt fresh_star_prod fresh_star_def fresh_Pair fresh_def supp_Pair supp_at_base) +apply(simp add: atom_eqvt[symmetric]) +apply(subst (2) permute_list.simps(1)[where p="q", symmetric]) +apply(subst permute_list.simps(2)[symmetric]) +apply(rule abs_rename_list2) +apply(simp add: atom_eqvt fresh_star_prod) +apply(simp add: atom_eqvt fresh_star_prod fresh_star_def fresh_Pair fresh_def supp_Pair supp_at_base) +apply(simp add: atom_eqvt[symmetric]) +apply(simp add: atom_eqvt fresh_star_prod fresh_star_def fresh_Pair fresh_def supp_Pair supp_at_base) +sorry lemma test4: fixes c::"'a::fs" diff -r 385add25dedf -r 3ebc7ecfb0dd Nominal/Nominal2_Base.thy --- a/Nominal/Nominal2_Base.thy Fri Nov 26 22:43:26 2010 +0000 +++ b/Nominal/Nominal2_Base.thy Sat Nov 27 22:55:29 2010 +0000 @@ -1583,9 +1583,15 @@ assumes "finite xs" and "finite (supp c)" "finite (supp x)" and "xs \* x" - shows "\p. (p \ xs) \* c \ x = p \ x" -using at_set_avoiding2[OF assms] -by (auto simp add: supp_perm_eq) + shows "\p. (p \ xs) \* c \ supp x \* p \ supp p \ xs \ (p \ xs)" +using assms +apply(erule_tac c="(c, x)" in at_set_avoiding) +apply(simp add: supp_Pair) +apply(rule_tac x="p" in exI) +apply(simp add: fresh_star_prod) +apply(rule fresh_star_supp_conv) +apply(auto simp add: fresh_star_def) +done lemma at_set_avoiding2_atom: diff -r 385add25dedf -r 3ebc7ecfb0dd Nominal/ROOT.ML --- a/Nominal/ROOT.ML Fri Nov 26 22:43:26 2010 +0000 +++ b/Nominal/ROOT.ML Sat Nov 27 22:55:29 2010 +0000 @@ -22,7 +22,7 @@ "Ex/SystemFOmega", "Ex/TypeSchemes", "Ex/TypeVarsTest", - "Ex/Foo1", - "Ex/Foo2", + (*"Ex/Foo1", + "Ex/Foo2",*) "Ex/CoreHaskell" ];