# HG changeset patch # User urbanc # Date 1211466881 -7200 # Node ID 071f40487734ba9885e936d69a02e0b7acc12e5b # Parent 003b5781b845fac154e8a0c33c0f9e8fd552cb3b made the naming of the induction principles consistent: weak_induct is induct and induct is strong_induct diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/CR.thy --- a/src/HOL/Nominal/Examples/CR.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/CR.thy Thu May 22 16:34:41 2008 +0200 @@ -10,7 +10,7 @@ assumes asm: "x\L" shows "L[x::=P] = L" using asm -proof (nominal_induct L avoiding: x P rule: lam.induct) +proof (nominal_induct L avoiding: x P rule: lam.strong_induct) case (Var z) have "x\Var z" by fact thus "(Var z)[x::=P] = (Var z)" by (simp add: fresh_atm) @@ -36,7 +36,7 @@ assumes asm: "x\L" shows "L[x::=P] = L" using asm -by (nominal_induct L avoiding: x P rule: lam.induct) +by (nominal_induct L avoiding: x P rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_fact: @@ -44,7 +44,7 @@ assumes asms: "z\N" "z\L" shows "z\(N[y::=L])" using asms -proof (nominal_induct N avoiding: z y L rule: lam.induct) +proof (nominal_induct N avoiding: z y L rule: lam.strong_induct) case (Var u) have "z\(Var u)" "z\L" by fact+ thus "z\((Var u)[y::=L])" by simp @@ -73,7 +73,7 @@ assumes asms: "z\N" "z\L" shows "z\(N[y::=L])" using asms -by (nominal_induct N avoiding: z y L rule: lam.induct) +by (nominal_induct N avoiding: z y L rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_fact': @@ -81,7 +81,7 @@ assumes a: "a\t2" shows "a\t1[a::=t2]" using a -by (nominal_induct t1 avoiding: a t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a t2 rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma substitution_lemma: @@ -89,7 +89,7 @@ and b: "x\L" shows "M[x::=N][y::=L] = M[y::=L][x::=N[y::=L]]" using a b -proof (nominal_induct M avoiding: x y N L rule: lam.induct) +proof (nominal_induct M avoiding: x y N L rule: lam.strong_induct) case (Var z) (* case 1: Variables*) have "x\y" by fact have "x\L" by fact @@ -142,7 +142,7 @@ assumes asm: "x\y" "x\L" shows "M[x::=N][y::=L] = M[y::=L][x::=N[y::=L]]" using asm -by (nominal_induct M avoiding: x y N L rule: lam.induct) +by (nominal_induct M avoiding: x y N L rule: lam.strong_induct) (auto simp add: fresh_fact forget) section {* Beta Reduction *} @@ -261,7 +261,7 @@ assumes a: "c\t1" shows "t1[a::=t2] = ([(c,a)]\t1)[c::=t2]" using a -by (nominal_induct t1 avoiding: a c t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a c t2 rule: lam.strong_induct) (auto simp add: calc_atm fresh_atm abs_fresh) lemma one_abs: @@ -295,7 +295,7 @@ assumes a: "N\\<^isub>1N'" shows "M[x::=N] \\<^isub>1 M[x::=N']" using a -proof (nominal_induct M avoiding: x N N' rule: lam.induct) +proof (nominal_induct M avoiding: x N N' rule: lam.strong_induct) case (Var y) thus "Var y[x::=N] \\<^isub>1 Var y[x::=N']" by (cases "x=y") auto next @@ -310,7 +310,7 @@ assumes a: "N\\<^isub>1N'" shows "M[x::=N] \\<^isub>1 M[x::=N']" using a -by (nominal_induct M avoiding: x N N' rule: lam.induct) +by (nominal_induct M avoiding: x N N' rule: lam.strong_induct) (auto simp add: fresh_prod fresh_atm) lemma one_subst: diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/CR_Takahashi.thy --- a/src/HOL/Nominal/Examples/CR_Takahashi.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/CR_Takahashi.thy Thu May 22 16:34:41 2008 +0200 @@ -36,31 +36,31 @@ lemma subst_eqvt[eqvt]: fixes pi::"name prm" - shows "pi\t1[x::=t2] = (pi\t1)[(pi\x)::=(pi\t2)]" -by (nominal_induct t1 avoiding: x t2 rule: lam.induct) + shows "pi\(t1[x::=t2]) = (pi\t1)[(pi\x)::=(pi\t2)]" +by (nominal_induct t1 avoiding: x t2 rule: lam.strong_induct) (auto simp add: perm_bij fresh_atm fresh_bij) lemma forget: shows "x\t \ t[x::=s] = t" -by (nominal_induct t avoiding: x s rule: lam.induct) +by (nominal_induct t avoiding: x s rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_fact: fixes z::"name" - shows "z\s \ (z=y \ z\t) \ z\t[y::=s]" -by (nominal_induct t avoiding: z y s rule: lam.induct) + shows "\z\s; (z=y \ z\t)\ \ z\t[y::=s]" +by (nominal_induct t avoiding: z y s rule: lam.strong_induct) (auto simp add: abs_fresh fresh_prod fresh_atm) lemma substitution_lemma: assumes a: "x\y" "x\u" shows "t[x::=s][y::=u] = t[y::=u][x::=s[y::=u]]" -using a by (nominal_induct t avoiding: x y s u rule: lam.induct) +using a by (nominal_induct t avoiding: x y s u rule: lam.strong_induct) (auto simp add: fresh_fact forget) lemma subst_rename: assumes a: "y\t" shows "t[x::=s] = ([(y,x)]\t)[y::=s]" -using a by (nominal_induct t avoiding: x y s rule: lam.induct) +using a by (nominal_induct t avoiding: x y s rule: lam.strong_induct) (auto simp add: calc_atm fresh_atm abs_fresh) section {* Beta-Reduction *} @@ -98,7 +98,7 @@ lemma One_refl: shows "t \\<^isub>1 t" -by (nominal_induct t rule: lam.induct) (auto) +by (nominal_induct t rule: lam.strong_induct) (auto) lemma One_subst: assumes a: "t1 \\<^isub>1 t2" "s1 \\<^isub>1 s2" @@ -136,12 +136,6 @@ (\x p p' s'. r = p'[x::=s'] \ t = Lam [x].p \ p \\<^isub>1 p' \ s \\<^isub>1 s' \ x\(s,s'))" using a by (cases rule: One.cases) (auto simp add: lam.inject) -lemma One_App_: - assumes a: "App t s \\<^isub>1 r" - obtains t' s' where "r = App t' s'" "t \\<^isub>1 t'" "s \\<^isub>1 s'" - | x p p' s' where "r = p'[x::=s']" "t = Lam [x].p" "p \\<^isub>1 p'" "s \\<^isub>1 s'" "x\(s,s')" -using a by (cases rule: One.cases) (auto simp add: lam.inject) - lemma One_Redex: assumes a: "App (Lam [x].t) s \\<^isub>1 r" "x\(s,r)" shows "(\t' s'. r = App (Lam [x].t') s' \ t \\<^isub>1 t' \ s \\<^isub>1 s') \ @@ -205,9 +199,10 @@ lemma Development_existence: shows "\M'. M \\<^isub>d M'" -by (nominal_induct M rule: lam.induct) +by (nominal_induct M rule: lam.strong_induct) (auto dest!: Dev_Lam intro: better_d4_intro) +(* needs fixing *) lemma Triangle: assumes a: "t \\<^isub>d t1" "t \\<^isub>1 t2" shows "t2 \\<^isub>1 t1" @@ -220,7 +215,7 @@ have "App (Lam [x].t1) s1 \\<^isub>1 t2" by fact then obtain t' s' where "(t2 = App (Lam [x].t') s' \ t1 \\<^isub>1 t' \ s1 \\<^isub>1 s') \ (t2 = t'[x::=s'] \ t1 \\<^isub>1 t' \ s1 \\<^isub>1 s')" - (* MARKUS: How does I do this better *) using fc by (auto dest!: One_Redex) + using fc by (auto dest!: One_Redex) then show "t2 \\<^isub>1 t1'[x::=s2]" apply - apply(erule disjE) @@ -282,19 +277,13 @@ shows "t \\<^isub>\\<^sup>* s" using a by (induct) (auto intro!: Beta_congs) -lemma One_star_Lam_cong: +lemma One_congs: assumes a: "t1 \\<^isub>1\<^sup>* t2" shows "Lam [x].t1 \\<^isub>1\<^sup>* Lam [x].t2" -using a by (induct) (auto) - -lemma One_star_App_cong: - assumes a: "t1 \\<^isub>1\<^sup>* t2" - shows "App t1 s \\<^isub>1\<^sup>* App t2 s" + and "App t1 s \\<^isub>1\<^sup>* App t2 s" and "App s t1 \\<^isub>1\<^sup>* App s t2" using a by (induct) (auto intro: One_refl) -lemmas One_congs = One_star_App_cong One_star_Lam_cong - lemma Beta_implies_One_star: assumes a: "t1 \\<^isub>\ t2" shows "t1 \\<^isub>1\<^sup>* t2" diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Class.thy --- a/src/HOL/Nominal/Examples/Class.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Class.thy Thu May 22 16:34:41 2008 +0200 @@ -30,14 +30,14 @@ lemma ty_cases: fixes T::ty shows "(\s. T=PR s) \ (\T'. T=NOT T') \ (\S U. T=S OR U) \ (\S U. T=S AND U) \ (\S U. T=S IMP U)" -by (induct T rule:ty.weak_induct) (auto) +by (induct T rule:ty.induct) (auto) lemma fresh_ty: fixes a::"coname" and x::"name" and T::"ty" shows "a\T" and "x\T" -by (nominal_induct T rule: ty.induct) +by (nominal_induct T rule: ty.strong_induct) (auto simp add: fresh_string) text {* terms *} @@ -117,28 +117,28 @@ 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.induct) +apply(nominal_induct M avoiding: d e rule: trm.strong_induct) apply(auto simp add: fresh_bij eq_bij) done 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.induct) +apply(nominal_induct M avoiding: d e rule: trm.strong_induct) apply(auto simp add: fresh_bij eq_bij) done 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.induct) +apply(nominal_induct M avoiding: x y rule: trm.strong_induct) apply(auto simp add: fresh_bij eq_bij) done 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.induct) +apply(nominal_induct M avoiding: x y rule: trm.strong_induct) apply(auto simp add: fresh_bij eq_bij) done @@ -148,57 +148,57 @@ assumes a: "x\M" shows "M[x\n>y] = M" using a -by (nominal_induct M avoiding: x y rule: trm.induct) +by (nominal_induct M avoiding: x y rule: trm.strong_induct) (auto simp add: 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.induct) +by (nominal_induct M avoiding: a b rule: trm.strong_induct) (auto simp add: 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.induct) +by (nominal_induct M avoiding: x y rule: trm.strong_induct) (auto simp add: 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.induct) +by (nominal_induct M avoiding: a b rule: trm.strong_induct) (auto simp add: 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.induct) +by (nominal_induct M avoiding: a b rule: trm.strong_induct) (auto simp add: 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.induct) +by (nominal_induct M avoiding: x y rule: trm.strong_induct) (auto simp add: 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.induct) +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) 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.induct) +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) 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.induct) +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) done @@ -207,7 +207,7 @@ assumes a: "a'\M" shows "([(a',a)]\M)[a'\c>b]= M[a\c>b]" using a -apply(nominal_induct M avoiding: a a' b rule: trm.induct) +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) done @@ -271,27 +271,27 @@ lemma crename_id: shows "M[a\c>a] = M" -by (nominal_induct M avoiding: a rule: trm.induct) (auto) +by (nominal_induct M avoiding: a rule: trm.strong_induct) (auto) lemma nrename_id: shows "M[x\n>x] = M" -by (nominal_induct M avoiding: x rule: trm.induct) (auto) +by (nominal_induct M avoiding: x rule: trm.strong_induct) (auto) lemma nrename_swap: shows "x\M \ [(x,y)]\M = M[y\n>x]" -by (nominal_induct M avoiding: x y rule: trm.induct) +by (nominal_induct M avoiding: x y rule: trm.strong_induct) (simp_all add: calc_atm fresh_atm trm.inject alpha abs_fresh abs_supp fin_supp) lemma crename_swap: shows "a\M \ [(a,b)]\M = M[b\c>a]" -by (nominal_induct M avoiding: a b rule: trm.induct) +by (nominal_induct M avoiding: a b rule: trm.strong_induct) (simp_all add: calc_atm fresh_atm trm.inject alpha abs_fresh abs_supp fin_supp) lemma crename_ax: assumes a: "M[a\c>b] = Ax x c" "c\a" "c\b" shows "M = Ax x c" using a -apply(nominal_induct M avoiding: a b x c rule: trm.induct) +apply(nominal_induct M avoiding: a b x c rule: trm.strong_induct) apply(simp_all add: trm.inject split: if_splits) done @@ -299,7 +299,7 @@ assumes a: "M[x\n>y] = Ax z a" "z\x" "z\y" shows "M = Ax z a" using a -apply(nominal_induct M avoiding: x y z a rule: trm.induct) +apply(nominal_induct M avoiding: x y z a rule: trm.strong_induct) apply(simp_all add: trm.inject split: if_splits) done @@ -917,7 +917,7 @@ 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.induct) +apply(nominal_induct M avoiding: c x N rule: trm.strong_induct) apply(auto simp add: eq_bij fresh_bij eqvts) apply(perm_simp)+ done @@ -927,14 +927,14 @@ and pi2::"coname prm" 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.induct) +apply(nominal_induct M avoiding: c x N rule: trm.strong_induct) apply(auto simp add: eq_bij fresh_bij eqvts) apply(perm_simp)+ done lemma supp_subst1: shows "supp (M{y:=.P}) \ ((supp M) - {y}) \ (supp P)" -apply(nominal_induct M avoiding: y P c rule: trm.induct) +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(blast)+ @@ -1063,7 +1063,7 @@ lemma supp_subst2: shows "supp (M{y:=.P}) \ supp (M) \ ((supp P) - {c})" -apply(nominal_induct M avoiding: y P c rule: trm.induct) +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(blast)+ @@ -1176,7 +1176,7 @@ lemma supp_subst3: shows "supp (M{c:=(x).P}) \ ((supp M) - {c}) \ (supp P)" -apply(nominal_induct M avoiding: x P c rule: trm.induct) +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(blast)+ @@ -1304,7 +1304,7 @@ lemma supp_subst4: shows "supp (M{c:=(x).P}) \ (supp M) \ ((supp P) - {x})" -apply(nominal_induct M avoiding: x P c rule: trm.induct) +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(blast)+ @@ -1409,7 +1409,7 @@ lemma supp_subst5: shows "(supp M - {y}) \ supp (M{y:=.P})" -apply(nominal_induct M avoiding: y P c rule: trm.induct) +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(blast)+ @@ -1476,7 +1476,7 @@ lemma supp_subst6: shows "(supp M) \ ((supp (M{y:=.P}))::coname set)" -apply(nominal_induct M avoiding: y P c rule: trm.induct) +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(blast)+ @@ -1543,7 +1543,7 @@ lemma supp_subst7: shows "(supp M - {c}) \ supp (M{c:=(x).P})" -apply(nominal_induct M avoiding: x P c rule: trm.induct) +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(blast)+ @@ -1602,7 +1602,7 @@ lemma supp_subst8: shows "(supp M) \ ((supp (M{c:=(x).P}))::name set)" -apply(nominal_induct M avoiding: x P c rule: trm.induct) +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(blast)+ @@ -1681,7 +1681,7 @@ lemma forget: 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.induct) +apply(nominal_induct M avoiding: x c P rule: trm.strong_induct) apply(auto simp add: fresh_atm abs_fresh abs_supp fin_supp) done @@ -1689,7 +1689,7 @@ assumes a: "c\(M,a)" shows "M{a:=(x).N} = ([(c,a)]\M){c:=(x).N}" using a -proof(nominal_induct M avoiding: c a x N rule: trm.induct) +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) next @@ -1784,7 +1784,7 @@ assumes a: "y\(N,x)" shows "M{a:=(x).N} = M{a:=(y).([(y,x)]\N)}" using a -proof(nominal_induct M avoiding: a x y N rule: trm.induct) +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) @@ -1872,7 +1872,7 @@ assumes a: "y\(M,x)" shows "M{x:=.N} = ([(y,x)]\M){y:=.N}" using a -proof(nominal_induct M avoiding: a x y N rule: trm.induct) +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) next @@ -1962,7 +1962,7 @@ assumes a: "c\(N,a)" shows "M{x:=.N} = M{x:=.([(c,a)]\N)}" using a -proof(nominal_induct M avoiding: x c a N rule: trm.induct) +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) @@ -2425,7 +2425,7 @@ assumes a: "c\a" "c\b" 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.induct) +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(subgoal_tac "\x'::name. x'\(P,x,c)") apply(erule exE) @@ -2517,7 +2517,7 @@ assumes a: "c\a" "c\b" 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.induct) +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(rule trans) apply(rule better_crename_Cut) @@ -2591,7 +2591,7 @@ assumes a: "x\y" "x\z" 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.induct) +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(rule trans) apply(rule better_nrename_Cut) @@ -2663,7 +2663,7 @@ assumes a: "x\y" "x\z" 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.induct) +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(rule trans) apply(rule better_nrename_Cut) @@ -3031,7 +3031,7 @@ assumes a: "\(fin M x)" shows "\(fin (M{c:=(y).P}) x)" using a -apply(nominal_induct M avoiding: x c y P rule: trm.induct) +apply(nominal_induct M avoiding: x c y P rule: trm.strong_induct) apply(auto) apply(drule fin_elims, simp) apply(drule fin_elims, simp) @@ -3116,7 +3116,7 @@ assumes a: "\(fin M x)" shows "\(fin (M{y:=.P}) x)" using a -apply(nominal_induct M avoiding: x c y P rule: trm.induct) +apply(nominal_induct M avoiding: x c y P rule: trm.strong_induct) apply(auto) apply(erule fin.cases, simp_all add: trm.inject) apply(erule fin.cases, simp_all add: trm.inject) @@ -3204,7 +3204,7 @@ assumes a: "fin M x" "x\y" "x\P" shows "fin (M{y:=.P}) x" using a -apply(nominal_induct M avoiding: x y c P rule: trm.induct) +apply(nominal_induct M avoiding: x y c P rule: trm.strong_induct) apply(auto dest!: fin_elims simp add: subst_fresh abs_fresh) apply(rule fin.intros, simp add: subst_fresh abs_fresh) apply(rule fin.intros, simp add: subst_fresh abs_fresh) @@ -3221,7 +3221,7 @@ assumes a: "fin M y" "x\y" "y\P" "M\Ax y c" shows "fin (M{c:=(x).P}) y" using a -apply(nominal_induct M avoiding: x y c P rule: trm.induct) +apply(nominal_induct M avoiding: x y c P rule: trm.strong_induct) apply(drule fin_elims) apply(simp add: trm.inject) apply(rule fin.intros) @@ -3268,7 +3268,7 @@ assumes a: "fin M x" "x\y" "x\P" shows "M[x\n>y]{y:=.P} = Cut .P (x).(M{y:=.P})" using a -apply(nominal_induct M avoiding: x y c P rule: trm.induct) +apply(nominal_induct M avoiding: x y c P rule: trm.strong_induct) apply(drule fin_Ax_elim) apply(simp) apply(simp add: trm.inject) @@ -3454,7 +3454,7 @@ assumes a: "\(fic M a)" shows "\(fic (M{y:=.P}) a)" using a -apply(nominal_induct M avoiding: a c y P rule: trm.induct) +apply(nominal_induct M avoiding: a c y P rule: trm.strong_induct) apply(auto) apply(drule fic_elims, simp) apply(drule fic_elims, simp) @@ -3530,7 +3530,7 @@ assumes a: "\(fic M a)" shows "\(fic (M{c:=(y).P}) a)" using a -apply(nominal_induct M avoiding: a c y P rule: trm.induct) +apply(nominal_induct M avoiding: a c y P rule: trm.strong_induct) apply(auto) apply(drule fic_elims, simp) apply(drule fic_elims, simp) @@ -3612,7 +3612,7 @@ assumes a: "fic M a" "a\b" "a\P" shows "fic (M{b:=(x).P}) a" using a -apply(nominal_induct M avoiding: x b a P rule: trm.induct) +apply(nominal_induct M avoiding: x b a P rule: trm.strong_induct) apply(drule fic_elims) apply(simp add: fic.intros) apply(drule fic_elims, simp) @@ -3655,7 +3655,7 @@ assumes a: "fic M a" "c\a" "a\P" "M\Ax x a" shows "fic (M{x:=.P}) a" using a -apply(nominal_induct M avoiding: x a c P rule: trm.induct) +apply(nominal_induct M avoiding: x a c P rule: trm.strong_induct) apply(drule fic_elims) apply(simp add: trm.inject) apply(rule fic.intros) @@ -3699,7 +3699,7 @@ assumes a: "fic M a" "a\b" "a\P" shows "M[a\c>b]{b:=(y).P} = Cut .(M{b:=(y).P}) (y).P" using a -apply(nominal_induct M avoiding: a b y P rule: trm.induct) +apply(nominal_induct M avoiding: a b y P rule: trm.strong_induct) apply(drule fic_Ax_elim) apply(simp) apply(simp add: trm.inject) @@ -5455,7 +5455,7 @@ lemma subst_not_fin1: shows "\fin(M{x:=.P}) x" -apply(nominal_induct M avoiding: x c P rule: trm.induct) +apply(nominal_induct M avoiding: x c P rule: trm.strong_induct) apply(auto) apply(drule fin_elims, simp) apply(drule fin_elims, simp) @@ -5512,7 +5512,7 @@ assumes a: "\fin M y" shows "\fin(M{c:=(x).P}) y" using a -apply(nominal_induct M avoiding: x c P y rule: trm.induct) +apply(nominal_induct M avoiding: x c P y rule: trm.strong_induct) apply(auto) apply(drule fin_elims, simp) apply(drule fin_elims, simp) @@ -5587,7 +5587,7 @@ lemma subst_not_fic1: shows "\fic (M{a:=(x).P}) a" -apply(nominal_induct M avoiding: a x P rule: trm.induct) +apply(nominal_induct M avoiding: a x P rule: trm.strong_induct) apply(auto) apply(erule fic.cases, simp_all add: trm.inject) apply(erule fic.cases, simp_all add: trm.inject) @@ -5644,7 +5644,7 @@ assumes a: "\fic M a" shows "\fic(M{x:=.P}) a" using a -apply(nominal_induct M avoiding: x a P b rule: trm.induct) +apply(nominal_induct M avoiding: x a P b rule: trm.strong_induct) apply(auto) apply(drule fic_elims, simp) apply(drule fic_elims, simp) @@ -5858,7 +5858,7 @@ lemma subst_with_ax1: shows "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" -proof(nominal_induct M avoiding: x a y rule: trm.induct) +proof(nominal_induct M avoiding: x a y rule: trm.strong_induct) case (Ax z b x a y) show "(Ax z b){x:=.Ax y a} \\<^isub>a* (Ax z b)[x\n>y]" proof (cases "z=x") @@ -6115,7 +6115,7 @@ lemma subst_with_ax2: shows "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" -proof(nominal_induct M avoiding: b a x rule: trm.induct) +proof(nominal_induct M avoiding: b a x rule: trm.strong_induct) case (Ax z c b a x) show "(Ax z c){b:=(x).Ax x a} \\<^isub>a* (Ax z c)[b\c>a]" proof (cases "c=b") @@ -6371,7 +6371,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.induct) +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(subgoal_tac "\x'::coname. x'\(trm{coname:=(y).Q},Q)") apply(erule exE) @@ -6443,7 +6443,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.induct) +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(subgoal_tac "\x'::name. x'\(trm{x:=.Q},Q)") apply(erule exE) @@ -6523,7 +6523,7 @@ assumes a: "x\y" "x\P" "y\P" shows "N{y:=.P}{x:=.P} = N{x:=.Ax y c}{y:=.P}" using a -proof(nominal_induct N avoiding: x y c P rule: trm.induct) +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) @@ -6831,7 +6831,7 @@ assumes a: "a\b" "a\P" "b\P" shows "N{a:=(y).P}{b:=(y).P} = N{b:=(y).Ax y a}{a:=(y).P}" using a -proof(nominal_induct N avoiding: a b y P rule: trm.induct) +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) @@ -7118,7 +7118,7 @@ assumes a: "a\(Q,b)" "x\(y,P,Q)" "b\Q" "y\P" shows "M{x:=.P}{b:=(y).Q} = M{b:=(y).Q}{x:=.(P{b:=(y).Q})}" using a -proof(nominal_induct M avoiding: x a P b y Q rule: trm.induct) +proof(nominal_induct M avoiding: x a P b y Q rule: trm.strong_induct) case (Ax z c) have fs: "a\(Q,b)" "x\(y,P,Q)" "b\Q" "y\P" by fact+ { assume asm: "z=x \ c=b" @@ -7407,7 +7407,7 @@ assumes a: "a\(b,P,N)" "x\(y,P,M)" "b\(M,N)" "y\P" shows "M{a:=(x).N}{y:=.P} = M{y:=.P}{a:=(x).N{y:=.P}}" using a -proof(nominal_induct M avoiding: a x N y b P rule: trm.induct) +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) @@ -7691,7 +7691,7 @@ assumes a: "a\(P,N,c)" "c\(M,N)" "x\(y,P,M)" "y\(P,x)" "M\Ax y a" shows "N{x:=.M}{y:=.P} = N{y:=.P}{x:=.(M{y:=.P})}" using a -proof(nominal_induct N avoiding: x y a c M P rule: trm.induct) +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) @@ -7960,7 +7960,7 @@ assumes a: "x\(P,N,y)" "y\(M,N)" "a\(c,P,M)" "c\(P,a)" "M\Ax x c" shows "N{a:=(x).M}{c:=(y).P} = N{c:=(y).P}{a:=(x).(M{c:=(y).P})}" using a -proof(nominal_induct N avoiding: x y a c M P rule: trm.induct) +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) @@ -11177,12 +11177,12 @@ lemma NEGn_decreasing: shows "X\Y \ NEGn B Y \ NEGn B X" -by (nominal_induct B rule: ty.induct) +by (nominal_induct B rule: ty.strong_induct) (auto dest: BINDINGn_decreasing) lemma NEGc_decreasing: shows "X\Y \ NEGc B Y \ NEGc B X" -by (nominal_induct B rule: ty.induct) +by (nominal_induct B rule: ty.strong_induct) (auto dest: BINDINGc_decreasing) lemma mono_NEGn_NEGc: @@ -11246,11 +11246,11 @@ and "AXIOMSc B \ (\\)" proof - have "AXIOMSn B \ NEGn B (\\)" - by (nominal_induct B rule: ty.induct) (auto) + by (nominal_induct B rule: ty.strong_induct) (auto) then show "AXIOMSn B \ \(B)\" using NEG_simp by blast next have "AXIOMSc B \ NEGc B (\(B)\)" - by (nominal_induct B rule: ty.induct) (auto) + by (nominal_induct B rule: ty.strong_induct) (auto) then show "AXIOMSc B \ \\" using NEG_simp by blast qed @@ -11445,7 +11445,7 @@ fixes pi::"name prm" shows "(pi\(\(B)\)) = (\(B)\)" and "(pi\(\\)) = (\\)" -proof (nominal_induct B rule: ty.induct) +proof (nominal_induct B rule: ty.strong_induct) case (PR X) { case 1 show ?case apply - @@ -11555,7 +11555,7 @@ fixes pi::"coname prm" shows "(pi\(\(B)\)) = (\(B)\)" and "(pi\(\\)) = (\\)" -proof (nominal_induct B rule: ty.induct) +proof (nominal_induct B rule: ty.strong_induct) case (PR X) { case 1 show ?case apply - @@ -12739,7 +12739,7 @@ assumes a: ":NotR (x).M a \ (\\)" ":NotR (x).M a \ BINDINGc B (\(B)\)" shows "\B'. B = NOT B' \ (x):M \ (\(B')\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSc_def ctrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(a,aa)]" in pt_set_bij2[OF pt_coname_inst, OF at_coname_inst]) @@ -12750,7 +12750,7 @@ assumes a: "(x):NotL .M x \ NEGn B (\\)" "(x):NotL .M x \ BINDINGn B (\\)" shows "\B'. B = NOT B' \ :M \ (\\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSn_def ntrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(x,xa)]" in pt_set_bij2[OF pt_name_inst, OF at_name_inst]) @@ -12763,7 +12763,7 @@ assumes a: ":AndR .M .N a \ (\\)" ":AndR .M .N a \ BINDINGc B (\(B)\)" shows "\B1 B2. B = B1 AND B2 \ :M \ (\\) \ :N \ (\\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSc_def ctrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(a,ca)]" and x=":Ma" in pt_set_bij2[OF pt_coname_inst, OF at_coname_inst]) @@ -12844,7 +12844,7 @@ assumes a: ":OrR1 .M a \ (\\)" ":OrR1 .M a \ BINDINGc B (\(B)\)" shows "\B1 B2. B = B1 OR B2 \ :M \ (\\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSc_def ctrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(a,ba)]" in pt_set_bij2[OF pt_coname_inst, OF at_coname_inst]) @@ -12865,7 +12865,7 @@ assumes a: ":OrR2 .M a \ (\\)" ":OrR2 .M a \ BINDINGc B (\(B)\)" shows "\B1 B2. B = B1 OR B2 \ :M \ (\\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSc_def ctrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(a,ba)]" in pt_set_bij2[OF pt_coname_inst, OF at_coname_inst]) @@ -12886,7 +12886,7 @@ assumes a: "(x):(OrL (y).M (z).N x) \ NEGn B (\\)" "(x):(OrL (y).M (z).N x) \ BINDINGn B (\\)" shows "\B1 B2. B = B1 OR B2 \ (y):M \ (\(B1)\) \ (z):N \ (\(B2)\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSn_def ntrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(x,za)]" and x="(x):Ma" in pt_set_bij2[OF pt_name_inst, OF at_name_inst]) @@ -12969,7 +12969,7 @@ assumes a: "(x):(AndL1 (y).M x) \ NEGn B (\\)" "(x):(AndL1 (y).M x) \ BINDINGn B (\\)" shows "\B1 B2. B = B1 AND B2 \ (y):M \ (\(B1)\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSn_def ntrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(x,ya)]" in pt_set_bij2[OF pt_name_inst, OF at_name_inst]) @@ -12992,7 +12992,7 @@ assumes a: "(x):(AndL2 (y).M x) \ NEGn B (\\)" "(x):(AndL2 (y).M x) \ BINDINGn B (\\)" shows "\B1 B2. B = B1 AND B2 \ (y):M \ (\(B2)\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSn_def ntrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(x,ya)]" in pt_set_bij2[OF pt_name_inst, OF at_name_inst]) @@ -13015,7 +13015,7 @@ assumes a: "(x):(ImpL .M (z).N x) \ NEGn B (\\)" "(x):(ImpL .M (z).N x) \ BINDINGn B (\\)" shows "\B1 B2. B = B1 IMP B2 \ :M \ (\\) \ (z):N \ (\(B2)\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSn_def ntrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm) apply(drule_tac pi="[(x,y)]" and x=":Ma" in pt_set_bij2[OF pt_name_inst, OF at_name_inst]) @@ -13052,7 +13052,7 @@ (\z P. x\(z,P) \ (z):P \ \(B2)\ \ (x):(M{b:=(z).P}) \ \(B1)\) \ (\c Q. b\(c,Q) \ :Q \ \\ \ :(M{x:=.Q}) \ \\)" using a -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp_all add: ty.inject AXIOMSc_def ctrm.inject alpha) apply(auto intro: CANDs_alpha simp add: trm.inject calc_atm abs_fresh fresh_atm fresh_prod fresh_bij) apply(generate_fresh "name") @@ -13457,7 +13457,7 @@ lemma CANDs_imply_SNa: shows ":M \ \\ \ SNa M" and "(x):M \ \(B)\ \ SNa M" -proof(induct B arbitrary: a x M rule: ty.weak_induct) +proof(induct B arbitrary: a x M rule: ty.induct) case (PR X) { case 1 have ":M \ \\" by fact @@ -13764,7 +13764,7 @@ lemma CANDs_preserved: shows ":M \ \\ \ M \\<^isub>a* M' \ :M' \ \\" and "(x):M \ \(B)\ \ M \\<^isub>a* M' \ (x):M' \ \(B)\" -proof(nominal_induct B arbitrary: a x M M' rule: ty.induct) +proof(nominal_induct B arbitrary: a x M M' rule: ty.strong_induct) case (PR X) { case 1 have asm: "M \\<^isub>a* M'" by fact @@ -14135,7 +14135,7 @@ and b: ":M \ \\" shows ":M \ AXIOMSc B \ :M \ BINDINGc B (\(B)\)" using a b -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp) apply(simp) apply(erule disjE) @@ -14202,7 +14202,7 @@ and b: "(x):M \ (NEGn B (\\))" shows "(x):M \ AXIOMSn B \ (x):M \ BINDINGn B (\\)" using a b -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(simp) apply(simp) apply(erule disjE) @@ -14278,10 +14278,10 @@ shows ":M \ BINDINGc B (\(B)\) \ :M \ (\\)" and "(x):N \ BINDINGn B (\\) \ (x):N \ (\(B)\)" apply - -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(auto) apply(rule NEG_intro) -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(auto) done @@ -14344,7 +14344,7 @@ assumes a: "fic M c" "c\(a,b)" shows "fic (M[a\c>b]) c" using a -apply(nominal_induct M avoiding: c a b rule: trm.induct) +apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done @@ -14359,7 +14359,7 @@ assumes a: "fin M y" shows "fin (M[a\c>b]) y" using a -apply(nominal_induct M avoiding: a b rule: trm.induct) +apply(nominal_induct M avoiding: a b rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done @@ -14375,7 +14375,7 @@ assumes a: "c\(M[a\c>b])" "c\(a,b)" shows "c\M" using a -apply(nominal_induct M avoiding: c a b rule: trm.induct) +apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh) done @@ -14384,7 +14384,7 @@ assumes a: "x\(M[a\c>b])" shows "x\M" using a -apply(nominal_induct M avoiding: x a b rule: trm.induct) +apply(nominal_induct M avoiding: x a b rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp fresh_atm) done @@ -14393,7 +14393,7 @@ assumes a: "fic (M[a\c>b]) c" "c\(a,b)" shows "fic M c" using a -apply(nominal_induct M avoiding: c a b rule: trm.induct) +apply(nominal_induct M avoiding: c a b rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh split: if_splits) apply(auto dest: crename_fresh_interesting1 simp add: fresh_prod fresh_atm) @@ -14403,7 +14403,7 @@ assumes a: "fin (M[a\c>b]) x" shows "fin M x" using a -apply(nominal_induct M avoiding: x a b rule: trm.induct) +apply(nominal_induct M avoiding: x a b rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh split: if_splits) apply(auto dest: crename_fresh_interesting2 simp add: fresh_prod fresh_atm) @@ -14413,7 +14413,7 @@ assumes a: "R[a\c>b] = Cut .M (x).N" "c\(a,b,N,R)" "x\(M,R)" shows "\M' N'. R = Cut .M' (x).N' \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ x\M'" using a -apply(nominal_induct R avoiding: a b c x M N rule: trm.induct) +apply(nominal_induct R avoiding: a b c x M N rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) apply(auto simp add: alpha) @@ -14452,7 +14452,7 @@ assumes a: "R[a\c>b] = NotR (x).N c" "x\R" "c\(a,b)" shows "\N'. (R = NotR (x).N' c) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b c x N rule: trm.induct) +apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,x)]\trm" in exI) apply(perm_simp) @@ -14466,7 +14466,7 @@ assumes a: "R[a\c>b] = NotR (x).N c" "x\R" "c\a" shows "(\N'. (R = NotR (x).N' c) \ N'[a\c>b] = N) \ (\N'. (R = NotR (x).N' a) \ b=c \ N'[a\c>b] = N)" using a -apply(nominal_induct R avoiding: a b c x N rule: trm.induct) +apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(name,x)]\trm" in exI) apply(perm_simp) @@ -14486,7 +14486,7 @@ assumes a: "R[a\c>b] = NotR (x).N c" shows "(a=c \ a=b) \ (a\c)" using a -apply(nominal_induct R avoiding: a b c x N rule: trm.induct) +apply(nominal_induct R avoiding: a b c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -14494,7 +14494,7 @@ assumes a: "R[a\c>b] = NotL .N y" "c\(R,a,b)" shows "\N'. (R = NotL .N' y) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b c y N rule: trm.induct) +apply(nominal_induct R avoiding: a b c y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname,c)]\trm" in exI) apply(perm_simp) @@ -14508,7 +14508,7 @@ assumes a: "R[a\c>b] = AndL1 (x).N y" "x\R" shows "\N'. (R = AndL1 (x).N' y) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b x y N rule: trm.induct) +apply(nominal_induct R avoiding: a b x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,x)]\trm" in exI) apply(perm_simp) @@ -14522,7 +14522,7 @@ assumes a: "R[a\c>b] = AndL2 (x).N y" "x\R" shows "\N'. (R = AndL2 (x).N' y) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b x y N rule: trm.induct) +apply(nominal_induct R avoiding: a b x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,x)]\trm" in exI) apply(perm_simp) @@ -14536,7 +14536,7 @@ assumes a: "R[a\c>b] = AndR .M .N e" shows "(a=e \ a=b) \ (a\e)" using a -apply(nominal_induct R avoiding: a b c d e M N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -14544,7 +14544,7 @@ assumes a: "R[a\c>b] = AndR .M .N e" "c\(a,b,d,e,N,R)" "d\(a,b,c,e,M,R)" "e\(a,b)" shows "\M' N'. R = AndR .M' .N' e \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ d\M'" using a -apply(nominal_induct R avoiding: a b c d e M N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(simp add: fresh_atm fresh_prod) apply(rule_tac x="[(coname2,d)]\trm2" in exI) @@ -14581,7 +14581,7 @@ shows "(\M' N'. R = AndR .M' .N' e \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ d\M') \ (\M' N'. R = AndR .M' .N' a \ b=e \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ d\M')" using a -apply(nominal_induct R avoiding: a b c d e M N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha)[1] apply(auto split: if_splits simp add: trm.inject alpha)[1] apply(auto split: if_splits simp add: trm.inject alpha)[1] @@ -14621,7 +14621,7 @@ assumes a: "R[a\c>b] = OrR1 .M e" shows "(a=e \ a=b) \ (a\e)" using a -apply(nominal_induct R avoiding: a b c e M rule: trm.induct) +apply(nominal_induct R avoiding: a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -14629,7 +14629,7 @@ assumes a: "R[a\c>b] = OrR1 .N d" "c\(R,a,b)" "d\(a,b)" shows "\N'. (R = OrR1 .N' d) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b c d N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -14644,7 +14644,7 @@ shows "(\N'. (R = OrR1 .N' d) \ N'[a\c>b] = N) \ (\N'. (R = OrR1 .N' a) \ b=d \ N'[a\c>b] = N)" using a -apply(nominal_induct R avoiding: a b c d N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -14664,7 +14664,7 @@ assumes a: "R[a\c>b] = OrR2 .M e" shows "(a=e \ a=b) \ (a\e)" using a -apply(nominal_induct R avoiding: a b c e M rule: trm.induct) +apply(nominal_induct R avoiding: a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -14672,7 +14672,7 @@ assumes a: "R[a\c>b] = OrR2 .N d" "c\(R,a,b)" "d\(a,b)" shows "\N'. (R = OrR2 .N' d) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b c d N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -14687,7 +14687,7 @@ shows "(\N'. (R = OrR2 .N' d) \ N'[a\c>b] = N) \ (\N'. (R = OrR2 .N' a) \ b=d \ N'[a\c>b] = N)" using a -apply(nominal_induct R avoiding: a b c d N rule: trm.induct) +apply(nominal_induct R avoiding: a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -14707,7 +14707,7 @@ assumes a: "R[a\c>b] = OrL (x).M (y).N z" "x\(y,z,N,R)" "y\(x,z,M,R)" shows "\M' N'. R = OrL (x).M' (y).N' z \ M'[a\c>b] = M \ N'[a\c>b] = N \ x\N' \ y\M'" using a -apply(nominal_induct R avoiding: a b x y z M N rule: trm.induct) +apply(nominal_induct R avoiding: a b x y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(rule_tac x="[(name2,y)]\trm2" in exI) apply(perm_simp) @@ -14733,7 +14733,7 @@ assumes a: "R[a\c>b] = ImpL .M (y).N z" "c\(a,b,N,R)" "y\(z,M,R)" shows "\M' N'. R = ImpL .M' (y).N' z \ M'[a\c>b] = M \ N'[a\c>b] = N \ c\N' \ y\M'" using a -apply(nominal_induct R avoiding: a b c y z M N rule: trm.induct) +apply(nominal_induct R avoiding: a b c y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(rule_tac x="[(name1,y)]\trm2" in exI) apply(perm_simp) @@ -14759,7 +14759,7 @@ assumes a: "R[a\c>b] = ImpR (x)..M e" shows "(a=e \ a=b) \ (a\e)" using a -apply(nominal_induct R avoiding: x a b c e M rule: trm.induct) +apply(nominal_induct R avoiding: x a b c e M rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -14767,7 +14767,7 @@ assumes a: "R[a\c>b] = ImpR (x)..N d" "c\(R,a,b)" "d\(a,b)" "x\R" shows "\N'. (R = ImpR (x)..N' d) \ N'[a\c>b] = N" using a -apply(nominal_induct R avoiding: a b x c d N rule: trm.induct) +apply(nominal_induct R avoiding: a b x c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_perm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,x)]\trm" in exI) apply(perm_simp) @@ -14787,7 +14787,7 @@ shows "(\N'. (R = ImpR (x)..N' d) \ N'[a\c>b] = N) \ (\N'. (R = ImpR (x)..N' a) \ b=d \ N'[a\c>b] = N)" using a -apply(nominal_induct R avoiding: x a b c d N rule: trm.induct) +apply(nominal_induct R avoiding: x a b c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject abs_perm calc_atm) apply(rule_tac x="[(name,x)]\[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -14809,7 +14809,7 @@ assumes a: "N[a\c>b] = Ax x c" shows "\d. N = Ax x d" using a -apply(nominal_induct N avoiding: a b rule: trm.induct) +apply(nominal_induct N avoiding: a b rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) done @@ -14818,7 +14818,7 @@ assumes a: "distinct [a,b,c]" shows "M[a\c>c][c\c>b] = M[c\c>b][a\c>b]" using a -apply(nominal_induct M avoiding: a c b rule: trm.induct) +apply(nominal_induct M avoiding: a c b rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) apply(blast) apply(rotate_tac 12) @@ -14836,13 +14836,13 @@ assumes a: "a\c" "a\d" "a\b" "c\d" "b\c" shows "M[a\c>b][c\c>d] = M[c\c>d][a\c>b]" using a -apply(nominal_induct M avoiding: a c b d rule: trm.induct) +apply(nominal_induct M avoiding: a c b d rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done lemma crename_interesting3: shows "M[a\c>c][x\n>y] = M[x\n>y][a\c>c]" -apply(nominal_induct M avoiding: a c x y rule: trm.induct) +apply(nominal_induct M avoiding: a c x y rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done @@ -15452,7 +15452,7 @@ assumes a: "distinct [x,y,z]" shows "M[x\n>z][z\n>y] = M[z\n>y][x\n>y]" using a -apply(nominal_induct M avoiding: x y z rule: trm.induct) +apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) apply(blast) apply(blast) @@ -15476,7 +15476,7 @@ assumes a: "x\z" "x\u" "x\y" "z\u" "y\z" shows "M[x\n>y][z\n>u] = M[z\n>u][x\n>y]" using a -apply(nominal_induct M avoiding: x y z u rule: trm.induct) +apply(nominal_induct M avoiding: x y z u rule: trm.strong_induct) apply(auto simp add: rename_fresh simp add: trm.inject alpha) done @@ -15484,7 +15484,7 @@ assumes a: "fic M c" shows "fic (M[x\n>y]) c" using a -apply(nominal_induct M avoiding: c x y rule: trm.induct) +apply(nominal_induct M avoiding: c x y rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh) done @@ -15499,7 +15499,7 @@ assumes a: "fin M z" "z\(x,y)" shows "fin (M[x\n>y]) z" using a -apply(nominal_induct M avoiding: x y z rule: trm.induct) +apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh split: if_splits) done @@ -15509,7 +15509,7 @@ assumes a: "z\(M[x\n>y])" "z\(x,y)" shows "z\M" using a -apply(nominal_induct M avoiding: x y z rule: trm.induct) +apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp) done @@ -15518,7 +15518,7 @@ assumes a: "c\(M[x\n>y])" shows "c\M" using a -apply(nominal_induct M avoiding: x y c rule: trm.induct) +apply(nominal_induct M avoiding: x y c rule: trm.strong_induct) apply(auto split: if_splits simp add: abs_fresh abs_supp fin_supp fresh_atm) done @@ -15526,7 +15526,7 @@ assumes a: "fin (M[x\n>y]) z" "z\(x,y)" shows "fin M z" using a -apply(nominal_induct M avoiding: x y z rule: trm.induct) +apply(nominal_induct M avoiding: x y z rule: trm.strong_induct) apply(auto dest!: fin_elims intro!: fin.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh split: if_splits) apply(auto dest: nrename_fresh_interesting1 simp add: fresh_atm fresh_prod) @@ -15536,7 +15536,7 @@ assumes a: "R[x\n>y] = Cut .M (z).N" "c\(N,R)" "z\(x,y,M,R)" shows "\M' N'. R = Cut .M' (z).N' \ M'[x\n>y] = M \ N'[x\n>y] = N \ c\N' \ z\M'" using a -apply(nominal_induct R avoiding: c y x z M N rule: trm.induct) +apply(nominal_induct R avoiding: c y x z M N rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) apply(auto simp add: alpha fresh_atm) @@ -15561,7 +15561,7 @@ assumes a: "R[x\n>y] = NotR (z).N c" "z\(R,x,y)" shows "\N'. (R = NotR (z).N' c) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: x y c z N rule: trm.induct) +apply(nominal_induct R avoiding: x y c z N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,z)]\trm" in exI) apply(perm_simp) @@ -15575,7 +15575,7 @@ assumes a: "R[x\n>y] = NotL .N z" "c\R" "z\(x,y)" shows "\N'. (R = NotL .N' z) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: x y c z N rule: trm.induct) +apply(nominal_induct R avoiding: x y c z N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname,c)]\trm" in exI) apply(perm_simp) @@ -15589,7 +15589,7 @@ assumes a: "R[x\n>y] = NotL .N u" "c\R" "x\y" shows "(\N'. (R = NotL .N' u) \ N'[x\n>y] = N) \ (\N'. (R = NotL .N' x) \ y=u \ N'[x\n>y] = N)" using a -apply(nominal_induct R avoiding: y u c x N rule: trm.induct) +apply(nominal_induct R avoiding: y u c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(coname,c)]\trm" in exI) apply(perm_simp) @@ -15609,7 +15609,7 @@ assumes a: "R[x\n>y] = NotL .N u" shows "(x=u \ x=y) \ (x\u)" using a -apply(nominal_induct R avoiding: y u c x N rule: trm.induct) +apply(nominal_induct R avoiding: y u c x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -15617,7 +15617,7 @@ assumes a: "R[x\n>y] = AndL1 (z).N u" "z\(R,x,y)" "u\(x,y)" shows "\N'. (R = AndL1 (z).N' u) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: z u x y N rule: trm.induct) +apply(nominal_induct R avoiding: z u x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,z)]\trm" in exI) apply(perm_simp) @@ -15631,7 +15631,7 @@ assumes a: "R[x\n>y] = AndL1 (v).N u" "v\(R,u,x,y)" "x\y" shows "(\N'. (R = AndL1 (v).N' u) \ N'[x\n>y] = N) \ (\N'. (R = AndL1 (v).N' x) \ y=u \ N'[x\n>y] = N)" using a -apply(nominal_induct R avoiding: y u v x N rule: trm.induct) +apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(name1,v)]\trm" in exI) apply(perm_simp) @@ -15651,7 +15651,7 @@ assumes a: "R[x\n>y] = AndL1 (v).N u" shows "(x=u \ x=y) \ (x\u)" using a -apply(nominal_induct R avoiding: y u v x N rule: trm.induct) +apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -15659,7 +15659,7 @@ assumes a: "R[x\n>y] = AndL2 (z).N u" "z\(R,x,y)" "u\(x,y)" shows "\N'. (R = AndL2 (z).N' u) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: z u x y N rule: trm.induct) +apply(nominal_induct R avoiding: z u x y N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(name1,z)]\trm" in exI) apply(perm_simp) @@ -15673,7 +15673,7 @@ assumes a: "R[x\n>y] = AndL2 (v).N u" "v\(R,u,x,y)" "x\y" shows "(\N'. (R = AndL2 (v).N' u) \ N'[x\n>y] = N) \ (\N'. (R = AndL2 (v).N' x) \ y=u \ N'[x\n>y] = N)" using a -apply(nominal_induct R avoiding: y u v x N rule: trm.induct) +apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(name1,v)]\trm" in exI) apply(perm_simp) @@ -15693,7 +15693,7 @@ assumes a: "R[x\n>y] = AndL2 (v).N u" shows "(x=u \ x=y) \ (x\u)" using a -apply(nominal_induct R avoiding: y u v x N rule: trm.induct) +apply(nominal_induct R avoiding: y u v x N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -15701,7 +15701,7 @@ assumes a: "R[x\n>y] = AndR .M .N e" "c\(d,e,N,R)" "d\(c,e,M,R)" shows "\M' N'. R = AndR .M' .N' e \ M'[x\n>y] = M \ N'[x\n>y] = N \ c\N' \ d\M'" using a -apply(nominal_induct R avoiding: x y c d e M N rule: trm.induct) +apply(nominal_induct R avoiding: x y c d e M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha) apply(simp add: fresh_atm fresh_prod) apply(rule_tac x="[(coname1,c)]\trm1" in exI) @@ -15725,7 +15725,7 @@ assumes a: "R[x\n>y] = OrR1 .N d" "c\(R,d)" shows "\N'. (R = OrR1 .N' d) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: x y c d N rule: trm.induct) +apply(nominal_induct R avoiding: x y c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -15739,7 +15739,7 @@ assumes a: "R[x\n>y] = OrR2 .N d" "c\(R,d)" shows "\N'. (R = OrR2 .N' d) \ N'[x\n>y] = N" using a -apply(nominal_induct R avoiding: x y c d N rule: trm.induct) +apply(nominal_induct R avoiding: x y c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) apply(rule_tac x="[(coname1,c)]\trm" in exI) apply(perm_simp) @@ -15753,7 +15753,7 @@ assumes a: "R[u\n>v] = OrL (x).M (y).N z" "x\(y,z,u,v,N,R)" "y\(x,z,u,v,M,R)" "z\(u,v)" shows "\M' N'. R = OrL (x).M' (y).N' z \ M'[u\n>v] = M \ N'[u\n>v] = N \ x\N' \ y\M'" using a -apply(nominal_induct R avoiding: u v x y z M N rule: trm.induct) +apply(nominal_induct R avoiding: u v x y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha fresh_prod fresh_atm) apply(rule_tac x="[(name1,x)]\trm1" in exI) apply(perm_simp) @@ -15774,7 +15774,7 @@ shows "(\M' N'. (R = OrL (v).M' (w).N' u) \ M'[x\n>y] = M \ N'[x\n>y] = N) \ (\M' N'. (R = OrL (v).M' (w).N' x) \ y=u \ M'[x\n>y] = M \ N'[x\n>y] = N)" using a -apply(nominal_induct R avoiding: y x u v w M N rule: trm.induct) +apply(nominal_induct R avoiding: y x u v w M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(name1,v)]\trm1" in exI) apply(perm_simp) @@ -15808,7 +15808,7 @@ assumes a: "R[x\n>y] = OrL (v).M (w).N u" shows "(x=u \ x=y) \ (x\u)" using a -apply(nominal_induct R avoiding: y x w u v M N rule: trm.induct) +apply(nominal_induct R avoiding: y x w u v M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -15816,7 +15816,7 @@ assumes a: "R[x\n>y] = ImpL .M (u).N z" "c\(N,R)" "u\(y,x,z,M,R)" "z\(x,y)" shows "\M' N'. R = ImpL .M' (u).N' z \ M'[x\n>y] = M \ N'[x\n>y] = N \ c\N' \ u\M'" using a -apply(nominal_induct R avoiding: u x c y z M N rule: trm.induct) +apply(nominal_induct R avoiding: u x c y z M N rule: trm.strong_induct) apply(auto split: if_splits simp add: trm.inject alpha fresh_prod fresh_atm) apply(rule_tac x="[(coname,c)]\trm1" in exI) apply(perm_simp) @@ -15837,7 +15837,7 @@ shows "(\M' N'. (R = ImpL .M' (w).N' u) \ M'[x\n>y] = M \ N'[x\n>y] = N) \ (\M' N'. (R = ImpL .M' (w).N' x) \ y=u \ M'[x\n>y] = M \ N'[x\n>y] = N)" using a -apply(nominal_induct R avoiding: y x u c w M N rule: trm.induct) +apply(nominal_induct R avoiding: y x u c w M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_fresh alpha trm.inject) apply(rule_tac x="[(coname,c)]\trm1" in exI) apply(perm_simp) @@ -15871,7 +15871,7 @@ assumes a: "R[x\n>y] = ImpL .M (w).N u" shows "(x=u \ x=y) \ (x\u)" using a -apply(nominal_induct R avoiding: y x w u c M N rule: trm.induct) +apply(nominal_induct R avoiding: y x w u c M N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm alpha abs_fresh trm.inject) done @@ -15879,7 +15879,7 @@ assumes a: "R[u\n>v] = ImpR (x)..N d" "c\(R,d)" "x\(R,u,v)" shows "\N'. (R = ImpR (x)..N' d) \ N'[u\n>v] = N" using a -apply(nominal_induct R avoiding: u v x c d N rule: trm.induct) +apply(nominal_induct R avoiding: u v x c d N rule: trm.strong_induct) apply(auto split: if_splits simp add: fresh_prod fresh_atm abs_perm alpha abs_fresh trm.inject) apply(rule_tac x="[(name,x)]\trm" in exI) apply(perm_simp) @@ -15929,7 +15929,7 @@ assumes a: "N[x\n>y] = Ax z c" shows "\z. N = Ax z c" using a -apply(nominal_induct N avoiding: x y rule: trm.induct) +apply(nominal_induct N avoiding: x y rule: trm.strong_induct) apply(auto split: if_splits) apply(simp add: trm.inject) done @@ -15938,7 +15938,7 @@ assumes a: "fic (M[x\n>y]) c" shows "fic M c" using a -apply(nominal_induct M avoiding: c x y rule: trm.induct) +apply(nominal_induct M avoiding: c x y rule: trm.strong_induct) apply(auto dest!: fic_elims intro!: fic.intros simp add: fresh_prod fresh_atm rename_fresh abs_fresh split: if_splits) apply(auto dest: nrename_fresh_interesting2 simp add: fresh_prod fresh_atm) @@ -17865,9 +17865,9 @@ shows "(pi1\(stn M \n)) = stn (pi1\M) (pi1\\n)" and "(pi2\(stn M \n)) = stn (pi2\M) (pi2\\n)" apply - -apply(nominal_induct M avoiding: \n rule: trm.induct) +apply(nominal_induct M avoiding: \n rule: trm.strong_induct) apply(auto simp add: eqvts fresh_bij fresh_prod eq_bij fresh_atm) -apply(nominal_induct M avoiding: \n rule: trm.induct) +apply(nominal_induct M avoiding: \n rule: trm.strong_induct) apply(auto simp add: eqvts fresh_bij fresh_prod eq_bij fresh_atm) done @@ -17877,9 +17877,9 @@ shows "(pi1\(stc M \c)) = stc (pi1\M) (pi1\\c)" and "(pi2\(stc M \c)) = stc (pi2\M) (pi2\\c)" apply - -apply(nominal_induct M avoiding: \c rule: trm.induct) +apply(nominal_induct M avoiding: \c rule: trm.strong_induct) apply(auto simp add: eqvts fresh_bij fresh_prod eq_bij fresh_atm) -apply(nominal_induct M avoiding: \c rule: trm.induct) +apply(nominal_induct M avoiding: \c rule: trm.strong_induct) apply(auto simp add: eqvts fresh_bij fresh_prod eq_bij fresh_atm) done @@ -17888,7 +17888,7 @@ and x::"name" shows "a\(\n,M) \ a\stn M \n" and "x\(\n,M) \ x\stn M \n" -apply(nominal_induct M avoiding: \n a x rule: trm.induct) +apply(nominal_induct M avoiding: \n a x rule: trm.strong_induct) apply(auto simp add: abs_fresh fresh_prod fresh_atm) apply(rule lookupc_freshness) apply(simp add: fresh_atm) @@ -17901,7 +17901,7 @@ and x::"name" shows "a\(\c,M) \ a\stc M \c" and "x\(\c,M) \ x\stc M \c" -apply(nominal_induct M avoiding: \c a x rule: trm.induct) +apply(nominal_induct M avoiding: \c a x rule: trm.strong_induct) apply(auto simp add: abs_fresh fresh_prod fresh_atm) apply(rule lookupd_freshness) apply(simp add: fresh_atm) @@ -18128,7 +18128,7 @@ and pi2::"coname prm" shows "pi1\(\n,\c) = (pi1\\n),(pi1\\c)<(pi1\M)>" and "pi2\(\n,\c) = (pi2\\n),(pi2\\c)<(pi2\M)>" -apply(nominal_induct M avoiding: \n \c rule: trm.induct) +apply(nominal_induct M avoiding: \n \c rule: trm.strong_induct) apply(auto simp add: eq_bij fresh_bij eqvts perm_pi_simp) apply(rule case_cong) apply(rule find_maps) @@ -18217,7 +18217,7 @@ and b: "a\(\n,\c)" "x\(\n,\c)" shows "M = Ax x a" using a b -apply(nominal_induct M avoiding: \n \c rule: trm.induct) +apply(nominal_induct M avoiding: \n \c rule: trm.strong_induct) apply(auto) apply(drule lookup_unicity) apply(simp)+ @@ -18408,7 +18408,7 @@ assumes a: "x\\n" "x\\c" "x\M" shows "x\\n,\c" using a -apply(nominal_induct M avoiding: x \n \c rule: trm.induct) +apply(nominal_induct M avoiding: x \n \c rule: trm.strong_induct) apply(simp add: lookup_freshness) apply(auto simp add: abs_fresh)[1] apply(simp add: lookupc_freshness) @@ -18494,7 +18494,7 @@ assumes a: "a\\n" "a\\c" "a\M" shows "a\\n,\c" using a -apply(nominal_induct M avoiding: a \n \c rule: trm.induct) +apply(nominal_induct M avoiding: a \n \c rule: trm.strong_induct) apply(simp add: lookup_freshness) apply(auto simp add: abs_fresh)[1] apply(simp add: lookupd_freshness) @@ -18579,7 +18579,7 @@ assumes a: "a\(\n,\c)" shows "\n,((a,x,P)#\c) = ((\n,\c){a:=(x).P})" using a -apply(nominal_induct M avoiding: a x \n \c P rule: trm.induct) +apply(nominal_induct M avoiding: a x \n \c P rule: trm.strong_induct) apply(auto simp add: fresh_list_cons fresh_prod)[1] apply(simp add: lookup_csubst) apply(simp add: fresh_list_cons fresh_prod) @@ -18866,7 +18866,7 @@ assumes a: "x\(\n,\c)" shows "((x,a,P)#\n),\c = ((\n,\c){x:=.P})" using a -apply(nominal_induct M avoiding: a x \n \c P rule: trm.induct) +apply(nominal_induct M avoiding: a x \n \c P rule: trm.strong_induct) apply(auto simp add: fresh_list_cons fresh_prod)[1] apply(simp add: lookup_fresh) apply(rule lookupb_lookupa) @@ -19337,7 +19337,7 @@ and pi2::"coname prm" and B::"ty" shows "pi1\B=B" and "pi2\B=B" -apply(nominal_induct B rule: ty.induct) +apply(nominal_induct B rule: ty.strong_induct) apply(auto simp add: perm_string) done @@ -20394,7 +20394,7 @@ lemma id_redu: shows "(idn \ x),(idc \ a) \\<^isub>a* M" -apply(nominal_induct M avoiding: \ \ x a rule: trm.induct) +apply(nominal_induct M avoiding: \ \ x a rule: trm.strong_induct) apply(auto) (* Ax *) apply(case_tac "name\(idn \ x)") diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Compile.thy --- a/src/HOL/Nominal/Examples/Compile.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Compile.thy Thu May 22 16:34:41 2008 +0200 @@ -137,7 +137,7 @@ and t2::"trmI" and x::"name" shows "pi\(t1[x::=t2]) = ((pi\t1)[(pi\x)::=(pi\t2)])" - apply (nominal_induct t1 avoiding: x t2 rule: trmI.induct) + apply (nominal_induct t1 avoiding: x t2 rule: trmI.strong_induct) apply (simp_all add: Isubst.simps eqvts fresh_bij) done @@ -146,7 +146,7 @@ and t2::"trmI" and x::"name" shows "((supp (t1[x::=t2]))::name set) \ (supp t2)\((supp t1)-{x})" - apply (nominal_induct t1 avoiding: x t2 rule: trmI.induct) + apply (nominal_induct t1 avoiding: x t2 rule: trmI.strong_induct) apply (auto simp add: Isubst.simps trmI.supp supp_atm abs_supp supp_nat) apply blast+ done diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Contexts.thy --- a/src/HOL/Nominal/Examples/Contexts.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Contexts.thy Thu May 22 16:34:41 2008 +0200 @@ -93,7 +93,7 @@ lemma ctx_compose: shows "(E1 \ E2)\t\ = E1\E2\t\\" -by (induct E1 rule: ctx.weak_induct) (auto) +by (induct E1 rule: ctx.induct) (auto) text {* Beta-reduction via contexts in the Felleisen-Hieb style. *} @@ -118,7 +118,7 @@ assumes a: "t \o t'" shows "E\t\ \o E\t'\" using a -by (induct E rule: ctx.weak_induct) (auto) +by (induct E rule: ctx.induct) (auto) lemma ctx_red_in_ctx: assumes a: "t \x t'" diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Crary.thy --- a/src/HOL/Nominal/Examples/Crary.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Crary.thy Thu May 22 16:34:41 2008 +0200 @@ -34,7 +34,7 @@ fixes T::"ty" and pi::"name prm" shows "pi\T = T" - by (induct T rule: ty.weak_induct) (simp_all) + by (induct T rule: ty.induct) (simp_all) lemma fresh_ty[simp]: fixes x::"name" @@ -45,7 +45,7 @@ lemma ty_cases: fixes T::ty shows "(\ T\<^isub>1 T\<^isub>2. T=T\<^isub>1\T\<^isub>2) \ T=TUnit \ T=TBase" -by (induct T rule:ty.weak_induct) (auto) +by (induct T rule:ty.induct) (auto) instance ty :: size .. @@ -58,7 +58,7 @@ lemma ty_size_greater_zero[simp]: fixes T::"ty" shows "size T > 0" -by (nominal_induct rule:ty.induct) (simp_all) +by (nominal_induct rule: ty.strong_induct) (simp_all) section {* Substitutions *} @@ -119,7 +119,7 @@ lemma subst_eqvt[eqvt]: fixes pi::"name prm" shows "pi\(t[x::=t']) = (pi\t)[(pi\x)::=(pi\t')]" - by (nominal_induct t avoiding: x t' rule: trm.induct) + by (nominal_induct t avoiding: x t' rule: trm.strong_induct) (perm_simp add: fresh_bij)+ lemma subst_rename: @@ -127,7 +127,7 @@ assumes a: "c\t\<^isub>1" shows "t\<^isub>1[a::=t\<^isub>2] = ([(c,a)]\t\<^isub>1)[c::=t\<^isub>2]" using a -apply(nominal_induct t\<^isub>1 avoiding: a c t\<^isub>2 rule: trm.induct) +apply(nominal_induct t\<^isub>1 avoiding: a c t\<^isub>2 rule: trm.strong_induct) apply(simp add: trm.inject calc_atm fresh_atm abs_fresh perm_nat_def)+ done @@ -136,7 +136,7 @@ assumes a: "z\t" "z\\" shows "z\(\)" using a -by (nominal_induct t avoiding: z \ t rule: trm.induct) +by (nominal_induct t avoiding: z \ t rule: trm.strong_induct) (auto simp add: abs_fresh lookup_fresh) lemma fresh_subst'': @@ -144,7 +144,7 @@ assumes "z\t\<^isub>2" shows "z\t\<^isub>1[z::=t\<^isub>2]" using assms -by (nominal_induct t\<^isub>1 avoiding: t\<^isub>2 z rule: trm.induct) +by (nominal_induct t\<^isub>1 avoiding: t\<^isub>2 z rule: trm.strong_induct) (auto simp add: abs_fresh fresh_nat fresh_atm) lemma fresh_subst': @@ -152,7 +152,7 @@ assumes "z\[y].t\<^isub>1" "z\t\<^isub>2" shows "z\t\<^isub>1[y::=t\<^isub>2]" using assms -by (nominal_induct t\<^isub>1 avoiding: y t\<^isub>2 z rule: trm.induct) +by (nominal_induct t\<^isub>1 avoiding: y t\<^isub>2 z rule: trm.strong_induct) (auto simp add: abs_fresh fresh_nat fresh_atm) lemma fresh_subst: @@ -166,7 +166,7 @@ assumes "x\t" shows "((x,u)#\) = \" using assms -proof (nominal_induct t avoiding: x u \ rule: trm.induct) +proof (nominal_induct t avoiding: x u \ rule: trm.strong_induct) case (Lam y t x u) have fs: "y\\" "y\x" "y\u" by fact+ moreover have "x\ Lam [y].t" by fact @@ -184,7 +184,7 @@ assumes a: "x\t" shows "t[x::=t'] = t" using a -by (nominal_induct t avoiding: x t' rule: trm.induct) +by (nominal_induct t avoiding: x t' rule: trm.strong_induct) (auto simp add: fresh_atm abs_fresh) lemma subst_fun_eq: @@ -207,14 +207,14 @@ lemma psubst_empty[simp]: shows "[] = t" -by (nominal_induct t rule: trm.induct) +by (nominal_induct t rule: trm.strong_induct) (auto simp add: fresh_list_nil) lemma psubst_subst_psubst: assumes h:"c\\" shows "\[c::=s] = ((c,s)#\)" using h -by (nominal_induct t avoiding: \ c s rule: trm.induct) +by (nominal_induct t avoiding: \ c s rule: trm.strong_induct) (auto simp add: fresh_list_cons fresh_atm forget lookup_fresh lookup_fresh' fresh_psubst) lemma subst_fresh_simp: @@ -227,7 +227,7 @@ assumes "x\\" shows "\ = \[x::=\]" using assms -proof (nominal_induct t avoiding: x u \ rule: trm.induct) +proof (nominal_induct t avoiding: x u \ rule: trm.strong_induct) case (Var n x u \) { assume "x=n" moreover have "x\\" by fact @@ -654,7 +654,7 @@ lemma main_lemma: shows "\ \ s is t : T \ valid \ \ \ \ s \ t : T" and "\ \ p \ q : T \ \ \ p is q : T" -proof (nominal_induct T arbitrary: \ s t p q rule: ty.induct) +proof (nominal_induct T arbitrary: \ s t p q rule: ty.strong_induct) case (Arrow T\<^isub>1 T\<^isub>2) { case (1 \ s t) @@ -704,14 +704,14 @@ assumes a: "\ \ s is t : T" shows "\ \ t is s : T" using a -by (nominal_induct arbitrary: \ s t rule: ty.induct) +by (nominal_induct arbitrary: \ s t rule: ty.strong_induct) (auto simp add: algorithmic_symmetry) lemma logical_transitivity: assumes "\ \ s is t : T" "\ \ t is u : T" shows "\ \ s is u : T" using assms -proof (nominal_induct arbitrary: \ s t u rule:ty.induct) +proof (nominal_induct arbitrary: \ s t u rule:ty.strong_induct) case TBase then show "\ \ s is u : TBase" by (auto elim: algorithmic_transitivity) next @@ -738,14 +738,14 @@ and c: "t' \ t" shows "\ \ s' is t' : T" using a b c algorithmic_weak_head_closure -by (nominal_induct arbitrary: \ s t s' t' rule: ty.induct) +by (nominal_induct arbitrary: \ s t s' t' rule: ty.strong_induct) (auto, blast) lemma logical_weak_head_closure': assumes "\ \ s is t : T" and "s' \ s" shows "\ \ s' is t : T" using assms -proof (nominal_induct arbitrary: \ s t s' rule: ty.induct) +proof (nominal_induct arbitrary: \ s t s' rule: ty.strong_induct) case (TBase \ s t s') then show ?case by force next diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Fsub.thy --- a/src/HOL/Nominal/Examples/Fsub.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Fsub.thy Thu May 22 16:34:41 2008 +0200 @@ -156,7 +156,7 @@ fixes pi::"vrs prm" and S::"ty" shows "pi\S = S" -by (induct S rule: ty.weak_induct) (auto simp add: calc_atm) +by (induct S rule: ty.induct) (auto simp add: calc_atm) lemma ty_context_vrs_prm_simp: fixes pi::"vrs prm" @@ -341,7 +341,7 @@ and b: "T closed_in \" shows "\ \ T <: T" using a b -proof(nominal_induct T avoiding: \ rule: ty.induct) +proof(nominal_induct T avoiding: \ rule: ty.strong_induct) case (Forall X T\<^isub>1 T\<^isub>2) have ih_T\<^isub>1: "\\. \\ \ ok; T\<^isub>1 closed_in \\ \ \ \ T\<^isub>1 <: T\<^isub>1" by fact have ih_T\<^isub>2: "\\. \\ \ ok; T\<^isub>2 closed_in \\ \ \ \ T\<^isub>2 <: T\<^isub>2" by fact @@ -364,7 +364,7 @@ and b: "T closed_in \" shows "\ \ T <: T" using a b -apply(nominal_induct T avoiding: \ rule: ty.induct) +apply(nominal_induct T avoiding: \ rule: ty.strong_induct) apply(auto simp add: ty.supp abs_supp supp_atm closed_in_def) --{* Too bad that this instantiation cannot be found automatically by \isakeyword{auto}; \isakeyword{blast} would find it if we had not used diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Height.thy --- a/src/HOL/Nominal/Examples/Height.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Height.thy Thu May 22 16:34:41 2008 +0200 @@ -49,7 +49,7 @@ lemma height_ge_one: shows "1 \ (height e)" -by (nominal_induct e rule: lam.induct) (simp_all) +by (nominal_induct e rule: lam.strong_induct) (simp_all) text {* Unlike the proplem suggested by Wang, however, the @@ -58,7 +58,7 @@ theorem height_subst: shows "height (e[x::=e']) \ ((height e) - 1) + (height e')" -proof (nominal_induct e avoiding: x e' rule: lam.induct) +proof (nominal_induct e avoiding: x e' rule: lam.strong_induct) case (Var y) have "1 \ height e'" by (rule height_ge_one) then show "height (Var y[x::=e']) \ height (Var y) - 1 + height e'" by simp diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Lam_Funs.thy --- a/src/HOL/Nominal/Examples/Lam_Funs.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Lam_Funs.thy Thu May 22 16:34:41 2008 +0200 @@ -61,7 +61,7 @@ lemma frees_equals_support: shows "frees t = supp t" -by (nominal_induct t rule: lam.induct) +by (nominal_induct t rule: lam.strong_induct) (simp_all add: lam.supp supp_atm abs_supp) text {* Parallel and single capture-avoiding substitution. *} @@ -96,7 +96,7 @@ fixes pi::"name prm" and t::"lam" shows "pi\(\) = (pi\\)<(pi\t)>" -by (nominal_induct t avoiding: \ rule: lam.induct) +by (nominal_induct t avoiding: \ rule: lam.strong_induct) (simp_all add: eqvts fresh_bij) abbreviation @@ -112,7 +112,7 @@ lemma subst_supp: shows "supp(t1[a::=t2]) \ (((supp(t1)-{a})\supp(t2))::name set)" -apply(nominal_induct t1 avoiding: a t2 rule: lam.induct) +apply(nominal_induct t1 avoiding: a t2 rule: lam.strong_induct) apply(auto simp add: lam.supp supp_atm fresh_prod abs_supp) apply(blast)+ done @@ -154,6 +154,6 @@ lemma clam_compose: shows "(E1 \ E2)\t\ = E1\E2\t\\" -by (induct E1 rule: clam.weak_induct) (auto) +by (induct E1 rule: clam.induct) (auto) end diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/LocalWeakening.thy --- a/src/HOL/Nominal/Examples/LocalWeakening.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/LocalWeakening.thy Thu May 22 16:34:41 2008 +0200 @@ -26,7 +26,7 @@ lemma llam_cases: "(\a. t = lPar a) \ (\n. t = lVar n) \ (\t1 t2. t = lApp t1 t2) \ (\t1. t = lLam t1)" -by (induct t rule: llam.weak_induct) +by (induct t rule: llam.induct) (auto simp add: llam.inject) consts llam_size :: "llam \ nat" @@ -61,7 +61,7 @@ lemma vsub_eqvt[eqvt]: fixes pi::"name prm" shows "pi\(vsub t n s) = vsub (pi\t) (pi\n) (pi\s)" -by (induct t arbitrary: n rule: llam.weak_induct) +by (induct t arbitrary: n rule: llam.induct) (simp_all add: perm_nat_def) constdefs @@ -83,7 +83,7 @@ fixes x::"name" and T::"ty" shows "x\T" -by (induct T rule: ty.weak_induct) +by (induct T rule: ty.induct) (simp_all add: fresh_nat) text {* valid contexts *} diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/SN.thy --- a/src/HOL/Nominal/Examples/SN.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/SN.thy Thu May 22 16:34:41 2008 +0200 @@ -12,14 +12,14 @@ assumes a: "c\t1" shows "t1[a::=t2] = ([(c,a)]\t1)[c::=t2]" using a -by (nominal_induct t1 avoiding: a c t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a c t2 rule: lam.strong_induct) (auto simp add: calc_atm fresh_atm abs_fresh) lemma forget: assumes a: "a\t1" shows "t1[a::=t2] = t1" using a -by (nominal_induct t1 avoiding: a t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a t2 rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_fact: @@ -27,7 +27,7 @@ assumes a: "a\t1" "a\t2" shows "a\t1[b::=t2]" using a -by (nominal_induct t1 avoiding: a b t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a b t2 rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_fact': @@ -35,7 +35,7 @@ assumes a: "a\t2" shows "a\t1[a::=t2]" using a -by (nominal_induct t1 avoiding: a t2 rule: lam.induct) +by (nominal_induct t1 avoiding: a t2 rule: lam.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma subst_lemma: @@ -43,12 +43,12 @@ and b: "x\L" shows "M[x::=N][y::=L] = M[y::=L][x::=N[y::=L]]" using a b -by (nominal_induct M avoiding: x y N L rule: lam.induct) +by (nominal_induct M avoiding: x y N L rule: lam.strong_induct) (auto simp add: fresh_fact forget) lemma id_subs: shows "t[x::=Var x] = t" - by (nominal_induct t avoiding: x rule: lam.induct) + by (nominal_induct t avoiding: x rule: lam.strong_induct) (simp_all add: fresh_atm) lemma lookup_fresh: @@ -69,7 +69,7 @@ assumes h:"c\\" shows "(\)[c::=s] = ((c,s)#\)" using h -by (nominal_induct t avoiding: \ c s rule: lam.induct) +by (nominal_induct t avoiding: \ c s rule: lam.strong_induct) (auto simp add: fresh_list_cons fresh_atm forget lookup_fresh lookup_fresh') inductive @@ -122,7 +122,7 @@ fixes a ::"name" and \ ::"ty" shows "a\\" -by (nominal_induct \ rule: ty.induct) +by (nominal_induct \ rule: ty.strong_induct) (auto simp add: fresh_nat) (* valid contexts *) @@ -354,7 +354,7 @@ text {* properties of the candiadates *} lemma RED_props: shows "CR1 \" and "CR2 \" and "CR3 \" -proof (nominal_induct \ rule: ty.induct) +proof (nominal_induct \ rule: ty.strong_induct) case (TVar a) { case 1 show "CR1 (TVar a)" by (simp add: CR1_def) next @@ -553,7 +553,7 @@ lemma id_apply: shows "(id \) = t" -by (nominal_induct t avoiding: \ rule: lam.induct) +by (nominal_induct t avoiding: \ rule: lam.strong_induct) (auto simp add: id_maps id_fresh) lemma id_closes: diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/SOS.thy --- a/src/HOL/Nominal/Examples/SOS.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/SOS.thy Thu May 22 16:34:41 2008 +0200 @@ -31,7 +31,7 @@ fixes x::"name" and T::"ty" shows "x\T" -by (induct T rule: ty.weak_induct) +by (induct T rule: ty.induct) (auto simp add: fresh_nat) text {* Parallel and single substitution. *} @@ -80,7 +80,7 @@ fixes pi::"name prm" and t::"trm" shows "pi\(\) = (pi\\)<(pi\t)>" -by (nominal_induct t avoiding: \ rule: trm.induct) +by (nominal_induct t avoiding: \ rule: trm.strong_induct) (perm_simp add: fresh_bij lookup_eqvt)+ lemma fresh_psubst: @@ -89,12 +89,12 @@ assumes "z\t" and "z\\" shows "z\(\)" using assms -by (nominal_induct t avoiding: z \ t rule: trm.induct) +by (nominal_induct t avoiding: z \ t rule: trm.strong_induct) (auto simp add: abs_fresh lookup_fresh) lemma psubst_empty[simp]: shows "[] = t" - by (nominal_induct t rule: trm.induct) + by (nominal_induct t rule: trm.strong_induct) (auto simp add: fresh_list_nil) text {* Single substitution *} @@ -116,28 +116,28 @@ assumes a: "z\t\<^isub>1" "z\t\<^isub>2" shows "z\t\<^isub>1[y::=t\<^isub>2]" using a -by (nominal_induct t\<^isub>1 avoiding: z y t\<^isub>2 rule: trm.induct) +by (nominal_induct t\<^isub>1 avoiding: z y t\<^isub>2 rule: trm.strong_induct) (auto simp add: abs_fresh fresh_atm) lemma fresh_subst': assumes "x\e'" shows "x\e[x::=e']" using assms -by (nominal_induct e avoiding: x e' rule: trm.induct) +by (nominal_induct e avoiding: x e' rule: trm.strong_induct) (auto simp add: fresh_atm abs_fresh fresh_nat) lemma forget: assumes a: "x\e" shows "e[x::=e'] = e" using a -by (nominal_induct e avoiding: x e' rule: trm.induct) +by (nominal_induct e avoiding: x e' rule: trm.strong_induct) (auto simp add: fresh_atm abs_fresh) lemma psubst_subst_psubst: assumes h: "x\\" shows "\[x::=e'] = ((x,e')#\)" using h -by (nominal_induct e avoiding: \ x e' rule: trm.induct) +by (nominal_induct e avoiding: \ x e' rule: trm.strong_induct) (auto simp add: fresh_list_cons fresh_atm forget lookup_fresh lookup_fresh') text {* Typing Judgements *} @@ -264,7 +264,7 @@ and "\ \ e': T'" shows "\ \ e[x::=e'] : T" using assms -proof (nominal_induct e avoiding: \ e' x arbitrary: T rule: trm.induct) +proof (nominal_induct e avoiding: \ e' x arbitrary: T rule: trm.strong_induct) case (Var y \ e' x T) have h1: "(x,T')#\ \ Var y : T" by fact have h2: "\ \ e' : T'" by fact @@ -421,7 +421,7 @@ assumes a: "x\V T" shows "(pi\x)\V T" using a -apply(nominal_induct T arbitrary: pi x rule: ty.induct) +apply(nominal_induct T arbitrary: pi x rule: ty.strong_induct) apply(auto simp add: trm.inject) apply(simp add: eqvts) apply(rule_tac x="pi\xa" in exI) @@ -477,7 +477,7 @@ lemma Vs_are_values: assumes a: "e \ V T" shows "val e" -using a by (nominal_induct T arbitrary: e rule: ty.induct) (auto) +using a by (nominal_induct T arbitrary: e rule: ty.strong_induct) (auto) lemma values_reduce_to_themselves: assumes a: "val v" @@ -531,7 +531,7 @@ and h2: "\ Vcloses \" shows "\v. \ \ v \ v \ V T" using h2 h1 -proof(nominal_induct e avoiding: \ \ arbitrary: T rule: trm.induct) +proof(nominal_induct e avoiding: \ \ arbitrary: T rule: trm.strong_induct) case (App e\<^isub>1 e\<^isub>2 \ \ T) have ih\<^isub>1:"\\ \ T. \\ Vcloses \; \ \ e\<^isub>1 : T\ \ \v. \1> \ v \ v \ V T" by fact have ih\<^isub>2:"\\ \ T. \\ Vcloses \; \ \ e\<^isub>2 : T\ \ \v. \2> \ v \ v \ V T" by fact diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/Examples/Weakening.thy --- a/src/HOL/Nominal/Examples/Weakening.thy Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/Examples/Weakening.thy Thu May 22 16:34:41 2008 +0200 @@ -26,7 +26,7 @@ fixes x::"name" and T::"ty" shows "x\T" -by (nominal_induct T rule: ty.induct) +by (nominal_induct T rule: ty.strong_induct) (auto simp add: fresh_string) text {* diff -r 003b5781b845 -r 071f40487734 src/HOL/Nominal/nominal_package.ML --- a/src/HOL/Nominal/nominal_package.ML Wed May 21 22:04:58 2008 +0200 +++ b/src/HOL/Nominal/nominal_package.ML Thu May 22 16:34:41 2008 +0200 @@ -1094,8 +1094,8 @@ val (_, thy9) = thy8 |> Sign.add_path big_name |> - PureThy.add_thms [(("weak_induct", dt_induct), [case_names_induct])] ||>> - PureThy.add_thmss [(("weak_inducts", projections dt_induct), [case_names_induct])] ||> + PureThy.add_thms [(("induct", dt_induct), [case_names_induct])] ||>> + PureThy.add_thmss [(("inducts", projections dt_induct), [case_names_induct])] ||> Sign.parent_path ||>> DatatypeAux.store_thmss_atts "distinct" new_type_names simp_atts distinct_thms ||>> DatatypeAux.store_thmss "constr_rep" new_type_names constr_rep_thmss ||>> @@ -1378,9 +1378,9 @@ val (_, thy10) = thy9 |> Sign.add_path big_name |> - PureThy.add_thms [(("induct'", induct_aux), [])] ||>> - PureThy.add_thms [(("induct", induct), [case_names_induct])] ||>> - PureThy.add_thmss [(("inducts", projections induct), [case_names_induct])]; + PureThy.add_thms [(("strong_induct'", induct_aux), [])] ||>> + PureThy.add_thms [(("strong_induct", induct), [case_names_induct])] ||>> + PureThy.add_thmss [(("strong_inducts", projections induct), [case_names_induct])]; (**** recursion combinator ****)