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)")