# HG changeset patch # User paulson # Date 1713611281 -3600 # Node ID a30a1385f7d0c2a018eaca1cdc8f5939e2b11cab # Parent 0c51e0a6bc378d04c575d2ab52f65bf4e85be3d0 Starting to tidy HOL-Nominal-Examples diff -r 0c51e0a6bc37 -r a30a1385f7d0 src/HOL/Nominal/Examples/Class1.thy --- a/src/HOL/Nominal/Examples/Class1.thy Thu Apr 18 17:53:14 2024 +0200 +++ b/src/HOL/Nominal/Examples/Class1.thy Sat Apr 20 12:08:01 2024 +0100 @@ -1,5 +1,5 @@ theory Class1 -imports "HOL-Nominal.Nominal" +imports "HOL-Nominal.Nominal" begin section \Term-Calculus from Urban's PhD\ @@ -44,9 +44,9 @@ and T::"ty" shows "a\T" and "x\T" by (nominal_induct T rule: ty.strong_induct) - (auto simp add: fresh_string) - -text \terms\ + (auto simp: fresh_string) + +text \terms\ nominal_datatype trm = Ax "name" "coname" @@ -89,11 +89,7 @@ | "a\(d,e,b) \ (ImpR (x)..M b)[d\c>e] = (if b=d then ImpR (x)..(M[d\c>e]) e else ImpR (x)..(M[d\c>e]) b)" | "\a\(d,e,N);x\(M,y)\ \ (ImpL .M (x).N y)[d\c>e] = ImpL .(M[d\c>e]) (x).(N[d\c>e]) y" -apply(finite_guess)+ -apply(rule TrueI)+ -apply(simp add: abs_fresh abs_supp fin_supp)+ -apply(fresh_guess)+ -done + by(finite_guess | simp add: abs_fresh abs_supp fin_supp | fresh_guess)+ nominal_primrec (freshness_context: "(u::name,v::name)") nrename :: "trm \ name \ name \ trm" ("_[_\n>_]" [100,100,100] 100) @@ -112,41 +108,29 @@ | "\a\b; x\(u,v)\ \ (ImpR (x)..M b)[u\n>v] = ImpR (x)..(M[u\n>v]) b" | "\a\N;x\(u,v,M,y)\ \ (ImpL .M (x).N y)[u\n>v] = (if y=u then ImpL .(M[u\n>v]) (x).(N[u\n>v]) v else ImpL .(M[u\n>v]) (x).(N[u\n>v]) y)" -apply(finite_guess)+ -apply(rule TrueI)+ -apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1)+ -apply(fresh_guess)+ -done + by(finite_guess | simp add: abs_fresh abs_supp fin_supp | fresh_guess)+ lemmas eq_bij = pt_bij[OF pt_name_inst, OF at_name_inst] pt_bij[OF pt_coname_inst, OF at_coname_inst] lemma crename_name_eqvt[eqvt]: fixes pi::"name prm" shows "pi\(M[d\c>e]) = (pi\M)[(pi\d)\c>(pi\e)]" -apply(nominal_induct M avoiding: d e rule: trm.strong_induct) -apply(auto simp add: fresh_bij eq_bij) -done + by (nominal_induct M avoiding: d e rule: trm.strong_induct) (auto simp: fresh_bij eq_bij) lemma crename_coname_eqvt[eqvt]: fixes pi::"coname prm" shows "pi\(M[d\c>e]) = (pi\M)[(pi\d)\c>(pi\e)]" -apply(nominal_induct M avoiding: d e rule: trm.strong_induct) -apply(auto simp add: fresh_bij eq_bij) -done + by (nominal_induct M avoiding: d e rule: trm.strong_induct)(auto simp: fresh_bij eq_bij) lemma nrename_name_eqvt[eqvt]: fixes pi::"name prm" shows "pi\(M[x\n>y]) = (pi\M)[(pi\x)\n>(pi\y)]" -apply(nominal_induct M avoiding: x y rule: trm.strong_induct) -apply(auto simp add: fresh_bij eq_bij) -done + by(nominal_induct M avoiding: x y rule: trm.strong_induct) (auto simp: fresh_bij eq_bij) lemma nrename_coname_eqvt[eqvt]: fixes pi::"coname prm" shows "pi\(M[x\n>y]) = (pi\M)[(pi\x)\n>(pi\y)]" -apply(nominal_induct M avoiding: x y rule: trm.strong_induct) -apply(auto simp add: fresh_bij eq_bij) -done + by(nominal_induct M avoiding: x y rule: trm.strong_induct)(auto simp: fresh_bij eq_bij) lemmas rename_eqvts = crename_name_eqvt crename_coname_eqvt nrename_name_eqvt nrename_coname_eqvt @@ -155,58 +139,58 @@ shows "M[x\n>y] = M" using a by (nominal_induct M avoiding: x y rule: trm.strong_induct) - (auto simp add: trm.inject fresh_atm abs_fresh fin_supp abs_supp) + (auto simp: trm.inject fresh_atm abs_fresh fin_supp abs_supp) lemma crename_fresh: assumes a: "a\M" shows "M[a\c>b] = M" using a by (nominal_induct M avoiding: a b rule: trm.strong_induct) - (auto simp add: trm.inject fresh_atm abs_fresh) + (auto simp: trm.inject fresh_atm abs_fresh) lemma nrename_nfresh: fixes x::"name" shows "x\y\x\M[x\n>y]" by (nominal_induct M avoiding: x y rule: trm.strong_induct) - (auto simp add: fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_atm abs_fresh abs_supp fin_supp) lemma crename_nfresh: fixes x::"name" shows "x\M\x\M[a\c>b]" by (nominal_induct M avoiding: a b rule: trm.strong_induct) - (auto simp add: fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_atm abs_fresh abs_supp fin_supp) lemma crename_cfresh: fixes a::"coname" shows "a\b\a\M[a\c>b]" by (nominal_induct M avoiding: a b rule: trm.strong_induct) - (auto simp add: fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_atm abs_fresh abs_supp fin_supp) lemma nrename_cfresh: fixes c::"coname" shows "c\M\c\M[x\n>y]" by (nominal_induct M avoiding: x y rule: trm.strong_induct) - (auto simp add: fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_atm abs_fresh abs_supp fin_supp) lemma nrename_nfresh': fixes x::"name" shows "x\(M,z,y)\x\M[z\n>y]" by (nominal_induct M avoiding: x z y rule: trm.strong_induct) - (auto simp add: fresh_prod fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_prod fresh_atm abs_fresh abs_supp fin_supp) lemma crename_cfresh': fixes a::"coname" shows "a\(M,b,c)\a\M[b\c>c]" by (nominal_induct M avoiding: a b c rule: trm.strong_induct) - (auto simp add: fresh_prod fresh_atm abs_fresh abs_supp fin_supp) + (auto simp: fresh_prod fresh_atm abs_fresh abs_supp fin_supp) lemma nrename_rename: assumes a: "x'\M" shows "([(x',x)]\M)[x'\n>y]= M[x\n>y]" using a apply(nominal_induct M avoiding: x x' y rule: trm.strong_induct) -apply(auto simp add: abs_fresh fresh_bij fresh_atm fresh_prod fresh_right calc_atm abs_supp fin_supp) -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm) +apply(auto simp: abs_fresh fresh_bij fresh_atm fresh_prod fresh_right calc_atm abs_supp fin_supp) +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm) done lemma crename_rename: @@ -214,8 +198,8 @@ shows "([(a',a)]\M)[a'\c>b]= M[a\c>b]" using a apply(nominal_induct M avoiding: a a' b rule: trm.strong_induct) -apply(auto simp add: abs_fresh fresh_bij fresh_atm fresh_prod fresh_right calc_atm abs_supp fin_supp) -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm) +apply(auto simp: abs_fresh fresh_bij fresh_atm fresh_prod fresh_right calc_atm abs_supp fin_supp) +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm) done lemmas rename_fresh = nrename_fresh crename_fresh @@ -230,21 +214,13 @@ obtain x'::"name" where fs1: "x'\(M,N,a,x,u,v)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a,x,u,v)" by (rule exists_fresh(2), rule fin_supp, blast) have eq1: "(Cut .M (x).N) = (Cut .([(a',a)]\M) (x').([(x',x)]\N))" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) have "(Cut .([(a',a)]\M) (x').([(x',x)]\N))[u\n>v] = Cut .(([(a',a)]\M)[u\n>v]) (x').(([(x',x)]\N)[u\n>v])" using fs1 fs2 - apply - - apply(rule nrename.simps) - apply(simp add: fresh_left calc_atm) - apply(simp add: fresh_left calc_atm) - done + by (intro nrename.simps; simp add: fresh_left calc_atm) also have "\ = Cut .(M[u\n>v]) (x).(N[u\n>v])" using fs1 fs2 a - apply - - apply(simp add: trm.inject alpha fresh_atm fresh_prod rename_eqvts) - apply(simp add: calc_atm) - apply(simp add: rename_fresh fresh_atm) - done + by(simp add: trm.inject alpha fresh_prod rename_eqvts calc_atm rename_fresh fresh_atm) finally show "(Cut .M (x).N)[u\n>v] = Cut .(M[u\n>v]) (x).(N[u\n>v])" using eq1 by simp qed @@ -256,21 +232,13 @@ obtain x'::"name" where fs1: "x'\(M,N,a,x,b,c)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a,x,b,c)" by (rule exists_fresh(2), rule fin_supp, blast) have eq1: "(Cut .M (x).N) = (Cut .([(a',a)]\M) (x').([(x',x)]\N))" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) have "(Cut .([(a',a)]\M) (x').([(x',x)]\N))[b\c>c] = Cut .(([(a',a)]\M)[b\c>c]) (x').(([(x',x)]\N)[b\c>c])" using fs1 fs2 - apply - - apply(rule crename.simps) - apply(simp add: fresh_left calc_atm) - apply(simp add: fresh_left calc_atm) - done + by (intro crename.simps; simp add: fresh_left calc_atm) also have "\ = Cut .(M[b\c>c]) (x).(N[b\c>c])" using fs1 fs2 a - apply - - apply(simp add: trm.inject alpha fresh_atm fresh_prod rename_eqvts) - apply(simp add: calc_atm) - apply(simp add: rename_fresh fresh_atm) - done + by(simp add: trm.inject alpha calc_atm rename_fresh fresh_atm fresh_prod rename_eqvts) finally show "(Cut .M (x).N)[b\c>c] = Cut .(M[b\c>c]) (x).(N[b\c>c])" using eq1 by simp qed @@ -317,11 +285,7 @@ and M::"trm" assumes a: "c\pi" "c\M" shows "c\(pi\M)" -using a -apply - -apply(simp add: fresh_left) -apply(simp add: at_prm_fresh[OF at_coname_inst] fresh_list_rev) -done + by (simp add: assms fresh_perm_app) lemma fresh_perm_name: fixes x::"name" @@ -329,30 +293,29 @@ and M::"trm" assumes a: "x\pi" "x\M" shows "x\(pi\M)" -using a -apply - -apply(simp add: fresh_left) -apply(simp add: at_prm_fresh[OF at_name_inst] fresh_list_rev) -done + by (simp add: assms fresh_perm_app) lemma fresh_fun_simp_NotL: assumes a: "x'\P" "x'\M" shows "fresh_fun (\x'. Cut .P (x').NotL .M x') = Cut .P (x').NotL .M x'" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_name_inst) -apply(rule at_name_inst) -apply(finite_guess) -apply(subgoal_tac "\n::name. n\(c,P,a,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app) + show "pt (TYPE(trm)::trm itself) (TYPE(name)::name itself)" + by(rule pt_name_inst) + show "at (TYPE(name)::name itself)" + by(rule at_name_inst) + show "finite (supp (\x'. Cut .P (x').NotL .M x')::name set)" + using a by(finite_guess) + obtain n::name where n: "n\(c,P,a,M)" + by (metis assms fresh_atm(3) fresh_prod) + with assms + show "\b. b \ (\x'. Cut .P (x').NotL .M x', Cut .P (b).NotL .M b)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done + show "x' \ (\x'. Cut .P (x').NotL .M x')" + using assms by(fresh_guess) +qed lemma fresh_fun_NotL[eqvt_force]: fixes pi1::"name prm" @@ -361,48 +324,36 @@ fresh_fun (pi1\(\x'. Cut .P (x').NotL .M x'))" and "pi2\fresh_fun (\x'. Cut .P (x').NotL .M x')= fresh_fun (pi2\(\x'. Cut .P (x').NotL .M x'))" -apply - -apply(perm_simp) -apply(generate_fresh "name") -apply(auto simp add: fresh_prod) -apply(simp add: fresh_fun_simp_NotL) -apply(rule sym) -apply(rule trans) -apply(rule fresh_fun_simp_NotL) -apply(rule fresh_perm_name) -apply(assumption) -apply(assumption) -apply(rule fresh_perm_name) -apply(assumption) -apply(assumption) -apply(simp add: at_prm_fresh[OF at_name_inst] swap_simps) -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,pi2\P,pi2\M,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_NotL calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(generate_fresh "name") + apply(auto simp: fresh_prod fresh_fun_simp_NotL) + apply(rule sym) + apply(rule trans) + apply(rule fresh_fun_simp_NotL) + apply(blast intro: fresh_perm_name) + apply(metis fresh_perm_name) + apply(simp add: at_prm_fresh[OF at_name_inst] swap_simps) + + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,pi2\P,pi2\M,pi2)") + apply (metis fresh_fun_simp_NotL fresh_prodD swap_simps(8) trm.perm(14) trm.perm(16)) + by (meson exists_fresh(1) fs_name1) lemma fresh_fun_simp_AndL1: assumes a: "z'\P" "z'\M" "z'\x" - shows "fresh_fun (\z'. Cut .P (z').AndL1 (x).M z') = Cut .P (z').AndL1 (x).M z'" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_name_inst) -apply(rule at_name_inst) -apply(finite_guess) -apply(subgoal_tac "\n::name. n\(c,P,x,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done + shows "fresh_fun (\z'. Cut .P(z').AndL1 (x).M z') = Cut .P (z').AndL1 (x).M z'" +proof (rule fresh_fun_app [OF pt_name_inst at_name_inst]) + obtain n::name where "n\(c,P,x,M)" + by (meson exists_fresh(1) fs_name1) + then show "\a. a \ (\z'. Cut .P(z').AndL1 x. M z', Cut .P(a).AndL1 x. M a)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +next + show "z' \ (\z'. Cut .P(z').AndL1 x. M z')" + using a by(fresh_guess) +qed finite_guess lemma fresh_fun_AndL1[eqvt_force]: fixes pi1::"name prm" @@ -411,41 +362,30 @@ fresh_fun (pi1\(\z'. Cut .P (z').AndL1 (x).M z'))" and "pi2\fresh_fun (\z'. Cut .P (z').AndL1 (x).M z')= fresh_fun (pi2\(\z'. Cut .P (z').AndL1 (x).M z'))" -apply - apply(perm_simp) apply(subgoal_tac "\n::name. n\(P,M,x,pi1\P,pi1\M,pi1\x,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndL1 at_prm_fresh[OF at_name_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) +apply(force simp add: fresh_prod fresh_fun_simp_AndL1 at_prm_fresh[OF at_name_inst] swap_simps) + apply (meson exists_fresh(1) fs_name1) apply(perm_simp) apply(subgoal_tac "\n::name. n\(P,M,x,pi2\P,pi2\M,pi2\x,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndL1 calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done +apply(force simp add: fresh_prod fresh_fun_simp_AndL1 calc_atm) + by (meson exists_fresh'(1) fs_name1) lemma fresh_fun_simp_AndL2: assumes a: "z'\P" "z'\M" "z'\x" shows "fresh_fun (\z'. Cut .P (z').AndL2 (x).M z') = Cut .P (z').AndL2 (x).M z'" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_name_inst) -apply(rule at_name_inst) -apply(finite_guess) -apply(subgoal_tac "\n::name. n\(c,P,x,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_name_inst at_name_inst]) + obtain n::name where "n\(c,P,x,M)" + by (meson exists_fresh(1) fs_name1) + then show "\a. a \ (\z'. Cut .P(z').AndL2 x. M z', Cut .P(a).AndL2 x. M a)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +next + show "z' \ (\z'. Cut .P(z').AndL2 x. M z')" + using a by(fresh_guess) +qed finite_guess lemma fresh_fun_AndL2[eqvt_force]: fixes pi1::"name prm" @@ -454,84 +394,62 @@ fresh_fun (pi1\(\z'. Cut .P (z').AndL2 (x).M z'))" and "pi2\fresh_fun (\z'. Cut .P (z').AndL2 (x).M z')= fresh_fun (pi2\(\z'. Cut .P (z').AndL2 (x).M z'))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,x,pi1\P,pi1\M,pi1\x,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndL2 at_prm_fresh[OF at_name_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,x,pi2\P,pi2\M,pi2\x,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndL2 calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,x,pi1\P,pi1\M,pi1\x,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_AndL2 at_prm_fresh[OF at_name_inst] swap_simps) + apply (meson exists_fresh(1) fs_name1) + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,x,pi2\P,pi2\M,pi2\x,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_AndL2 calc_atm) + by (meson exists_fresh(1) fs_name1) lemma fresh_fun_simp_OrL: assumes a: "z'\P" "z'\M" "z'\N" "z'\u" "z'\x" - shows "fresh_fun (\z'. Cut .P (z').OrL (x).M (u).N z') = Cut .P (z').OrL (x).M (u).N z'" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_name_inst) -apply(rule at_name_inst) -apply(finite_guess) -apply(subgoal_tac "\n::name. n\(c,P,x,M,u,N)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done + shows "fresh_fun (\z'. Cut .P(z').OrL(x).M(u).N z') = Cut .P (z').OrL (x).M (u).N z'" +proof (rule fresh_fun_app [OF pt_name_inst at_name_inst]) + obtain n::name where "n\(c,P,x,M,u,N)" + by (meson exists_fresh(1) fs_name1) + then show "\a. a \ (\z'. Cut .P(z').OrL(x).M(u).N(z'), Cut .P(a).OrL(x).M(u).N(a))" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +next + show "z' \ (\z'. Cut .P(z').OrL(x).M(u).N(z'))" + using a by(fresh_guess) +qed finite_guess lemma fresh_fun_OrL[eqvt_force]: fixes pi1::"name prm" and pi2::"coname prm" - shows "pi1\fresh_fun (\z'. Cut .P (z').OrL (x).M (u).N z')= - fresh_fun (pi1\(\z'. Cut .P (z').OrL (x).M (u).N z'))" - and "pi2\fresh_fun (\z'. Cut .P (z').OrL (x).M (u).N z')= - fresh_fun (pi2\(\z'. Cut .P (z').OrL (x).M (u).N z'))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,N,x,u,pi1\P,pi1\M,pi1\N,pi1\x,pi1\u,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrL at_prm_fresh[OF at_name_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,N,x,u,pi2\P,pi2\M,pi2\N,pi2\x,pi2\u,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrL calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + shows "pi1\fresh_fun (\z'. Cut .P(z').OrL (x).M(u).N z')= + fresh_fun (pi1\(\z'. Cut .P (z').OrL(x).M (u).N z'))" + and "pi2\fresh_fun (\z'. Cut .P(z').OrL (x).M(u).N z')= + fresh_fun (pi2\(\z'. Cut .P(z').OrL(x).M(u).N z'))" + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,N,x,u,pi1\P,pi1\M,pi1\N,pi1\x,pi1\u,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_OrL at_prm_fresh[OF at_name_inst] swap_simps) + apply (meson exists_fresh(1) fs_name1) + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,N,x,u,pi2\P,pi2\M,pi2\N,pi2\x,pi2\u,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_OrL calc_atm) + by (meson exists_fresh(1) fs_name1) lemma fresh_fun_simp_ImpL: assumes a: "z'\P" "z'\M" "z'\N" "z'\x" shows "fresh_fun (\z'. Cut .P (z').ImpL .M (x).N z') = Cut .P (z').ImpL .M (x).N z'" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_name_inst) -apply(rule at_name_inst) -apply(finite_guess) -apply(subgoal_tac "\n::name. n\(c,P,x,M,N)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_name_inst at_name_inst]) + obtain n::name where "n\(c,P,x,M,N)" + by (meson exists_fresh(1) fs_name1) + then show "\aa. aa \ (\z'. Cut .P(z').ImpL .M(x).N z', Cut .P(aa).ImpL .M(x).N aa)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +next + show "z' \ (\z'. Cut .P(z').ImpL .M(x).N z')" + using a by(fresh_guess) +qed finite_guess lemma fresh_fun_ImpL[eqvt_force]: fixes pi1::"name prm" @@ -540,41 +458,27 @@ fresh_fun (pi1\(\z'. Cut .P (z').ImpL .M (x).N z'))" and "pi2\fresh_fun (\z'. Cut .P (z').ImpL .M (x).N z')= fresh_fun (pi2\(\z'. Cut .P (z').ImpL .M (x).N z'))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,N,x,pi1\P,pi1\M,pi1\N,pi1\x,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_ImpL at_prm_fresh[OF at_name_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::name. n\(P,M,N,x,pi2\P,pi2\M,pi2\N,pi2\x,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_ImpL calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,N,x,pi1\P,pi1\M,pi1\N,pi1\x,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_ImpL at_prm_fresh[OF at_name_inst] swap_simps) + apply (meson exists_fresh(1) fs_name1) + apply(perm_simp) + apply(subgoal_tac "\n::name. n\(P,M,N,x,pi2\P,pi2\M,pi2\N,pi2\x,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_ImpL calc_atm) + by (meson exists_fresh(1) fs_name1) lemma fresh_fun_simp_NotR: assumes a: "a'\P" "a'\M" shows "fresh_fun (\a'. Cut .(NotR (y).M a') (x).P) = Cut .(NotR (y).M a') (x).P" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_coname_inst) -apply(rule at_coname_inst) -apply(finite_guess) -apply(subgoal_tac "\n::coname. n\(x,P,y,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_coname_inst at_coname_inst]) + obtain n::coname where "n\(x,P,y,M)" + by (metis assms(1) assms(2) fresh_atm(4) fresh_prod) + then show "\a. a \ (\a'. Cut .(NotR (y).M a') (x).P, Cut .NotR(y).M(a) (x).P)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +qed (use a in \fresh_guess|finite_guess\)+ lemma fresh_fun_NotR[eqvt_force]: fixes pi1::"name prm" @@ -583,41 +487,27 @@ fresh_fun (pi1\(\a'. Cut .(NotR (y).M a') (x).P))" and "pi2\fresh_fun (\a'. Cut .(NotR (y).M a') (x).P)= fresh_fun (pi2\(\a'. Cut .(NotR (y).M a') (x).P))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,pi1\P,pi1\M,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_NotR calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,pi2\P,pi2\M,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_NotR at_prm_fresh[OF at_coname_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,pi1\P,pi1\M,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_NotR calc_atm) + apply (meson exists_fresh(2) fs_coname1) + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,pi2\P,pi2\M,pi2)") + apply(force simp: fresh_prod fresh_fun_simp_NotR at_prm_fresh[OF at_coname_inst] swap_simps) + by (meson exists_fresh(2) fs_coname1) lemma fresh_fun_simp_AndR: assumes a: "a'\P" "a'\M" "a'\N" "a'\b" "a'\c" shows "fresh_fun (\a'. Cut .(AndR .M .N a') (x).P) = Cut .(AndR .M .N a') (x).P" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_coname_inst) -apply(rule at_coname_inst) -apply(finite_guess) -apply(subgoal_tac "\n::coname. n\(x,P,b,M,c,N)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_coname_inst at_coname_inst]) + obtain n::coname where "n\(x,P,b,M,c,N)" + by (meson exists_fresh(2) fs_coname1) + then show "\a. a \ (\a'. Cut .AndR .M .N(a') (x).P, Cut .AndR .M .N(a) (x).P)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +qed (use a in \fresh_guess|finite_guess\)+ lemma fresh_fun_AndR[eqvt_force]: fixes pi1::"name prm" @@ -626,41 +516,27 @@ fresh_fun (pi1\(\a'. Cut .(AndR .M .N a') (x).P))" and "pi2\fresh_fun (\a'. Cut .(AndR .M .N a') (x).P)= fresh_fun (pi2\(\a'. Cut .(AndR .M .N a') (x).P))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,N,b,c,pi1\P,pi1\M,pi1\N,pi1\b,pi1\c,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndR calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,N,b,c,pi2\P,pi2\M,pi2\N,pi2\b,pi2\c,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_AndR at_prm_fresh[OF at_coname_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,N,b,c,pi1\P,pi1\M,pi1\N,pi1\b,pi1\c,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_AndR calc_atm) + apply (meson exists_fresh(2) fs_coname1) + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,N,b,c,pi2\P,pi2\M,pi2\N,pi2\b,pi2\c,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_AndR at_prm_fresh[OF at_coname_inst] swap_simps) + by (meson exists_fresh(2) fs_coname1) lemma fresh_fun_simp_OrR1: assumes a: "a'\P" "a'\M" "a'\b" shows "fresh_fun (\a'. Cut .(OrR1 .M a') (x).P) = Cut .(OrR1 .M a') (x).P" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_coname_inst) -apply(rule at_coname_inst) -apply(finite_guess) -apply(subgoal_tac "\n::coname. n\(x,P,b,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_coname_inst at_coname_inst]) + obtain n::coname where "n\(x,P,b,M)" + by (meson exists_fresh(2) fs_coname1) + then show "\a. a \ (\a'. Cut .OrR1 .M(a') (x).P, Cut .OrR1 .M(a) (x).P)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +qed (use a in \fresh_guess|finite_guess\)+ lemma fresh_fun_OrR1[eqvt_force]: fixes pi1::"name prm" @@ -669,41 +545,27 @@ fresh_fun (pi1\(\a'. Cut .(OrR1 .M a') (x).P))" and "pi2\fresh_fun (\a'. Cut .(OrR1 .M a') (x).P)= fresh_fun (pi2\(\a'. Cut .(OrR1 .M a') (x).P))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrR1 calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrR1 at_prm_fresh[OF at_coname_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_OrR1 calc_atm) + apply (meson exists_fresh(2) fs_coname1) + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_OrR1 at_prm_fresh[OF at_coname_inst] swap_simps) + by (meson exists_fresh(2) fs_coname1) lemma fresh_fun_simp_OrR2: assumes a: "a'\P" "a'\M" "a'\b" shows "fresh_fun (\a'. Cut .(OrR2 .M a') (x).P) = Cut .(OrR2 .M a') (x).P" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_coname_inst) -apply(rule at_coname_inst) -apply(finite_guess) -apply(subgoal_tac "\n::coname. n\(x,P,b,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_coname_inst at_coname_inst]) + obtain n::coname where "n\(x,P,b,M)" + by (meson exists_fresh(2) fs_coname1) + then show "\a. a \ (\a'. Cut .OrR2 .M(a') (x).P, Cut .OrR2 .M(a) (x).P)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +qed (use a in \fresh_guess|finite_guess\)+ lemma fresh_fun_OrR2[eqvt_force]: fixes pi1::"name prm" @@ -712,41 +574,27 @@ fresh_fun (pi1\(\a'. Cut .(OrR2 .M a') (x).P))" and "pi2\fresh_fun (\a'. Cut .(OrR2 .M a') (x).P)= fresh_fun (pi2\(\a'. Cut .(OrR2 .M a') (x).P))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrR2 calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_OrR2 at_prm_fresh[OF at_coname_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_OrR2 calc_atm) + apply (meson exists_fresh(2) fs_coname1) + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_OrR2 at_prm_fresh[OF at_coname_inst] swap_simps) + by (meson exists_fresh(2) fs_coname1) lemma fresh_fun_simp_ImpR: assumes a: "a'\P" "a'\M" "a'\b" shows "fresh_fun (\a'. Cut .(ImpR (y)..M a') (x).P) = Cut .(ImpR (y)..M a') (x).P" -using a -apply - -apply(rule fresh_fun_app) -apply(rule pt_coname_inst) -apply(rule at_coname_inst) -apply(finite_guess) -apply(subgoal_tac "\n::coname. n\(x,P,y,b,M)") -apply(erule exE) -apply(rule_tac x="n" in exI) -apply(simp add: fresh_prod abs_fresh) -apply(fresh_guess) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(fresh_guess) -done +proof (rule fresh_fun_app [OF pt_coname_inst at_coname_inst]) + obtain n::coname where "n\(x,P,y,b,M)" + by (meson exists_fresh(2) fs_coname1) + then show "\a. a \ (\a'. Cut .(ImpR (y)..M a') (x).P, Cut .(ImpR (y)..M a) (x).P)" + apply(intro exI [where x="n"]) + apply(simp add: fresh_prod abs_fresh) + apply(fresh_guess) + done +qed (use a in \fresh_guess|finite_guess\)+ lemma fresh_fun_ImpR[eqvt_force]: fixes pi1::"name prm" @@ -755,22 +603,14 @@ fresh_fun (pi1\(\a'. Cut .(ImpR (y)..M a') (x).P))" and "pi2\fresh_fun (\a'. Cut .(ImpR (y)..M a') (x).P)= fresh_fun (pi2\(\a'. Cut .(ImpR (y)..M a') (x).P))" -apply - -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_ImpR calc_atm) -apply(rule exists_fresh') -apply(simp add: fin_supp) -apply(perm_simp) -apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") -apply(simp add: fresh_prod) -apply(auto) -apply(simp add: fresh_fun_simp_ImpR at_prm_fresh[OF at_coname_inst] swap_simps) -apply(rule exists_fresh') -apply(simp add: fin_supp) -done + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi1\P,pi1\M,pi1\b,pi1)") + apply(force simp add: fresh_prod fresh_fun_simp_ImpR calc_atm) + apply (meson exists_fresh(2) fs_coname1) + apply(perm_simp) + apply(subgoal_tac "\n::coname. n\(P,M,b,pi2\P,pi2\M,pi2\b,pi2)") + apply(force simp add: fresh_prod fresh_fun_simp_ImpR at_prm_fresh[OF at_coname_inst] swap_simps) + by (meson exists_fresh(2) fs_coname1) nominal_primrec (freshness_context: "(y::name,c::coname,P::trm)") substn :: "trm \ name \ coname \ trm \ trm" ("_{_:=<_>._}" [100,100,100,100] 100) @@ -798,50 +638,40 @@ | "\a\(N,c,P);x\(y,P,M,z)\ \ (ImpL .M (x).N z){y:=.P} = (if y=z then fresh_fun (\z'. Cut .P (z').ImpL .(M{y:=.P}) (x).(N{y:=.P}) z') else ImpL .(M{y:=.P}) (x).(N{y:=.P}) z)" -apply(finite_guess)+ -apply(rule TrueI)+ -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_NotL abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_AndL1 abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_AndL2 abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x1,P,y1,x3,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_OrL abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x1,P,y1,x3,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_OrL abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x3,P,y1,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_ImpL abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::name. x\(x3,P,y1,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_ImpL abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) +apply(finite_guess | simp add: abs_fresh abs_supp fin_supp | fresh_guess | rule strip)+ +apply(subgoal_tac "\x::name. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_NotL abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_AndL1 abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_AndL2 abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x1,P,y1,x3,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_OrL abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x1,P,y1,x3,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_OrL abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x3,P,y1,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_ImpL abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) + +apply(simp add: abs_fresh abs_supp fin_supp | rule strip)+ +apply(subgoal_tac "\x::name. x\(x3,P,y1,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_ImpL abs_fresh fresh_atm) +apply (meson exists_fresh(1) fs_name1) apply(fresh_guess)+ done @@ -870,61 +700,52 @@ else ImpR (x)..(M{d:=(z).P}) b)" | "\a\(N,d,P);x\(y,z,P,M)\ \ (ImpL .M (x).N y){d:=(z).P} = ImpL .(M{d:=(z).P}) (x).(N{d:=(z).P}) y" -apply(finite_guess)+ -apply(rule TrueI)+ -apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_NotR abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,y1,x3,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_AndR abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,y1,x3,y2)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_AndR abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_OrR1 abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_OrR2 abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,x2,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_ImpR abs_fresh fresh_atm abs_supp) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(rule impI) -apply(subgoal_tac "\x::coname. x\(x1,P,x2,y1)", erule exE, simp add: fresh_prod) -apply(erule conjE)+ -apply(simp add: fresh_fun_simp_ImpR abs_fresh fresh_atm) -apply(rule exists_fresh', simp add: fin_supp) -apply(simp add: abs_fresh abs_supp)+ -apply(fresh_guess add: abs_fresh fresh_prod)+ +apply(finite_guess | simp add: abs_fresh abs_supp fs_name1 fs_coname1 | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_NotR abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1 | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,y1,x3,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_AndR abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1 | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,y1,x3,y2)") +apply(force simp add: fresh_prod fresh_fun_simp_AndR abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1 | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_OrR1 abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp fs_name1 fs_coname1 | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_OrR2 abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,x2,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_ImpR abs_fresh fresh_atm abs_supp) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh abs_supp | rule strip)+ +apply(subgoal_tac "\x::coname. x\(x1,P,x2,y1)") +apply(force simp add: fresh_prod fresh_fun_simp_ImpR abs_fresh fresh_atm) +apply(meson exists_fresh' fin_supp) + +apply(simp add: abs_fresh | fresh_guess add: abs_fresh)+ done + lemma csubst_eqvt[eqvt]: fixes pi1::"name prm" and pi2::"coname prm" shows "pi1\(M{c:=(x).N}) = (pi1\M){(pi1\c):=(pi1\x).(pi1\N)}" and "pi2\(M{c:=(x).N}) = (pi2\M){(pi2\c):=(pi2\x).(pi2\N)}" apply(nominal_induct M avoiding: c x N rule: trm.strong_induct) -apply(auto simp add: eq_bij fresh_bij eqvts) +apply(auto simp: eq_bij fresh_bij eqvts) apply(perm_simp)+ done @@ -934,7 +755,7 @@ shows "pi1\(M{x:=.N}) = (pi1\M){(pi1\x):=<(pi1\c)>.(pi1\N)}" and "pi2\(M{x:=.N}) = (pi2\M){(pi2\x):=<(pi2\c)>.(pi2\N)}" apply(nominal_induct M avoiding: c x N rule: trm.strong_induct) -apply(auto simp add: eq_bij fresh_bij eqvts) +apply(auto simp: eq_bij fresh_bij eqvts) apply(perm_simp)+ done @@ -942,7 +763,7 @@ shows "supp (M{y:=.P}) \ ((supp M) - {y}) \ (supp P)" apply(nominal_induct M avoiding: y P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::name. x'\(trm{y:=.P},P)") apply(erule exE) @@ -1071,7 +892,7 @@ shows "supp (M{y:=.P}) \ supp (M) \ ((supp P) - {c})" apply(nominal_induct M avoiding: y P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::name. x'\(trm{y:=.P},P)") apply(erule exE) @@ -1184,7 +1005,7 @@ shows "supp (M{c:=(x).P}) \ ((supp M) - {c}) \ (supp P)" apply(nominal_induct M avoiding: x P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::coname. x'\(trm{coname:=(x).P},P)") apply(erule exE) @@ -1312,7 +1133,7 @@ shows "supp (M{c:=(x).P}) \ (supp M) \ ((supp P) - {x})" apply(nominal_induct M avoiding: x P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::coname. x'\(trm{coname:=(x).P},P)") apply(erule exE) @@ -1417,7 +1238,7 @@ shows "(supp M - {y}) \ supp (M{y:=.P})" apply(nominal_induct M avoiding: y P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::name. x'\(trm{y:=.P},P)") apply(erule exE) @@ -1484,7 +1305,7 @@ shows "(supp M) \ ((supp (M{y:=.P}))::coname set)" apply(nominal_induct M avoiding: y P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::name. x'\(trm{y:=.P},P)") apply(erule exE) @@ -1551,7 +1372,7 @@ shows "(supp M - {c}) \ supp (M{c:=(x).P})" apply(nominal_induct M avoiding: x P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::coname. x'\(trm{coname:=(x).P},P)") apply(erule exE) @@ -1610,7 +1431,7 @@ shows "(supp M) \ ((supp (M{c:=(x).P}))::name set)" apply(nominal_induct M avoiding: x P c rule: trm.strong_induct) apply(auto) -apply(auto simp add: fresh_def abs_supp trm.supp supp_atm fin_supp) +apply(auto simp: fresh_def abs_supp trm.supp supp_atm fin_supp) apply(blast)+ apply(subgoal_tac "\x'::coname. x'\(trm{coname:=(x).P},P)") apply(erule exE) @@ -1688,7 +1509,7 @@ shows "x\M \ M{x:=.P} = M" and "c\M \ M{c:=(x).P} = M" apply(nominal_induct M avoiding: x c P rule: trm.strong_induct) -apply(auto simp add: fresh_atm abs_fresh abs_supp fin_supp) +apply(auto simp: fresh_atm abs_fresh abs_supp fin_supp) done lemma substc_rename1: @@ -1697,47 +1518,47 @@ using a proof(nominal_induct M avoiding: c a x N rule: trm.strong_induct) case (Ax z d) - then show ?case by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha) + then show ?case by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha) next case NotL - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (NotR y M d) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (AndR c1 M c2 M' c3) then show ?case - apply(auto simp add: fresh_prod calc_atm fresh_atm abs_fresh fresh_left) + apply(auto simp: fresh_prod calc_atm fresh_atm abs_fresh fresh_left) apply (metis (erased, opaque_lifting)) by metis next case AndL1 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case AndL2 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (OrR1 d M e) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (OrR2 d M e) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (OrL x1 M x2 M' x3) then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case ImpL then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) metis next case (ImpR y d M e) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case (Cut d M y M') then show ?case @@ -1752,15 +1573,15 @@ proof(nominal_induct M avoiding: a x y N rule: trm.strong_induct) case (Ax z d) then show ?case - by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) + by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) next case NotL then show ?case - by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) + by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) next case (NotR y M d) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::coname. a'\(N,M{d:=(y).([(y,x)]\N)},[(y,x)]\N)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1771,25 +1592,25 @@ next case (AndR c1 M c2 M' c3) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::coname. a'\(N,M{c3:=(y).([(y,x)]\N)},M'{c3:=(y).([(y,x)]\N)},[(y,x)]\N,c1,c2,c3)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ apply(simp add: fresh_fun_simp_AndR) - apply (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh subst_fresh perm_swap fresh_left) + apply (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh subst_fresh perm_swap fresh_left) apply(rule exists_fresh'(2)[OF fs_coname1]) done next case AndL1 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case AndL2 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case (OrR1 d M e) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::coname. a'\(N,M{e:=(y).([(y,x)]\N)},[(y,x)]\N,d,e)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1800,7 +1621,7 @@ next case (OrR2 d M e) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::coname. a'\(N,M{e:=(y).([(y,x)]\N)},[(y,x)]\N,d,e)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1811,15 +1632,15 @@ next case (OrL x1 M x2 M' x3) then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case ImpL then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case (ImpR y d M e) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::coname. a'\(N,M{e:=(y).([(y,x)]\N)},[(y,x)]\N,d,e)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1830,7 +1651,7 @@ next case (Cut d M y M') then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left perm_swap) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left perm_swap) qed lemma substn_rename3: @@ -1839,32 +1660,32 @@ using a proof(nominal_induct M avoiding: a x y N rule: trm.strong_induct) case (Ax z d) - then show ?case by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha) + then show ?case by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha) next case NotR - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (NotL d M z) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (AndR c1 M c2 M' c3) then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case OrR1 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case OrR2 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (AndL1 u M v) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (AndL2 u M v) then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod) next case (OrL x1 M x2 M' x3) then show ?case @@ -1873,7 +1694,7 @@ next case ImpR then show ?case - by(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_left abs_supp fin_supp fresh_prod) + by(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_left abs_supp fin_supp fresh_prod) next case (ImpL d M v M' u) then show ?case @@ -1882,7 +1703,7 @@ next case (Cut d M y M') then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(drule pt_bij1[OF pt_name_inst, OF at_name_inst]) apply(simp add: calc_atm) apply metis @@ -1896,15 +1717,15 @@ proof(nominal_induct M avoiding: x c a N rule: trm.strong_induct) case (Ax z d) then show ?case - by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) + by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) next case NotR then show ?case - by (auto simp add: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) + by (auto simp: fresh_prod fresh_atm calc_atm trm.inject alpha perm_swap fresh_left) next case (NotL d M y) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::name. a'\(N,M{x:=.([(c,a)]\N)},[(c,a)]\N)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1915,25 +1736,25 @@ next case (OrL x1 M x2 M' x3) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::name. a'\(N,M{x:=.([(c,a)]\N)},M'{x:=.([(c,a)]\N)},[(c,a)]\N,x1,x2,x3)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ apply(simp add: fresh_fun_simp_OrL) - apply (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh subst_fresh perm_swap fresh_left) + apply (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh subst_fresh perm_swap fresh_left) apply(rule exists_fresh'(1)[OF fs_name1]) done next case OrR1 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case OrR2 - then show ?case by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + then show ?case by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case (AndL1 u M v) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::name. a'\(N,M{x:=.([(c,a)]\N)},[(c,a)]\N,u,v)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1944,7 +1765,7 @@ next case (AndL2 u M v) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::name. a'\(N,M{x:=.([(c,a)]\N)},[(c,a)]\N,u,v)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1955,15 +1776,15 @@ next case (AndR c1 M c2 M' c3) then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case ImpR then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) next case (ImpL d M y M' u) then show ?case - apply(auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) + apply(auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left) apply(subgoal_tac "\a'::name. a'\(N,M{u:=.([(c,a)]\N)},M'{u:=.([(c,a)]\N)},[(c,a)]\N,y,u)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -1974,7 +1795,7 @@ next case (Cut d M y M') then show ?case - by (auto simp add: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left perm_swap) + by (auto simp: calc_atm trm.inject alpha fresh_atm abs_fresh fresh_prod fresh_left perm_swap) qed lemma subst_rename5: @@ -2005,9 +1826,9 @@ obtain x'::"name" where fs1: "x'\(M,N,c,P,x,y)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,c,P,a)" by (rule exists_fresh(2), rule fin_supp, blast) have eq1: "(Cut .M (x).N) = (Cut .([(a',a)]\M) (x').([(x',x)]\N))" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) have eq2: "(M=Ax y a) = (([(a',a)]\M)=Ax y a')" - apply(auto simp add: calc_atm) + apply(auto simp: calc_atm) apply(drule pt_bij1[OF pt_coname_inst, OF at_coname_inst]) apply(simp add: calc_atm) done @@ -2015,12 +1836,12 @@ using eq1 by simp also have "\ = (if ([(a',a)]\M)=Ax y a' then Cut .P (x').(([(x',x)]\N){y:=.P}) else Cut .(([(a',a)]\M){y:=.P}) (x').(([(x',x)]\N){y:=.P}))" - using fs1 fs2 by (auto simp add: fresh_prod fresh_left calc_atm fresh_atm) + using fs1 fs2 by (auto simp: fresh_prod fresh_left calc_atm fresh_atm) also have "\ =(if M=Ax y a then Cut .P (x).(N{y:=.P}) else Cut .(M{y:=.P}) (x).(N{y:=.P}))" using fs1 fs2 a apply - apply(simp only: eq2[symmetric]) - apply(auto simp add: trm.inject) + apply(auto simp: trm.inject) apply(simp_all add: alpha fresh_atm fresh_prod subst_fresh) apply(simp_all add: eqvts perm_fresh_fresh calc_atm) apply(auto) @@ -2040,9 +1861,9 @@ obtain x'::"name" where fs1: "x'\(M,N,c,P,x,y)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,c,P,a)" by (rule exists_fresh(2), rule fin_supp, blast) have eq1: "(Cut .M (x).N) = (Cut .([(a',a)]\M) (x').([(x',x)]\N))" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) have eq2: "(N=Ax x c) = (([(x',x)]\N)=Ax x' c)" - apply(auto simp add: calc_atm) + apply(auto simp: calc_atm) apply(drule pt_bij1[OF pt_name_inst, OF at_name_inst]) apply(simp add: calc_atm) done @@ -2055,7 +1876,7 @@ using fs1 fs2 a apply - apply(simp only: eq2[symmetric]) - apply(auto simp add: trm.inject) + apply(auto simp: trm.inject) apply(simp_all add: alpha fresh_atm fresh_prod subst_fresh) apply(simp_all add: eqvts perm_fresh_fresh calc_atm) apply(auto) @@ -2078,7 +1899,7 @@ apply(subgoal_tac"y\([(ca,x)]\N)") apply(simp add: forget) apply(simp add: trm.inject) -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm)[1] +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm)[1] apply(simp add: trm.inject) apply(rule sym) apply(simp add: alpha fresh_prod fresh_atm) @@ -2091,7 +1912,7 @@ apply - apply(generate_fresh "name") apply(subgoal_tac "NotR (x).M d = NotR (c).([(c,x)]\M) d") -apply(auto simp add: fresh_left calc_atm forget) +apply(auto simp: fresh_left calc_atm forget) apply(generate_fresh "coname") apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2107,7 +1928,7 @@ apply - apply(generate_fresh "coname") apply(subgoal_tac "NotL .M y = NotL .([(ca,a)]\M) y") -apply(auto simp add: fresh_left calc_atm forget) +apply(auto simp: fresh_left calc_atm forget) apply(generate_fresh "name") apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2123,7 +1944,7 @@ apply - apply(generate_fresh "name") apply(subgoal_tac "AndL1 (x).M y = AndL1 (ca).([(ca,x)]\M) y") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(generate_fresh "name") apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2148,7 +1969,7 @@ apply - apply(generate_fresh "name") apply(subgoal_tac "AndL2 (x).M y = AndL2 (ca).([(ca,x)]\M) y") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(generate_fresh "name") apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2174,12 +1995,12 @@ apply(generate_fresh "coname") apply(generate_fresh "coname") apply(subgoal_tac "AndR .M .N c = AndR .([(ca,a)]\M) .([(caa,b)]\N) c") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule trans) apply(rule substc.simps) -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm)[1] -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm)[1] -apply(auto simp add: fresh_prod fresh_atm)[1] +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm)[1] +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm)[1] +apply(auto simp: fresh_prod fresh_atm)[1] apply(simp) apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2187,9 +2008,9 @@ apply(simp add: trm.inject alpha fresh_prod fresh_atm) apply(rule conjI) apply(rule forget) -apply(auto simp add: fresh_left calc_atm abs_fresh)[1] +apply(auto simp: fresh_left calc_atm abs_fresh)[1] apply(rule forget) -apply(auto simp add: fresh_left calc_atm abs_fresh)[1] +apply(auto simp: fresh_left calc_atm abs_fresh)[1] apply(perm_simp add: trm.inject alpha fresh_left calc_atm fresh_prod fresh_atm) apply(auto) done @@ -2202,12 +2023,12 @@ apply(generate_fresh "name") apply(generate_fresh "name") apply(subgoal_tac "OrL (y).M (z).N x = OrL (ca).([(ca,y)]\M) (caa).([(caa,z)]\N) x") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule trans) apply(rule substn.simps) -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm)[1] -apply(auto simp add: fresh_left calc_atm fresh_prod fresh_atm)[1] -apply(auto simp add: fresh_prod fresh_atm)[1] +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm)[1] +apply(auto simp: fresh_left calc_atm fresh_prod fresh_atm)[1] +apply(auto simp: fresh_prod fresh_atm)[1] apply(simp) apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) @@ -2215,9 +2036,9 @@ apply(simp add: trm.inject alpha fresh_prod fresh_atm) apply(rule conjI) apply(rule forget) -apply(auto simp add: fresh_left calc_atm abs_fresh)[1] +apply(auto simp: fresh_left calc_atm abs_fresh)[1] apply(rule forget) -apply(auto simp add: fresh_left calc_atm abs_fresh)[1] +apply(auto simp: fresh_left calc_atm abs_fresh)[1] apply(perm_simp add: trm.inject alpha fresh_left calc_atm fresh_prod fresh_atm) apply(auto) done @@ -2229,7 +2050,7 @@ apply - apply(generate_fresh "coname") apply(subgoal_tac "OrR1 .M d = OrR1 .([(c,a)]\M) d") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) apply(rule allI) @@ -2253,7 +2074,7 @@ apply - apply(generate_fresh "coname") apply(subgoal_tac "OrR2 .M d = OrR2 .([(c,a)]\M) d") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) apply(rule allI) @@ -2278,7 +2099,7 @@ apply(generate_fresh "coname") apply(generate_fresh "name") apply(subgoal_tac "ImpR (x)..M d = ImpR (ca)..([(c,a)]\[(ca,x)]\M) d") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) apply(rule allI) @@ -2303,7 +2124,7 @@ apply(generate_fresh "coname") apply(generate_fresh "name") apply(subgoal_tac "ImpL .M (x).N y = ImpL .([(ca,a)]\M) (caa).([(caa,x)]\N) y") -apply(auto simp add: fresh_left calc_atm forget abs_fresh)[1] +apply(auto simp: fresh_left calc_atm forget abs_fresh)[1] apply(rule_tac f="fresh_fun" in arg_cong) apply(simp add: fun_eq_iff) apply(rule allI) @@ -2357,7 +2178,7 @@ shows "M{x:=.P}[a\c>b] = M[a\c>b]{x:=.(P[a\c>b])}" using a apply(nominal_induct M avoiding: x c P a b rule: trm.strong_induct) -apply(auto simp add: subst_fresh rename_fresh trm.inject) +apply(auto simp: subst_fresh rename_fresh trm.inject) apply(subgoal_tac "\x'::name. x'\(P,x,c)") apply(erule exE) apply(subgoal_tac "Cut .P (x).Ax x a = Cut .P (x').Ax x' a") @@ -2381,11 +2202,11 @@ apply(rule better_crename_Cut) apply(simp add: fresh_atm fresh_prod) apply(simp add: rename_fresh fresh_atm) -apply(auto simp add: fresh_atm)[1] +apply(auto simp: fresh_atm)[1] apply(rule trans) apply(rule better_crename_Cut) apply(simp add: fresh_atm) -apply(auto simp add: fresh_atm)[1] +apply(auto simp: fresh_atm)[1] apply(drule crename_ax) apply(simp add: fresh_atm) apply(simp add: fresh_atm) @@ -2449,7 +2270,7 @@ shows "M{c:=(x).P}[a\c>b] = M[a\c>b]{c:=(x).(P[a\c>b])}" using a apply(nominal_induct M avoiding: x c P a b rule: trm.strong_induct) -apply(auto simp add: subst_fresh rename_fresh trm.inject) +apply(auto simp: subst_fresh rename_fresh trm.inject) apply(rule trans) apply(rule better_crename_Cut) apply(simp add: fresh_atm fresh_prod) @@ -2523,7 +2344,7 @@ shows "M{x:=.P}[y\n>z] = M[y\n>z]{x:=.(P[y\n>z])}" using a apply(nominal_induct M avoiding: x c P y z rule: trm.strong_induct) -apply(auto simp add: subst_fresh rename_fresh trm.inject) +apply(auto simp: subst_fresh rename_fresh trm.inject) apply(rule trans) apply(rule better_nrename_Cut) apply(simp add: fresh_prod fresh_atm) @@ -2595,7 +2416,7 @@ shows "M{c:=(x).P}[y\n>z] = M[y\n>z]{c:=(x).(P[y\n>z])}" using a apply(nominal_induct M avoiding: x c P y z rule: trm.strong_induct) -apply(auto simp add: subst_fresh rename_fresh trm.inject) +apply(auto simp: subst_fresh rename_fresh trm.inject) apply(rule trans) apply(rule better_nrename_Cut) apply(simp add: fresh_atm fresh_prod) @@ -2865,9 +2686,9 @@ and \::"ctxtc" shows "a\\" and "x\\" proof - - show "a\\" by (induct \) (auto simp add: fresh_list_nil fresh_list_cons fresh_prod fresh_atm fresh_ty) -next - show "x\\" by (induct \) (auto simp add: fresh_list_nil fresh_list_cons fresh_prod fresh_atm fresh_ty) + show "a\\" by (induct \) (auto simp: fresh_list_nil fresh_list_cons fresh_prod fresh_atm fresh_ty) +next + show "x\\" by (induct \) (auto simp: fresh_list_nil fresh_list_cons fresh_prod fresh_atm fresh_ty) qed text \cut-reductions\ @@ -2891,7 +2712,7 @@ shows "x=y" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fin_NotL_elim: @@ -2899,7 +2720,7 @@ shows "x=y \ x\M" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) apply(subgoal_tac "y\[aa].Ma") apply(drule sym) apply(simp_all add: abs_fresh) @@ -2910,7 +2731,7 @@ shows "z=y \ z\[x].M" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fin_AndL2_elim: @@ -2918,7 +2739,7 @@ shows "z=y \ z\[x].M" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fin_OrL_elim: @@ -2926,7 +2747,7 @@ shows "z=u \ z\[x].M \ z\[y].N" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fin_ImpL_elim: @@ -2934,7 +2755,7 @@ shows "z=y \ z\M \ z\[x].N" using a apply(erule_tac fin.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) apply(subgoal_tac "y\[aa].Ma") apply(drule sym) apply(simp_all add: abs_fresh) @@ -2957,7 +2778,7 @@ lemma fin_rename: shows "fin M x \ fin ([(x',x)]\M) x'" by (induct rule: fin.induct) - (auto simp add: calc_atm simp add: fresh_left abs_fresh) + (auto simp: calc_atm simp add: fresh_left abs_fresh) lemma not_fin_subst1: assumes a: "\(fin M x)" @@ -2995,13 +2816,13 @@ apply(rule exists_fresh'(2)[OF fs_coname1]) apply(erule fin.cases, simp_all add: trm.inject) apply(drule fin_AndL1_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substc) apply(subgoal_tac "name2\[name1]. trm") apply(simp add: fin.intros) apply(simp add: abs_fresh) apply(drule fin_AndL2_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substc) apply(subgoal_tac "name2\[name1].trm") apply(simp add: fin.intros) @@ -3023,7 +2844,7 @@ apply(rule exists_fresh'(2)[OF fs_coname1]) apply(erule fin.cases, simp_all add: trm.inject) apply(drule fin_OrL_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substc)+ apply(subgoal_tac "name3\[name1].trm1 \ name3\[name2].trm2") apply(simp add: fin.intros) @@ -3037,7 +2858,7 @@ apply(rule exists_fresh'(2)[OF fs_coname1]) apply(erule fin.cases, simp_all add: trm.inject) apply(drule fin_ImpL_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substc)+ apply(subgoal_tac "x\[name1].trm2") apply(simp add: fin.intros) @@ -3075,7 +2896,7 @@ apply(erule fin.cases, simp_all add: trm.inject) apply(rule exists_fresh'(1)[OF fs_name1]) apply(drule fin_AndL1_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substn) apply(simp) apply(subgoal_tac "name2\[name1]. trm") @@ -3089,7 +2910,7 @@ apply(erule fin.cases, simp_all add: trm.inject) apply(rule exists_fresh'(1)[OF fs_name1]) apply(drule fin_AndL2_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substn) apply(simp) apply(subgoal_tac "name2\[name1].trm") @@ -3105,7 +2926,7 @@ apply(erule fin.cases, simp_all add: trm.inject) apply(rule exists_fresh'(1)[OF fs_name1]) apply(drule fin_OrL_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substn) apply(simp) apply(drule freshn_after_substn) @@ -3122,7 +2943,7 @@ apply(erule fin.cases, simp_all add: trm.inject) apply(rule exists_fresh'(1)[OF fs_name1]) apply(drule fin_ImpL_elim) -apply(auto simp add: abs_fresh)[1] +apply(auto simp: abs_fresh)[1] apply(drule freshn_after_substn) apply(simp) apply(drule freshn_after_substn) @@ -3315,7 +3136,7 @@ shows "a=b" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fic_NotR_elim: @@ -3323,7 +3144,7 @@ shows "a=b \ b\M" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) apply(subgoal_tac "b\[xa].Ma") apply(drule sym) apply(simp_all add: abs_fresh) @@ -3334,7 +3155,7 @@ shows "b=c \ c\[a].M" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fic_OrR2_elim: @@ -3342,7 +3163,7 @@ shows "b=c \ c\[a].M" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fic_AndR_elim: @@ -3350,7 +3171,7 @@ shows "c=d \ d\[a].M \ d\[b].N" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) done lemma fic_ImpR_elim: @@ -3358,7 +3179,7 @@ shows "b=c \ b\[a].M" using a apply(erule_tac fic.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) apply(subgoal_tac "c\[xa].[aa].Ma") apply(drule sym) apply(simp_all add: abs_fresh) @@ -3379,7 +3200,7 @@ lemma fic_rename: shows "fic M a \ fic ([(a',a)]\M) a'" by (induct rule: fic.induct) - (auto simp add: calc_atm simp add: fresh_left abs_fresh) + (auto simp: calc_atm simp add: fresh_left abs_fresh) lemma not_fic_subst1: assumes a: "\(fic M a)" @@ -3734,13 +3555,13 @@ and "M \\<^sub>l M' \ a\M \ a\M'" apply - apply(induct rule: l_redu.induct) -apply(auto simp add: abs_fresh rename_fresh) +apply(auto simp: abs_fresh rename_fresh) apply(case_tac "xa=x") apply(simp add: rename_fresh) apply(simp add: rename_fresh fresh_atm) apply(simp add: fresh_prod abs_fresh abs_supp fin_supp)+ apply(induct rule: l_redu.induct) -apply(auto simp add: abs_fresh rename_fresh) +apply(auto simp: abs_fresh rename_fresh) apply(case_tac "aa=a") apply(simp add: rename_fresh) apply(simp add: rename_fresh fresh_atm) @@ -3754,7 +3575,7 @@ obtain x'::"name" where fs1: "x'\(M,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(a,M,b)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .M (x).(Ax x b) = Cut .([(a',a)]\M) (x').(Ax x' b)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>l ([(a',a)]\M)[a'\c>b]" using fs1 fs2 fin by (auto intro: l_redu.intros simp add: fresh_left calc_atm fic_rename) also have "\ = M[a\c>b]" using fs1 fs2 by (simp add: crename_rename) @@ -3768,7 +3589,7 @@ obtain x'::"name" where fs1: "x'\(y,M,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(a,M)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .(Ax y a) (x).M = Cut .(Ax y a') (x').([(x',x)]\M)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>l ([(x',x)]\M)[x'\n>y]" using fs1 fs2 fin by (auto intro: l_redu.intros simp add: fresh_left calc_atm fin_rename) also have "\ = M[x\n>y]" using fs1 fs2 by (simp add: nrename_rename) @@ -3786,17 +3607,17 @@ have "Cut .(NotR (x).M a) (y).(NotL .N y) = Cut .(NotR (x).([(a',a)]\M) a') (y').(NotL .([(y',y)]\N) y')" using f1 f2 f3 f4 - by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm abs_fresh) + by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm abs_fresh) also have "\ = Cut .(NotR (x).M a') (y').(NotL .N y')" using f1 f2 f3 f4 fs by (perm_simp) also have "\ = Cut .(NotR (x').([(x',x)]\M) a') (y').(NotL .([(b',b)]\N) y')" using f1 f2 f3 f4 - by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>l Cut .([(b',b)]\N) (x').([(x',x)]\M)" using f1 f2 f3 f4 fs by (auto intro: l_redu.intros simp add: fresh_prod fresh_left calc_atm fresh_atm) also have "\ = Cut .N (x).M" - using f1 f2 f3 f4 by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using f1 f2 f3 f4 by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) finally show ?thesis by simp qed @@ -3815,7 +3636,7 @@ using f1 f2 f3 f4 fs apply(rule_tac sym) apply(perm_simp add: trm.inject alpha calc_atm fresh_prod fresh_left fresh_atm abs_fresh) - apply(auto simp add: perm_fresh_fresh) + apply(auto simp: perm_fresh_fresh) done also have "\ = Cut .(AndR .([(b1',b1)]\M1) .([(b2',b2)]\M2) a') (y').(AndL1 (x').([(x',x)]\N) y')" @@ -3827,10 +3648,10 @@ using f1 f2 f3 f4 f5 fs apply - apply(rule l_redu.intros) - apply(auto simp add: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) + apply(auto simp: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) done also have "\ = Cut .M1 (x).N" - using f1 f2 f3 f4 f5 fs by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using f1 f2 f3 f4 f5 fs by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) finally show ?thesis by simp qed @@ -3849,7 +3670,7 @@ using f1 f2 f3 f4 fs apply(rule_tac sym) apply(perm_simp add: trm.inject alpha calc_atm fresh_prod fresh_left fresh_atm abs_fresh) - apply(auto simp add: perm_fresh_fresh) + apply(auto simp: perm_fresh_fresh) done also have "\ = Cut .(AndR .([(b1',b1)]\M1) .([(b2',b2)]\M2) a') (y').(AndL2 (x').([(x',x)]\N) y')" @@ -3861,10 +3682,10 @@ using f1 f2 f3 f4 f5 fs apply - apply(rule l_redu.intros) - apply(auto simp add: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) + apply(auto simp: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) done also have "\ = Cut .M2 (x).N" - using f1 f2 f3 f4 f5 fs by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using f1 f2 f3 f4 f5 fs by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) finally show ?thesis by simp qed @@ -3883,7 +3704,7 @@ using f1 f2 f3 f4 f5 fs apply(rule_tac sym) apply(perm_simp add: trm.inject alpha calc_atm fresh_prod fresh_left fresh_atm abs_fresh) - apply(auto simp add: perm_fresh_fresh) + apply(auto simp: perm_fresh_fresh) done also have "\ = Cut .(OrR1 .([(a',a)]\M) b') (y').(OrL (x1').([(x1',x1)]\N1) (x2').([(x2',x2)]\N2) y')" @@ -3895,10 +3716,10 @@ using f1 f2 f3 f4 f5 fs apply - apply(rule l_redu.intros) - apply(auto simp add: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) + apply(auto simp: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) done also have "\ = Cut .M (x1).N1" - using f1 f2 f3 f4 f5 fs by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using f1 f2 f3 f4 f5 fs by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) finally show ?thesis by simp qed @@ -3917,7 +3738,7 @@ using f1 f2 f3 f4 f5 fs apply(rule_tac sym) apply(perm_simp add: trm.inject alpha calc_atm fresh_prod fresh_left fresh_atm abs_fresh) - apply(auto simp add: perm_fresh_fresh) + apply(auto simp: perm_fresh_fresh) done also have "\ = Cut .(OrR2 .([(a',a)]\M) b') (y').(OrL (x1').([(x1',x1)]\N1) (x2').([(x2',x2)]\N2) y')" @@ -3929,10 +3750,10 @@ using f1 f2 f3 f4 f5 fs apply - apply(rule l_redu.intros) - apply(auto simp add: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) + apply(auto simp: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) done also have "\ = Cut .M (x2).N2" - using f1 f2 f3 f4 f5 fs by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using f1 f2 f3 f4 f5 fs by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) finally show ?thesis by simp qed @@ -3952,7 +3773,7 @@ using f1 f2 f3 f4 f5 fs apply(rule_tac sym) apply(perm_simp add: trm.inject alpha calc_atm fresh_prod fresh_left fresh_atm abs_fresh) - apply(auto simp add: perm_fresh_fresh) + apply(auto simp: perm_fresh_fresh) done also have "\ = Cut .(ImpR (x')..([(a',a)]\([(x',x)]\M)) b') (z').(ImpL .([(c',c)]\N) (y').([(y',y)]\P) z')" @@ -3973,7 +3794,7 @@ using f1 f2 f3 f4 f5 f6 fs apply - apply(rule l_redu.intros) - apply(auto simp add: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) + apply(auto simp: abs_fresh fresh_prod fresh_left calc_atm fresh_atm) done also have "\ = Cut .(Cut .N (x).M) (y).P" using f1 f2 f3 f4 f5 f6 fs @@ -3986,7 +3807,7 @@ apply(simp add: fresh_prod fresh_atm) apply(rule conjI) apply(perm_simp add: calc_atm) - apply(auto simp add: fresh_prod fresh_atm)[1] + apply(auto simp: fresh_prod fresh_atm)[1] apply(perm_simp add: alpha) apply(perm_simp add: alpha) apply(perm_simp add: alpha) @@ -4007,7 +3828,7 @@ assumes a: "[a].M = [b].N" "c\(a,b,M,N)" shows "M = [(a,c)]\[(b,c)]\N" using a -apply(auto simp add: alpha_fresh fresh_prod fresh_atm) +apply(auto simp: alpha_fresh fresh_prod fresh_atm) apply(drule sym) apply(perm_simp) done @@ -4018,7 +3839,7 @@ assumes a: "[x].M = [y].N" "z\(x,y,M,N)" shows "M = [(x,z)]\[(y,z)]\N" using a -apply(auto simp add: alpha_fresh fresh_prod fresh_atm) +apply(auto simp: alpha_fresh fresh_prod fresh_atm) apply(drule sym) apply(perm_simp) done @@ -4030,7 +3851,7 @@ assumes a: "[x].[b].M = [y].[c].N" "z\(x,y,M,N)" "a\(b,c,M,N)" shows "M = [(x,z)]\[(b,a)]\[(c,a)]\[(y,z)]\N" using a -apply(auto simp add: alpha_fresh fresh_prod fresh_atm +apply(auto simp: alpha_fresh fresh_prod fresh_atm abs_supp fin_supp abs_fresh abs_perm fresh_left calc_atm) apply(drule sym) apply(simp) @@ -4099,7 +3920,7 @@ apply(rule exI)+ apply(rule conjI) apply(rule refl) -apply(auto simp add: calc_atm abs_fresh fresh_left)[1] +apply(auto simp: calc_atm abs_fresh fresh_left)[1] apply(case_tac "y=x") apply(perm_simp) apply(perm_simp) @@ -4136,7 +3957,7 @@ apply(rule_tac s="x" and t="[(x,ca)]\[(y,ca)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh split: if_splits)[1] apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) apply(auto)[1] @@ -4148,7 +3969,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4161,7 +3982,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4174,7 +3995,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ (* and2 case *) apply(rule disjI2) @@ -4206,7 +4027,7 @@ apply(rule_tac s="x" and t="[(x,ca)]\[(y,ca)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh split: if_splits)[1] apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) apply(auto)[1] @@ -4218,7 +4039,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4231,7 +4052,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4244,7 +4065,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ (* or1 case *) apply(rule disjI2) @@ -4278,7 +4099,7 @@ apply(rule_tac s="x" and t="[(x,ca)]\[(y,ca)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4292,7 +4113,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ (* or2 case *) apply(rule disjI2) @@ -4326,7 +4147,7 @@ apply(rule_tac s="x" and t="[(x,ca)]\[(y,ca)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4339,7 +4160,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(y,cb)]\y" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ (* imp-case *) apply(rule disjI2) @@ -4373,7 +4194,7 @@ apply(rule_tac s="x" and t="[(x,cb)]\[(z,cb)]\z" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ apply(generate_fresh "name") apply(simp add: abs_fresh fresh_prod fresh_atm) @@ -4386,7 +4207,7 @@ apply(rule_tac s="x" and t="[(x,cc)]\[(z,cc)]\z" in subst) apply(simp add: calc_atm) apply(rule refl) -apply(auto simp add: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] +apply(auto simp: fresh_left calc_atm abs_fresh alpha perm_fresh_fresh split: if_splits)[1] apply(perm_simp)+ done @@ -4408,7 +4229,7 @@ obtain x'::"name" where fs1: "x'\(N,M,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(a,M,N)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .M (x).N = Cut .([(a',a)]\M) (x').([(x',x)]\N)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>c ([(a',a)]\M){a':=(x').([(x',x)]\N)}" using fs1 fs2 not_fic apply - apply(rule left) @@ -4429,7 +4250,7 @@ obtain x'::"name" where fs1: "x'\(N,M,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(a,M,N)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .M (x).N = Cut .([(a',a)]\M) (x').([(x',x)]\N)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>c ([(x',x)]\N){x':=.([(a',a)]\M)}" using fs1 fs2 not_fin apply - apply(rule right) @@ -4450,9 +4271,9 @@ and "M \\<^sub>c M' \ c\M \ c\M'" apply - apply(induct rule: c_redu.induct) -apply(auto simp add: abs_fresh rename_fresh subst_fresh) +apply(auto simp: abs_fresh rename_fresh subst_fresh) apply(induct rule: c_redu.induct) -apply(auto simp add: abs_fresh rename_fresh subst_fresh) +apply(auto simp: abs_fresh rename_fresh subst_fresh) done inductive @@ -4485,11 +4306,11 @@ apply(induct rule: a_redu.induct) apply(simp add: fresh_l_redu) apply(simp add: fresh_c_redu) -apply(auto simp add: abs_fresh abs_supp fin_supp) +apply(auto simp: abs_fresh abs_supp fin_supp) apply(induct rule: a_redu.induct) apply(simp add: fresh_l_redu) apply(simp add: fresh_c_redu) -apply(auto simp add: abs_fresh abs_supp fin_supp) +apply(auto simp: abs_fresh abs_supp fin_supp) done equivariance a_redu @@ -4504,11 +4325,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .M (x).N = Cut .([(a',a)]\M) (x').([(x',x)]\N)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a Cut .([(a',a)]\M') (x').([(x',x)]\N)" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt) also have "\ = Cut .M' (x).N" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4519,11 +4340,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "Cut .M (x).N = Cut .([(a',a)]\M) (x').([(x',x)]\N)" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a Cut .([(a',a)]\M) (x').([(x',x)]\N')" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt) also have "\ = Cut .M (x).N'" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4534,11 +4355,11 @@ obtain b'::"coname" where fs1: "b'\(M,N,a,b,c)" by (rule exists_fresh(2), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a,b,c,b')" by (rule exists_fresh(2), rule fin_supp, blast) have "AndR .M .N c = AndR .([(a',a)]\M) .([(b',b)]\N) c" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a AndR .([(a',a)]\M') .([(b',b)]\N) c" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = AndR .M' .N c" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4549,11 +4370,11 @@ obtain b'::"coname" where fs1: "b'\(M,N,a,b,c)" by (rule exists_fresh(2), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a,b,c,b')" by (rule exists_fresh(2), rule fin_supp, blast) have "AndR .M .N c = AndR .([(a',a)]\M) .([(b',b)]\N) c" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a AndR .([(a',a)]\M) .([(b',b)]\N') c" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = AndR .M .N' c" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4563,11 +4384,11 @@ assume red: "M\\<^sub>a M'" obtain x'::"name" where fs1: "x'\(M,y,x)" by (rule exists_fresh(1), rule fin_supp, blast) have "AndL1 (x).M y = AndL1 (x').([(x',x)]\M) y" - using fs1 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a AndL1 (x').([(x',x)]\M') y" using fs1 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = AndL1 (x).M' y" - using fs1 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4577,11 +4398,11 @@ assume red: "M\\<^sub>a M'" obtain x'::"name" where fs1: "x'\(M,y,x)" by (rule exists_fresh(1), rule fin_supp, blast) have "AndL2 (x).M y = AndL2 (x').([(x',x)]\M) y" - using fs1 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a AndL2 (x').([(x',x)]\M') y" using fs1 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = AndL2 (x).M' y" - using fs1 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4592,11 +4413,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x,y,z)" by (rule exists_fresh(1), rule fin_supp, blast) obtain y'::"name" where fs2: "y'\(M,N,x,y,z,x')" by (rule exists_fresh(1), rule fin_supp, blast) have "OrL (x).M (y).N z = OrL (x').([(x',x)]\M) (y').([(y',y)]\N) z" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a OrL (x').([(x',x)]\M') (y').([(y',y)]\N) z" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = OrL (x).M' (y).N z" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4607,11 +4428,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x,y,z)" by (rule exists_fresh(1), rule fin_supp, blast) obtain y'::"name" where fs2: "y'\(M,N,x,y,z,x')" by (rule exists_fresh(1), rule fin_supp, blast) have "OrL (x).M (y).N z = OrL (x').([(x',x)]\M) (y').([(y',y)]\N) z" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a OrL (x').([(x',x)]\M) (y').([(y',y)]\N') z" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = OrL (x).M (y).N' z" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4621,11 +4442,11 @@ assume red: "M\\<^sub>a M'" obtain a'::"coname" where fs1: "a'\(M,b,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "OrR1 .M b = OrR1 .([(a',a)]\M) b" - using fs1 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a OrR1 .([(a',a)]\M') b" using fs1 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = OrR1 .M' b" - using fs1 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4635,11 +4456,11 @@ assume red: "M\\<^sub>a M'" obtain a'::"coname" where fs1: "a'\(M,b,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "OrR2 .M b = OrR2 .([(a',a)]\M) b" - using fs1 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a OrR2 .([(a',a)]\M') b" using fs1 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = OrR2 .M' b" - using fs1 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4650,11 +4471,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x,y)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "ImpL .M (x).N y = ImpL .([(a',a)]\M) (x').([(x',x)]\N) y" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a ImpL .([(a',a)]\M') (x').([(x',x)]\N) y" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = ImpL .M' (x).N y" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4665,11 +4486,11 @@ obtain x'::"name" where fs1: "x'\(M,N,x,y)" by (rule exists_fresh(1), rule fin_supp, blast) obtain a'::"coname" where fs2: "a'\(M,N,a)" by (rule exists_fresh(2), rule fin_supp, blast) have "ImpL .M (x).N y = ImpL .([(a',a)]\M) (x').([(x',x)]\N) y" - using fs1 fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs1 fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a ImpL .([(a',a)]\M) (x').([(x',x)]\N') y" using fs1 fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = ImpL .M (x).N' y" - using fs1 fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs1 fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4679,11 +4500,11 @@ assume red: "M\\<^sub>a M'" obtain a'::"coname" where fs2: "a'\(M,a,b)" by (rule exists_fresh(2), rule fin_supp, blast) have "ImpR (x)..M b = ImpR (x)..([(a',a)]\M) b" - using fs2 by (rule_tac sym, auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm) + using fs2 by (rule_tac sym, auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm) also have "\ \\<^sub>a ImpR (x)..([(a',a)]\M') b" using fs2 red by (auto intro: a_redu.intros simp add: fresh_left calc_atm a_redu.eqvt fresh_atm fresh_prod) also have "\ = ImpR (x)..M' b" - using fs2 red by (auto simp add: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) + using fs2 red by (auto simp: trm.inject alpha fresh_atm fresh_prod calc_atm fresh_a_redu) finally show ?thesis by simp qed @@ -4700,7 +4521,7 @@ lemma ax_do_not_a_reduce: shows "Ax x a \\<^sub>a M \ False" apply(erule_tac a_redu.cases) -apply(auto simp add: trm.inject) +apply(auto simp: trm.inject) apply(drule ax_do_not_l_reduce) apply(simp) apply(drule ax_do_not_c_reduce) @@ -4719,12 +4540,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -4740,12 +4561,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -4761,81 +4582,81 @@ apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(b,ba)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rotate_tac 6) apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(b,ba)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,ba)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(b,baa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] done lemma a_redu_AndL1_elim: @@ -4850,12 +4671,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -4871,12 +4692,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -4892,81 +4713,81 @@ apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(y,ya)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rotate_tac 6) apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(x,xa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(x,xaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(y,ya)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,ya)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,yaa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] done lemma a_redu_OrR1_elim: @@ -4981,12 +4802,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -5002,12 +4823,12 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt) +apply(auto simp: alpha a_redu.eqvt) apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu) apply(simp add: perm_swap) done @@ -5023,81 +4844,81 @@ apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rotate_tac 5) apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) apply(rule disjI1) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(a,aaa)]\M')" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule disjI2) -apply(auto simp add: alpha a_redu.eqvt)[1] +apply(auto simp: alpha a_redu.eqvt)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] apply(rule_tac x="([(y,xa)]\N'a)" in exI) -apply(auto simp add: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] +apply(auto simp: perm_swap fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu)[1] done lemma a_redu_ImpR_elim: @@ -5112,43 +4933,43 @@ apply(erule_tac a_redu.cases, simp_all add: trm.inject) apply(erule_tac l_redu.cases, simp_all add: trm.inject) apply(erule_tac c_redu.cases, simp_all add: trm.inject) -apply(auto simp add: alpha a_redu.eqvt abs_perm abs_fresh) +apply(auto simp: alpha a_redu.eqvt abs_perm abs_fresh) apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(a,aa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(a,aaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(a,aa)]\[(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule sym) apply(rule trans) apply(rule perm_compose) apply(simp add: calc_atm perm_swap) apply(rule_tac x="([(a,aaa)]\[(x,xa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule sym) apply(rule trans) apply(rule perm_compose) apply(simp add: calc_atm perm_swap) apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule_tac x="([(a,aa)]\[(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule sym) apply(rule trans) apply(rule perm_compose) apply(simp add: calc_atm perm_swap) apply(rule_tac x="([(a,aaa)]\[(x,xaa)]\M'a)" in exI) -apply(auto simp add: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) +apply(auto simp: fresh_left alpha a_redu.eqvt calc_atm fresh_a_redu perm_swap) apply(rule sym) apply(rule trans) apply(rule perm_compose) @@ -5301,7 +5122,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_AndR_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_AndL1_elim: @@ -5311,7 +5132,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_AndL1_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_AndL2_elim: @@ -5321,7 +5142,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_AndL2_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_OrL_elim: @@ -5331,7 +5152,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_OrL_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_OrR1_elim: @@ -5341,7 +5162,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_OrR1_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_OrR2_elim: @@ -5351,7 +5172,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_OrR2_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_ImpR_elim: @@ -5361,7 +5182,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_ImpR_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done lemma a_star_redu_ImpL_elim: @@ -5371,7 +5192,7 @@ apply(induct set: rtranclp) apply(auto) apply(drule a_redu_ImpL_elim) -apply(auto simp add: alpha trm.inject) +apply(auto simp: alpha trm.inject) done text \Substitution\ @@ -5701,7 +5522,7 @@ shows "fin M' x" using b a apply(induct set: rtranclp) -apply(auto simp add: fin_a_reduce) +apply(auto simp: fin_a_reduce) done lemma fic_l_reduce: @@ -5767,7 +5588,7 @@ shows "fic M' x" using b a apply(induct set: rtranclp) -apply(auto simp add: fic_a_reduce) +apply(auto simp: fic_a_reduce) done text \substitution properties\ @@ -5882,7 +5703,7 @@ apply(simp add: abs_fresh) done also have "\ = AndL1 (u).(M{x:=.Ax y a}) y" using fs new - by (auto simp add: fresh_prod fresh_atm nrename_fresh) + by (auto simp: fresh_prod fresh_atm nrename_fresh) also have "\ \\<^sub>a* AndL1 (u).(M[x\n>y]) y" using ih by (auto intro: a_star_congs) also have "\ = (AndL1 (u).M v)[x\n>y]" using eq fs by simp finally show "(AndL1 (u).M v){x:=.Ax y a} \\<^sub>a* (AndL1 (u).M v)[x\n>y]" by simp @@ -5916,7 +5737,7 @@ apply(simp add: abs_fresh) done also have "\ = AndL2 (u).(M{x:=.Ax y a}) y" using fs new - by (auto simp add: fresh_prod fresh_atm nrename_fresh) + by (auto simp: fresh_prod fresh_atm nrename_fresh) also have "\ \\<^sub>a* AndL2 (u).(M[x\n>y]) y" using ih by (auto intro: a_star_congs) also have "\ = (AndL2 (u).M v)[x\n>y]" using eq fs by simp finally show "(AndL2 (u).M v){x:=.Ax y a} \\<^sub>a* (AndL2 (u).M v)[x\n>y]" by simp @@ -5966,7 +5787,7 @@ apply(simp_all add: abs_fresh) done also have "\ = OrL (u).(M{x:=.Ax y a}) (v).(N{x:=.Ax y a}) y" using fs new - by (auto simp add: fresh_prod fresh_atm nrename_fresh subst_fresh) + by (auto simp: fresh_prod fresh_atm nrename_fresh subst_fresh) also have "\ \\<^sub>a* OrL (u).(M[x\n>y]) (v).(N[x\n>y]) y" using ih1 ih2 by (auto intro: a_star_congs) also have "\ = (OrL (u).M (v).N z)[x\n>y]" using eq fs by simp @@ -6012,7 +5833,7 @@ apply(simp_all add: abs_fresh) done also have "\ = ImpL .(M{x:=.Ax y a}) (u).(N{x:=.Ax y a}) y" using fs new - by (auto simp add: fresh_prod subst_fresh fresh_atm trm.inject alpha rename_fresh) + by (auto simp: fresh_prod subst_fresh fresh_atm trm.inject alpha rename_fresh) also have "\ \\<^sub>a* ImpL .(M[x\n>y]) (u).(N[x\n>y]) y" using ih1 ih2 by (auto intro: a_star_congs) also have "\ = (ImpL .M (u).N v)[x\n>y]" using eq fs by simp @@ -6132,7 +5953,7 @@ apply(simp_all add: abs_fresh) done also have "\ = AndR .(M{b:=(x).Ax x a}) .(N{b:=(x).Ax x a}) a" using fs new - by (auto simp add: fresh_prod fresh_atm subst_fresh crename_fresh) + by (auto simp: fresh_prod fresh_atm subst_fresh crename_fresh) also have "\ \\<^sub>a* AndR .(M[b\c>a]) .(N[b\c>a]) a" using ih1 ih2 by (auto intro: a_star_congs) also have "\ = (AndR .M .N e)[b\c>a]" using eq fs by simp finally show "(AndR .M .N e){b:=(x).Ax x a} \\<^sub>a* (AndR .M .N e)[b\c>a]" by simp @@ -6182,7 +6003,7 @@ apply(simp_all add: abs_fresh) done also have "\ = OrR1 .M{b:=(x).Ax x a} a" using fs new - by (auto simp add: fresh_prod fresh_atm crename_fresh subst_fresh) + by (auto simp: fresh_prod fresh_atm crename_fresh subst_fresh) also have "\ \\<^sub>a* OrR1 .(M[b\c>a]) a" using ih by (auto intro: a_star_congs) also have "\ = (OrR1 .M d)[b\c>a]" using eq fs by simp finally show "(OrR1 .M d){b:=(x).Ax x a} \\<^sub>a* (OrR1 .M d)[b\c>a]" by simp @@ -6216,7 +6037,7 @@ apply(simp_all add: abs_fresh) done also have "\ = OrR2 .M{b:=(x).Ax x a} a" using fs new - by (auto simp add: fresh_prod fresh_atm crename_fresh subst_fresh) + by (auto simp: fresh_prod fresh_atm crename_fresh subst_fresh) also have "\ \\<^sub>a* OrR2 .(M[b\c>a]) a" using ih by (auto intro: a_star_congs) also have "\ = (OrR2 .M d)[b\c>a]" using eq fs by simp finally show "(OrR2 .M d){b:=(x).Ax x a} \\<^sub>a* (OrR2 .M d)[b\c>a]" by simp @@ -6259,7 +6080,7 @@ apply(simp_all add: abs_fresh) done also have "\ = ImpR z..M{b:=(x).Ax x a} a" using fs new - by (auto simp add: fresh_prod crename_fresh subst_fresh fresh_atm) + by (auto simp: fresh_prod crename_fresh subst_fresh fresh_atm) also have "\ \\<^sub>a* ImpR z..(M[b\c>a]) a" using ih by (auto intro: a_star_congs) also have "\ = (ImpR z..M b)[b\c>a]" using eq fs by simp finally show "(ImpR (z)..M d){b:=(x).Ax x a} \\<^sub>a* (ImpR (z)..M d)[b\c>a]" using eq by simp @@ -6288,7 +6109,7 @@ lemma not_Ax1: shows "\(b\M) \ M{b:=(y).Q} \ Ax x a" apply(nominal_induct M avoiding: b y Q x a rule: trm.strong_induct) -apply(auto simp add: fresh_atm abs_fresh abs_supp fin_supp) +apply(auto simp: fresh_atm abs_fresh abs_supp fin_supp) apply(subgoal_tac "\x'::coname. x'\(trm{coname:=(y).Q},Q)") apply(erule exE) apply(simp add: fresh_prod) @@ -6360,7 +6181,7 @@ lemma not_Ax2: shows "\(x\M) \ M{x:=.Q} \ Ax y a" apply(nominal_induct M avoiding: b y Q x a rule: trm.strong_induct) -apply(auto simp add: fresh_atm abs_fresh abs_supp fin_supp) +apply(auto simp: fresh_atm abs_fresh abs_supp fin_supp) apply(subgoal_tac "\x'::name. x'\(trm{x:=.Q},Q)") apply(erule exE) apply(simp add: fresh_prod) @@ -6442,7 +6263,7 @@ proof(nominal_induct N avoiding: x y c P rule: trm.strong_induct) case Ax then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject) + by (auto simp: abs_fresh fresh_atm forget trm.inject) next case (Cut d M u M' x' y' c P) with assms show ?case @@ -6529,11 +6350,11 @@ next case NotR then show ?case - by (auto simp add: abs_fresh fresh_atm forget) + by (auto simp: abs_fresh fresh_atm forget) next case (NotL d M u) then show ?case - apply (auto simp add: abs_fresh fresh_atm forget) + apply (auto simp: abs_fresh fresh_atm forget) apply(subgoal_tac "\x'::name. x'\(P,M{y:=.P},M{x:=.Ax y c}{y:=.P},y,x)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6543,7 +6364,7 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(1)[OF fs_name1]) apply(subgoal_tac "\x'::name. x'\(P,M{x:=.Ax y c},M{x:=.Ax y c}{y:=.P},Ax y c,y,x)") @@ -6566,11 +6387,11 @@ next case (AndR d1 M d2 M' d3) then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (AndL1 u M d) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{y:=.P},M{x:=.Ax y c}{y:=.P},u,y,x)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6580,7 +6401,7 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(1)[OF fs_name1]) apply(subgoal_tac "\x'::name. x'\(P,Ax y c,M{x:=.Ax y c},M{x:=.Ax y c}{y:=.P},u,y,x)") @@ -6593,13 +6414,13 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(1)[OF fs_name1]) done next case (AndL2 u M d) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{y:=.P},M{x:=.Ax y c}{y:=.P},u,y,x)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6609,7 +6430,7 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(1)[OF fs_name1]) apply(subgoal_tac "\x'::name. x'\(P,Ax y c,M{x:=.Ax y c},M{x:=.Ax y c}{y:=.P},u,y,x)") @@ -6622,21 +6443,21 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(1)[OF fs_name1]) done next case OrR1 then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case OrR2 then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (OrL x1 M x2 M' x3) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{y:=.P},M{x:=.Ax y c}{y:=.P}, M'{y:=.P},M'{x:=.Ax y c}{y:=.P},x1,x2,x3,y,x)") apply(erule exE, simp add: fresh_prod) @@ -6647,7 +6468,7 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substn.simps) @@ -6674,17 +6495,17 @@ apply(simp add: abs_fresh subst_fresh fresh_atm) apply(force) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(1)[OF fs_name1]) done next case ImpR then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (ImpL a M x1 M' x2) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{x2:=.P},M{x:=.Ax x2 c}{x2:=.P}, M'{x2:=.P},M'{x:=.Ax x2 c}{x2:=.P},x1,y,x)") apply(erule exE, simp add: fresh_prod) @@ -6695,7 +6516,7 @@ apply(simp add: abs_fresh) apply(simp) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substn.simps) @@ -6720,7 +6541,7 @@ apply(simp add: abs_fresh subst_fresh fresh_atm) apply(simp add: abs_fresh subst_fresh fresh_atm) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(1)[OF fs_name1]) done qed @@ -6750,12 +6571,12 @@ proof(nominal_induct N avoiding: a b y P rule: trm.strong_induct) case Ax then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject) + by (auto simp: abs_fresh fresh_atm forget trm.inject) next case (Cut d M u M' x' y' c P) with assms show ?case apply(simp) - apply(auto simp add: trm.inject) + apply(auto simp: trm.inject) apply(rule trans) apply(rule better_Cut_substc) apply(simp) @@ -6815,11 +6636,11 @@ next case NotL then show ?case - by (auto simp add: abs_fresh fresh_atm forget) + by (auto simp: abs_fresh fresh_atm forget) next case (NotR u M d) then show ?case - apply (auto simp add: abs_fresh fresh_atm forget) + apply (auto simp: abs_fresh fresh_atm forget) apply(subgoal_tac "\a'::coname. a'\(b,P,M{d:=(y).P},M{b:=(y).Ax y d}{d:=(y).P},u,y)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6829,7 +6650,7 @@ apply(simp add: abs_fresh) apply(simp add: abs_fresh) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(2)[OF fs_coname1]) apply(subgoal_tac "\a'::coname. a'\(P,M{d:=(y).Ax y a},M{d:=(y).Ax y a}{a:=(y).P},Ax y a,y,d)") @@ -6852,7 +6673,7 @@ next case (AndR d1 M d2 M' d3) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\a'::coname. a'\(P,M{d3:=(y).P},M{b:=(y).Ax y d3}{d3:=(y).P}, M'{d3:=(y).P},M'{b:=(y).Ax y d3}{d3:=(y).P},d1,d2,d3,b,y)") apply(erule exE, simp add: fresh_prod) @@ -6863,7 +6684,7 @@ apply(simp add: abs_fresh fresh_atm) apply(simp add: abs_fresh fresh_atm) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) @@ -6890,21 +6711,21 @@ apply(simp add: abs_fresh subst_fresh fresh_atm) apply(force) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(2)[OF fs_coname1]) done next case (AndL1 u M d) then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (AndL2 u M d) then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (OrR1 d M e) then show ?case - apply (auto simp add: abs_fresh fresh_atm forget) + apply (auto simp: abs_fresh fresh_atm forget) apply(subgoal_tac "\a'::coname. a'\(b,P,M{e:=(y).P},M{b:=(y).Ax y e}{e:=(y).P},d,e)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6914,7 +6735,7 @@ apply(simp add: abs_fresh) apply(simp add: abs_fresh) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(2)[OF fs_coname1]) apply(subgoal_tac "\a'::coname. a'\(b,P,Ax y a,M{e:=(y).Ax y a},M{e:=(y).Ax y a}{a:=(y).P},d,e)") @@ -6937,7 +6758,7 @@ next case (OrR2 d M e) then show ?case - apply (auto simp add: abs_fresh fresh_atm forget) + apply (auto simp: abs_fresh fresh_atm forget) apply(subgoal_tac "\a'::coname. a'\(b,P,M{e:=(y).P},M{b:=(y).Ax y e}{e:=(y).P},d,e)") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6947,7 +6768,7 @@ apply(simp add: abs_fresh) apply(simp add: abs_fresh) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(2)[OF fs_coname1]) apply(subgoal_tac "\a'::coname. a'\(b,P,Ax y a,M{e:=(y).Ax y a},M{e:=(y).Ax y a}{a:=(y).P},d,e)") @@ -6970,15 +6791,15 @@ next case (OrL x1 M x2 M' x3) then show ?case - by(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case ImpL then show ?case - by (auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + by (auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) next case (ImpR u e M d) then show ?case - apply(auto simp add: abs_fresh fresh_atm forget trm.inject subst_fresh) + apply(auto simp: abs_fresh fresh_atm forget trm.inject subst_fresh) apply(subgoal_tac "\a'::coname. a'\(b,e,d,P,M{d:=(y).P},M{b:=(y).Ax y d}{d:=(y).P})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -6988,7 +6809,7 @@ apply(simp add: abs_fresh) apply(simp add: abs_fresh) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule exists_fresh'(2)[OF fs_coname1]) apply(subgoal_tac "\a'::coname. a'\(e,d,P,Ax y a,M{d:=(y).Ax y a},M{d:=(y).Ax y a}{a:=(y).P})") @@ -7007,7 +6828,7 @@ apply(simp add: abs_fresh subst_fresh fresh_atm) apply(simp add: abs_fresh subst_fresh fresh_atm) apply(simp) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(rule exists_fresh'(2)[OF fs_coname1]) done qed @@ -7043,7 +6864,7 @@ using fs by (simp_all add: fresh_prod fresh_atm) also have "\ = Cut .(P{b:=(y).Q}) (y).(Q{x:=.(P{b:=(y).Q})})" using fs by (simp add: forget) also have "\ = (Cut .Ax x b (y).Q){x:=.(P{b:=(y).Q})}" - using fs asm by (auto simp add: fresh_prod fresh_atm subst_fresh) + using fs asm by (auto simp: fresh_prod fresh_atm subst_fresh) also have "\ = (Ax x b){b:=(y).Q}{x:=.(P{b:=(y).Q})}" using fs by simp finally have "(Ax z c){x:=.P}{b:=(y).Q} = (Ax z c){b:=(y).Q}{x:=.(P{b:=(y).Q})}" using asm by simp @@ -7055,14 +6876,14 @@ also have "\ = Cut .(Ax z c{x:=.(P{b:=(y).Q})}) (y).(Q{x:=.(P{b:=(y).Q})})" using fs asm by (simp add: forget) also have "\ = (Cut .Ax z c (y).Q){x:=.(P{b:=(y).Q})}" using asm fs - by (auto simp add: trm.inject subst_fresh fresh_prod fresh_atm abs_fresh) + by (auto simp: trm.inject subst_fresh fresh_prod fresh_atm abs_fresh) also have "\ = (Ax z c){b:=(y).Q}{x:=.(P{b:=(y).Q})}" using asm fs by simp finally have "(Ax z c){x:=.P}{b:=(y).Q} = (Ax z c){b:=(y).Q}{x:=.(P{b:=(y).Q})}" by simp } moreover { assume asm: "z=x \ c\b" have "(Ax z c){x:=.P}{b:=(y).Q} = (Cut .P (x).Ax z c){b:=(y).Q}" using fs asm by simp - also have "\ = Cut .(P{b:=(y).Q}) (x).Ax z c" using fs asm by (auto simp add: trm.inject abs_fresh) + also have "\ = Cut .(P{b:=(y).Q}) (x).Ax z c" using fs asm by (auto simp: trm.inject abs_fresh) also have "\ = (Ax z c){x:=.(P{b:=(y).Q})}" using fs asm by simp also have "\ = (Ax z c){b:=(y).Q}{x:=.(P{b:=(y).Q})}" using asm by auto finally have "(Ax z c){x:=.P}{b:=(y).Q} = (Ax z c){b:=(y).Q}{x:=.(P{b:=(y).Q})}" by simp @@ -7078,12 +6899,12 @@ have "(Cut .M (z).N){x:=.P}{b:=(y).Q} = (Cut .P (z).(N{x:=.P})){b:=(y).Q}" using Cut asm by simp also have "\ = (Cut .P (z).N){b:=(y).Q}" using Cut asm by (simp add: fresh_atm) - also have "\ = (Cut .(P{b:=(y).Q}) (y).Q)" using Cut asm by (auto simp add: fresh_prod fresh_atm) + also have "\ = (Cut .(P{b:=(y).Q}) (y).Q)" using Cut asm by (auto simp: fresh_prod fresh_atm) finally have eq1: "(Cut .M (z).N){x:=.P}{b:=(y).Q} = (Cut .(P{b:=(y).Q}) (y).Q)" by simp have "(Cut .M (z).N){b:=(y).Q}{x:=.(P{b:=(y).Q})} = (Cut .M (y).Q){x:=.(P{b:=(y).Q})}" using Cut asm by (simp add: fresh_atm) also have "\ = Cut .(P{b:=(y).Q}) (y).(Q{x:=.(P{b:=(y).Q})})" using Cut asm - by (auto simp add: fresh_prod fresh_atm subst_fresh) + by (auto simp: fresh_prod fresh_atm subst_fresh) also have "\ = Cut .(P{b:=(y).Q}) (y).Q" using Cut asm by (simp add: forget) finally have eq2: "(Cut .M (z).N){b:=(y).Q}{x:=.(P{b:=(y).Q})} = Cut .(P{b:=(y).Q}) (y).Q" by simp @@ -7109,7 +6930,7 @@ have "(Cut .M (z).N){b:=(y).Q}{x:=.(P{b:=(y).Q})} = (Cut .(M{b:=(y).Q}) (y).Q){x:=.(P{b:=(y).Q})}" using Cut asm by simp also have "\ = Cut .(M{b:=(y).Q}{x:=.(P{b:=(y).Q})}) (y).(Q{x:=.(P{b:=(y).Q})})" - using Cut asm neq by (auto simp add: fresh_prod fresh_atm subst_fresh abs_fresh) + using Cut asm neq by (auto simp: fresh_prod fresh_atm subst_fresh abs_fresh) also have "\ = Cut .(M{b:=(y).Q}{x:=.(P{b:=(y).Q})}) (y).Q" using Cut asm by (simp add: forget) finally have eq2: "(Cut .M (z).N){b:=(y).Q}{x:=.(P{b:=(y).Q})} = Cut .(M{b:=(y).Q}{x:=.(P{b:=(y).Q})}) (y).Q" by simp @@ -7135,7 +6956,7 @@ = (Cut .(M{b:=(y).Q}) (z).(N{b:=(y).Q})){x:=.(P{b:=(y).Q})}" using Cut asm by auto also have "\ = (Cut .M (z).(N{b:=(y).Q})){x:=.(P{b:=(y).Q})}" - using Cut asm by (auto simp add: fresh_atm) + using Cut asm by (auto simp: fresh_atm) also have "\ = Cut .(P{b:=(y).Q}) (z).(N{b:=(y).Q}{x:=.(P{b:=(y).Q})})" using Cut asm by (simp add: fresh_prod fresh_atm subst_fresh) finally @@ -7179,7 +7000,7 @@ next case (NotR z M c) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\a'::coname. a'\(M{c:=(y).Q},M{c:=(y).Q}{x:=.P{c:=(y).Q}},Q,a,P,c,y)") apply(erule exE) apply(simp add: fresh_prod) @@ -7197,7 +7018,7 @@ next case (NotL c M z) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{x:=.P},P{b:=(y).Q},M{b:=(y).Q}{x:=.P{b:=(y).Q}},y,Q)") apply(erule exE) apply(simp add: fresh_prod) @@ -7208,7 +7029,7 @@ next case (AndR c1 M c2 N c3) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\a'::coname. a'\(Q,M{c3:=(y).Q},M{c3:=(y).Q}{x:=.P{c3:=(y).Q}},c2,c3,a, P{c3:=(y).Q},N{c3:=(y).Q},N{c3:=(y).Q}{x:=.P{c3:=(y).Q}},c1)") apply(erule exE) @@ -7225,7 +7046,7 @@ next case (AndL1 z1 M z2) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{x:=.P},P{b:=(y).Q},z1,y,Q,M{b:=(y).Q}{x:=.P{b:=(y).Q}})") apply(erule exE) apply(simp add: fresh_prod) @@ -7236,7 +7057,7 @@ next case (AndL2 z1 M z2) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{x:=.P},P{b:=(y).Q},z1,y,Q,M{b:=(y).Q}{x:=.P{b:=(y).Q}})") apply(erule exE) apply(simp add: fresh_prod) @@ -7247,7 +7068,7 @@ next case (OrL z1 M z2 N z3) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\x'::name. x'\(P,M{x:=.P},M{b:=(y).Q}{x:=.P{b:=(y).Q}},z2,z3,a,y,Q, P{b:=(y).Q},N{x:=.P},N{b:=(y).Q}{x:=.P{b:=(y).Q}},z1)") apply(erule exE) @@ -7263,7 +7084,7 @@ next case (OrR1 c1 M c2) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\a'::coname. a'\(Q,M{c2:=(y).Q},a,P{c2:=(y).Q},c1, M{c2:=(y).Q}{x:=.P{c2:=(y).Q}})") apply(erule exE) @@ -7277,7 +7098,7 @@ next case (OrR2 c1 M c2) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\a'::coname. a'\(Q,M{c2:=(y).Q},a,P{c2:=(y).Q},c1, M{c2:=(y).Q}{x:=.P{c2:=(y).Q}})") apply(erule exE) @@ -7291,7 +7112,7 @@ next case (ImpR z c M d) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\a'::coname. a'\(Q,M{d:=(y).Q},a,P{d:=(y).Q},c, M{d:=(y).Q}{x:=.P{d:=(y).Q}})") apply(erule exE) @@ -7304,7 +7125,7 @@ next case (ImpL c M z N u) then show ?case - apply(auto simp add: fresh_prod fresh_atm subst_fresh) + apply(auto simp: fresh_prod fresh_atm subst_fresh) apply(subgoal_tac "\z'::name. z'\(P,P{b:=(y).Q},M{u:=.P},N{u:=.P},y,Q, M{b:=(y).Q}{u:=.P{b:=(y).Q}},N{b:=(y).Q}{u:=.P{b:=(y).Q}},z)") apply(erule exE) @@ -7326,7 +7147,7 @@ proof(nominal_induct M avoiding: a x N y b P rule: trm.strong_induct) case (Ax z c) then show ?case - by (auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + by (auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) next case (Cut d M' u M'') then show ?case @@ -7385,7 +7206,7 @@ next case (NotR z M' d) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\a'::coname. a'\(y,P,N,N{y:=.P},M'{d:=(x).N},M'{y:=.P}{d:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7405,7 +7226,7 @@ next case (NotL d M' z) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\x'::name. x'\(z,y,P,N,N{y:=.P},M'{y:=.P},M'{y:=.P}{a:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7427,7 +7248,7 @@ next case (AndR d M' e M'' f) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\a'::coname. a'\(P,b,d,e,N,N{y:=.P},M'{f:=(x).N},M''{f:=(x).N}, M'{y:=.P}{f:=(x).N{y:=.P}},M''{y:=.P}{f:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7450,7 +7271,7 @@ next case (AndL1 z M' u) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\x'::name. x'\(P,b,z,u,x,N,M'{y:=.P},M'{y:=.P}{a:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7471,7 +7292,7 @@ next case (AndL2 z M' u) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\x'::name. x'\(P,b,z,u,x,N,M'{y:=.P},M'{y:=.P}{a:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7492,7 +7313,7 @@ next case (OrL u M' v M'' w) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\z'::name. z'\(P,b,u,w,v,N,N{y:=.P},M'{y:=.P},M''{y:=.P}, M'{y:=.P}{a:=(x).N{y:=.P}},M''{y:=.P}{a:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7516,7 +7337,7 @@ next case (OrR1 e M' f) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\c'::coname. c'\(P,b,e,f,x,N,N{y:=.P}, M'{f:=(x).N},M'{y:=.P}{f:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7537,7 +7358,7 @@ next case (OrR2 e M' f) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\c'::coname. c'\(P,b,e,f,x,N,N{y:=.P}, M'{f:=(x).N},M'{y:=.P}{f:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7558,7 +7379,7 @@ next case (ImpR x e M' f) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\c'::coname. c'\(P,b,e,f,x,N,N{y:=.P}, M'{f:=(x).N},M'{y:=.P}{f:=(x).N{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7581,7 +7402,7 @@ next case (ImpL e M' v M'' w) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget trm.inject) apply(subgoal_tac "\z'::name. z'\(P,b,e,w,v,N,N{y:=.P},M'{w:=.P},M''{w:=.P}, M'{w:=.P}{a:=(x).N{w:=.P}},M''{w:=.P}{a:=(x).N{w:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7610,7 +7431,7 @@ proof(nominal_induct N avoiding: x y a c M P rule: trm.strong_induct) case (Ax z c) then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (Cut d M' u M'') then show ?case @@ -7650,11 +7471,11 @@ next case NotR then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (NotL d M' u) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\x'::name. x'\(y,P,M,M{y:=.P},M'{x:=.M},M'{y:=.P}{x:=.M{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7693,11 +7514,11 @@ next case AndR then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (AndL1 u M' v) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\x'::name. x'\(u,y,v,P,M,M{y:=.P},M'{x:=.M},M'{y:=.P}{x:=.M{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7736,7 +7557,7 @@ next case (AndL2 u M' v) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\x'::name. x'\(u,y,v,P,M,M{y:=.P},M'{x:=.M},M'{y:=.P}{x:=.M{y:=.P}})") apply(erule exE, simp add: fresh_prod) apply(erule conjE)+ @@ -7775,15 +7596,15 @@ next case OrR1 then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case OrR2 then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (OrL x1 M' x2 M'' x3) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\x'::name. x'\(y,P,M,M{y:=.P},M'{x:=.M},M'{y:=.P}{x:=.M{y:=.P}}, x1,x2,x3,M''{x:=.M},M''{y:=.P}{x:=.M{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7827,11 +7648,11 @@ next case ImpR then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (ImpL d M' x1 M'' x2) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(subgoal_tac "\x'::name. x'\(y,P,M,M{y:=.P},M'{x2:=.M},M'{y:=.P}{x2:=.M{y:=.P}}, x1,x2,M''{x2:=.M},M''{y:=.P}{x2:=.M{y:=.P}})") apply(erule exE, simp add: fresh_prod) @@ -7879,7 +7700,7 @@ proof(nominal_induct N avoiding: x y a c M P rule: trm.strong_induct) case (Ax z c) then show ?case - by (auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by (auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (Cut d M' u M'') then show ?case @@ -7919,11 +7740,11 @@ next case NotL then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (NotR u M' d) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -7937,7 +7758,7 @@ apply(rule trans) apply(rule substc.simps) apply(simp add: fresh_prod fresh_atm) - apply(auto simp add: fresh_atm fresh_prod)[1] + apply(auto simp: fresh_atm fresh_prod)[1] apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -7946,25 +7767,25 @@ apply(rule better_Cut_substc) apply(simp add: fresh_prod fresh_atm subst_fresh) apply(simp add: abs_fresh subst_fresh) - apply(auto simp add: fresh_atm) + apply(auto simp: fresh_atm) apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) apply(simp add: fresh_atm subst_fresh) - apply(auto simp add: fresh_prod fresh_atm) + apply(auto simp: fresh_prod fresh_atm) done next case AndL1 then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case AndL2 then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (AndR d M e M' f) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -7977,10 +7798,10 @@ apply(simp add: trm.inject alpha) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] apply(simp) - apply(auto simp add: fresh_atm fresh_prod)[1] + apply(auto simp: fresh_atm fresh_prod)[1] apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -7989,23 +7810,23 @@ apply(rule better_Cut_substc) apply(simp add: subst_fresh fresh_atm fresh_prod) apply(simp add: abs_fresh subst_fresh) - apply(auto simp add: fresh_atm)[1] + apply(auto simp: fresh_atm)[1] apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] apply(simp) - apply(auto simp add: fresh_atm fresh_prod)[1] + apply(auto simp: fresh_atm fresh_prod)[1] done next case OrL then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (OrR1 d M' e) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8018,8 +7839,8 @@ apply(simp add: trm.inject alpha) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8028,17 +7849,17 @@ apply(rule better_Cut_substc) apply(simp add: subst_fresh fresh_atm fresh_prod) apply(simp add: abs_fresh subst_fresh) - apply(auto simp add: fresh_atm)[1] + apply(auto simp: fresh_atm)[1] apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] done next case (OrR2 d M' e) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8051,8 +7872,8 @@ apply(simp add: trm.inject alpha) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8061,21 +7882,21 @@ apply(rule better_Cut_substc) apply(simp add: subst_fresh fresh_atm fresh_prod) apply(simp add: abs_fresh subst_fresh) - apply(auto simp add: fresh_atm)[1] + apply(auto simp: fresh_atm)[1] apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] done next case ImpL then show ?case - by(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + by(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) next case (ImpR u d M' e) then show ?case - apply(auto simp add: subst_fresh abs_fresh fresh_atm fresh_prod forget) + apply(auto simp: subst_fresh abs_fresh fresh_atm fresh_prod forget) apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8088,9 +7909,9 @@ apply(simp add: trm.inject alpha) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] apply(generate_fresh "coname") apply(fresh_fun_simp) apply(fresh_fun_simp) @@ -8099,14 +7920,14 @@ apply(rule better_Cut_substc) apply(simp add: subst_fresh fresh_atm fresh_prod) apply(simp add: abs_fresh subst_fresh) - apply(auto simp add: fresh_atm)[1] + apply(auto simp: fresh_atm)[1] apply(simp add: trm.inject alpha forget) apply(rule trans) apply(rule substc.simps) - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] - apply(auto simp add: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] + apply(auto simp: fresh_prod fresh_atm subst_fresh abs_fresh abs_supp fin_supp)[1] done qed