# HG changeset patch # User wenzelm # Date 1181855076 -7200 # Node ID 31781b2de73da5176096b5c20cca6d852e5d6eaf # Parent 4b03e3586f7f6c2f418bc72ff4acef258845e9ba tuned proofs: avoid implicit prems; diff -r 4b03e3586f7f -r 31781b2de73d src/FOL/IFOL.thy --- a/src/FOL/IFOL.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/FOL/IFOL.thy Thu Jun 14 23:04:36 2007 +0200 @@ -319,27 +319,23 @@ ***) lemma ex1I: - assumes "P(a)" - and "!!x. P(x) ==> x=a" - shows "EX! x. P(x)" + "P(a) \ (!!x. P(x) ==> x=a) \ EX! x. P(x)" apply (unfold ex1_def) - apply (assumption | rule assms exI conjI allI impI)+ + apply (assumption | rule exI conjI allI impI)+ done (*Sometimes easier to use: the premises have no shared variables. Safe!*) lemma ex_ex1I: - assumes ex: "EX x. P(x)" - and eq: "!!x y. [| P(x); P(y) |] ==> x=y" - shows "EX! x. P(x)" - apply (rule ex [THEN exE]) - apply (assumption | rule ex1I eq)+ + "EX x. P(x) \ (!!x y. [| P(x); P(y) |] ==> x=y) \ EX! x. P(x)" + apply (erule exE) + apply (rule ex1I) + apply assumption + apply assumption done lemma ex1E: - assumes ex1: "EX! x. P(x)" - and r: "!!x. [| P(x); ALL y. P(y) --> y=x |] ==> R" - shows R - apply (insert ex1, unfold ex1_def) + "EX! x. P(x) \ (!!x. [| P(x); ALL y. P(y) --> y=x |] ==> R) \ R" + apply (unfold ex1_def) apply (assumption | erule exE conjE)+ done @@ -572,11 +568,11 @@ (*Simplifies the implication. Classical version is stronger. Still UNSAFE since ~P must be provable -- backtracking needed. *) lemma not_impE: - assumes major: "~P --> S" - and r1: "P ==> False" - and r2: "S ==> R" - shows R - apply (assumption | rule notI impI major [THEN mp] r1 r2)+ + "~P --> S \ (P ==> False) \ (S ==> R) \ R" + apply (drule mp) + apply (rule notI) + apply assumption + apply assumption done (*Simplifies the implication. UNSAFE. *) @@ -595,7 +591,7 @@ and r1: "!!x. P(x)" and r2: "S ==> R" shows R - apply (assumption | rule allI impI major [THEN mp] r1 r2)+ + apply (rule allI impI major [THEN mp] r1 r2)+ done (*Unsafe: (EX x.P(x))-->S is equivalent to ALL x.P(x)-->S. *) @@ -609,10 +605,8 @@ (*** Courtesy of Krzysztof Grabczewski ***) lemma disj_imp_disj: - assumes major: "P|Q" - and "P==>R" and "Q==>S" - shows "R|S" - apply (rule disjE [OF major]) + "P|Q \ (P==>R) \ (Q==>S) \ R|S" + apply (erule disjE) apply (rule disjI1) apply assumption apply (rule disjI2) apply assumption done diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Isar_examples/BasicLogic.thy --- a/src/HOL/Isar_examples/BasicLogic.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Isar_examples/BasicLogic.thy Thu Jun 14 23:04:36 2007 +0200 @@ -22,7 +22,7 @@ lemma I: "A --> A" proof assume A - show A by assumption + show A by fact qed lemma K: "A --> B --> A" @@ -30,7 +30,7 @@ assume A show "B --> A" proof - show A by assumption + show A by fact qed qed @@ -45,8 +45,8 @@ assume A show C proof (rule mp) - show "B --> C" by (rule mp) assumption+ - show B by (rule mp) assumption+ + show "B --> C" by (rule mp) fact+ + show B by (rule mp) fact+ qed qed qed @@ -65,7 +65,7 @@ lemma "A --> A" proof assume A - show A by assumption + show A by fact+ qed text {* @@ -117,7 +117,7 @@ lemma "A --> B --> A" proof (intro impI) assume A - show A by assumption + show A by fact qed text {* @@ -162,8 +162,8 @@ assume "A & B" show "B & A" proof - show B by (rule conjunct2) assumption - show A by (rule conjunct1) assumption + show B by (rule conjunct2) fact + show A by (rule conjunct1) fact qed qed @@ -294,9 +294,9 @@ proof -- {* rule @{text disjE}: \smash{$\infer{C}{A \disj B & \infer*{C}{[A]} & \infer*{C}{[B]}}$} *} - assume P show P by assumption + assume P show P by fact next - assume P show P by assumption + assume P show P by fact qed qed @@ -330,8 +330,8 @@ then show P proof assume P - show P by assumption - show P by assumption + show P by fact + show P by fact qed qed @@ -439,8 +439,8 @@ assume r: "A ==> B ==> C" show C proof (rule r) - show A by (rule conjunct1) assumption - show B by (rule conjunct2) assumption + show A by (rule conjunct1) fact + show B by (rule conjunct2) fact qed qed diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Lattice/Bounds.thy --- a/src/HOL/Lattice/Bounds.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Lattice/Bounds.thy Thu Jun 14 23:04:36 2007 +0200 @@ -193,8 +193,8 @@ show ?thesis proof show "x \ x" .. - show "x \ y" by assumption - fix z assume "z \ x" and "z \ y" show "z \ x" by assumption + show "x \ y" by fact + fix z assume "z \ x" and "z \ y" show "z \ x" by fact qed qed @@ -203,10 +203,10 @@ assume "x \ y" show ?thesis proof - show "x \ y" by assumption + show "x \ y" by fact show "y \ y" .. fix z assume "x \ z" and "y \ z" - show "y \ z" by assumption + show "y \ z" by fact qed qed diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Lattice/Lattice.thy --- a/src/HOL/Lattice/Lattice.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Lattice/Lattice.thy Thu Jun 14 23:04:36 2007 +0200 @@ -232,7 +232,7 @@ show "x \ x" .. show "x \ x \ y" .. fix z assume "z \ x" and "z \ x \ y" - show "z \ x" by assumption + show "z \ x" by fact qed theorem join_meet_absorb: "x \ (x \ y) = x" diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/CR.thy --- a/src/HOL/Nominal/Examples/CR.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/CR.thy Thu Jun 14 23:04:36 2007 +0200 @@ -24,7 +24,7 @@ ultimately show "(App M1 M2)[x::=P] = (App M1 M2)" by simp next case (Lam z M) - have vc: "z\x" "z\P" by fact + have vc: "z\x" "z\P" by fact+ have ih: "x\M \ M[x::=P] = M" by fact have asm: "x\Lam [z].M" by fact then have "x\M" using vc by (simp add: fresh_atm abs_fresh) @@ -46,7 +46,7 @@ using asms proof (nominal_induct N avoiding: z y L rule: lam.induct) case (Var u) - have "z\(Var u)" "z\L" by fact + have "z\(Var u)" "z\L" by fact+ thus "z\((Var u)[y::=L])" by simp next case (App N1 N2) @@ -54,11 +54,11 @@ moreover have ih2: "\z\N2; z\L\ \ z\N2[y::=L]" by fact moreover - have "z\App N1 N2" "z\L" by fact + have "z\App N1 N2" "z\L" by fact+ ultimately show "z\((App N1 N2)[y::=L])" by simp next case (Lam u N1) - have vc: "u\z" "u\y" "u\L" by fact + have vc: "u\z" "u\y" "u\L" by fact+ have "z\Lam [u].N1" by fact hence "z\N1" using vc by (simp add: abs_fresh fresh_atm) moreover @@ -123,7 +123,7 @@ have ih: "\x\y; x\L\ \ M1[x::=N][y::=L] = M1[y::=L][x::=N[y::=L]]" by fact have "x\y" by fact have "x\L" by fact - have fs: "z\x" "z\y" "z\N" "z\L" by fact + have fs: "z\x" "z\y" "z\N" "z\L" by fact+ hence "z\N[y::=L]" by (simp add: fresh_fact) show "(Lam [z].M1)[x::=N][y::=L] = (Lam [z].M1)[y::=L][x::=N[y::=L]]" (is "?LHS=?RHS") proof - @@ -334,7 +334,7 @@ using a proof (nominal_induct M avoiding: x N N' rule: lam.induct) case (Var y) - show "Var y[x::=N] \\<^isub>1 Var y[x::=N']" by (cases "x=y", auto) + thus "Var y[x::=N] \\<^isub>1 Var y[x::=N']" by (cases "x=y") auto next case (App P Q) (* application case - third line *) thus "(App P Q)[x::=N] \\<^isub>1 (App P Q)[x::=N']" using o2 by simp @@ -367,7 +367,7 @@ thus ?case by simp next case (o4 a N1 N2 M1 M2 N N' x) - have vc: "a\N" "a\N'" "a\x" "a\N1" "a\N2" by fact + have vc: "a\N" "a\N'" "a\x" "a\N1" "a\N2" by fact+ have asm: "N\\<^isub>1N'" by fact show ?case proof - @@ -401,7 +401,7 @@ thus "\M3. M\\<^isub>1M3 \ M2\\<^isub>1M3" by blast next case (o4 x Q Q' P P') (* case 2 --- a beta-reduction occurs*) - have vc: "x\Q" "x\Q'" by fact + have vc: "x\Q" "x\Q'" by fact+ have i1: "\M2. Q \\<^isub>1M2 \ (\M3. Q'\\<^isub>1M3 \ M2\\<^isub>1M3)" by fact have i2: "\M2. P \\<^isub>1M2 \ (\M3. P'\\<^isub>1M3 \ M2\\<^isub>1M3)" by fact have "App (Lam [x].P) Q \\<^isub>1 M2" by fact @@ -559,8 +559,8 @@ case o3 thus ?case by (blast intro!: one_lam_cong) next case (o4 a s1 s2 t1 t2) - have vc: "a\s1" "a\s2" by fact - have a1: "t1\\<^isub>\\<^sup>*t2" and a2: "s1\\<^isub>\\<^sup>*s2" by fact + have vc: "a\s1" "a\s2" by fact+ + have a1: "t1\\<^isub>\\<^sup>*t2" and a2: "s1\\<^isub>\\<^sup>*s2" by fact+ have c1: "(App (Lam [a].t2) s2) \\<^isub>\ (t2 [a::= s2])" using vc by (simp add: b4) from a1 a2 have c2: "App (Lam [a].t1 ) s1 \\<^isub>\\<^sup>* App (Lam [a].t2 ) s2" by (blast intro!: one_app_cong one_lam_cong) diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/Class.thy --- a/src/HOL/Nominal/Examples/Class.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/Class.thy Thu Jun 14 23:04:36 2007 +0200 @@ -5878,7 +5878,7 @@ qed next case (Cut b M z N x a y) - have fs: "b\x" "b\a" "b\y" "b\N" "z\x" "z\a" "z\y" "z\M" by fact + have fs: "b\x" "b\a" "b\y" "b\N" "z\x" "z\a" "z\y" "z\M" by fact+ have ih1: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have ih2: "N{x:=.Ax y a} \\<^isub>a* N[x\n>y]" by fact show "(Cut .M (z).N){x:=.Ax y a} \\<^isub>a* (Cut .M (z).N)[x\n>y]" @@ -5900,14 +5900,14 @@ qed next case (NotR z M b x a y) - have fs: "z\x" "z\a" "z\y" "z\b" by fact + have fs: "z\x" "z\a" "z\y" "z\b" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have "(NotR (z).M b){x:=.Ax y a} = NotR (z).(M{x:=.Ax y a}) b" using fs by simp also have "\ \\<^isub>a* NotR (z).(M[x\n>y]) b" using ih by (auto intro: a_star_congs) finally show "(NotR (z).M b){x:=.Ax y a} \\<^isub>a* (NotR (z).M b)[x\n>y]" using fs by simp next case (NotL b M z x a y) - have fs: "b\x" "b\a" "b\y" "b\z" by fact + have fs: "b\x" "b\a" "b\y" "b\z" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact show "(NotL .M z){x:=.Ax y a} \\<^isub>a* (NotL .M z)[x\n>y]" proof(cases "z=x") @@ -5939,7 +5939,7 @@ qed next case (AndR c M d N e x a y) - have fs: "c\x" "c\a" "c\y" "d\x" "d\a" "d\y" "d\c" "c\N" "c\e" "d\M" "d\e" by fact + have fs: "c\x" "c\a" "c\y" "d\x" "d\a" "d\y" "d\c" "c\N" "c\e" "d\M" "d\e" by fact+ have ih1: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have ih2: "N{x:=.Ax y a} \\<^isub>a* N[x\n>y]" by fact have "(AndR .M .N e){x:=.Ax y a} = AndR .(M{x:=.Ax y a}) .(N{x:=.Ax y a}) e" @@ -5949,7 +5949,7 @@ using fs by simp next case (AndL1 u M v x a y) - have fs: "u\x" "u\a" "u\y" "u\v" by fact + have fs: "u\x" "u\a" "u\y" "u\v" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact show "(AndL1 (u).M v){x:=.Ax y a} \\<^isub>a* (AndL1 (u).M v)[x\n>y]" proof(cases "v=x") @@ -5983,7 +5983,7 @@ qed next case (AndL2 u M v x a y) - have fs: "u\x" "u\a" "u\y" "u\v" by fact + have fs: "u\x" "u\a" "u\y" "u\v" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact show "(AndL2 (u).M v){x:=.Ax y a} \\<^isub>a* (AndL2 (u).M v)[x\n>y]" proof(cases "v=x") @@ -6017,21 +6017,21 @@ qed next case (OrR1 c M d x a y) - have fs: "c\x" "c\a" "c\y" "c\d" by fact + have fs: "c\x" "c\a" "c\y" "c\d" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have "(OrR1 .M d){x:=.Ax y a} = OrR1 .(M{x:=.Ax y a}) d" using fs by (simp add: fresh_atm) also have "\ \\<^isub>a* OrR1 .(M[x\n>y]) d" using ih by (auto intro: a_star_congs) finally show "(OrR1 .M d){x:=.Ax y a} \\<^isub>a* (OrR1 .M d)[x\n>y]" using fs by simp next case (OrR2 c M d x a y) - have fs: "c\x" "c\a" "c\y" "c\d" by fact + have fs: "c\x" "c\a" "c\y" "c\d" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have "(OrR2 .M d){x:=.Ax y a} = OrR2 .(M{x:=.Ax y a}) d" using fs by (simp add: fresh_atm) also have "\ \\<^isub>a* OrR2 .(M[x\n>y]) d" using ih by (auto intro: a_star_congs) finally show "(OrR2 .M d){x:=.Ax y a} \\<^isub>a* (OrR2 .M d)[x\n>y]" using fs by simp next case (OrL u M v N z x a y) - have fs: "u\x" "u\a" "u\y" "v\x" "v\a" "v\y" "v\u" "u\N" "u\z" "v\M" "v\z" by fact + have fs: "u\x" "u\a" "u\y" "v\x" "v\a" "v\y" "v\u" "u\N" "u\z" "v\M" "v\z" by fact+ have ih1: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have ih2: "N{x:=.Ax y a} \\<^isub>a* N[x\n>y]" by fact show "(OrL (u).M (v).N z){x:=.Ax y a} \\<^isub>a* (OrL (u).M (v).N z)[x\n>y]" @@ -6070,7 +6070,7 @@ qed next case (ImpR z c M d x a y) - have fs: "z\x" "z\a" "z\y" "c\x" "c\a" "c\y" "z\d" "c\d" by fact + have fs: "z\x" "z\a" "z\y" "c\x" "c\a" "c\y" "z\d" "c\d" by fact+ have ih: "M{x:=.Ax y a} \\<^isub>a* M[x\n>y]" by fact have "(ImpR (z)..M d){x:=.Ax y a} = ImpR (z)..(M{x:=.Ax y a}) d" using fs by simp also have "\ \\<^isub>a* ImpR (z)..(M[x\n>y]) d" using ih by (auto intro: a_star_congs) @@ -6135,7 +6135,7 @@ qed next case (Cut c M z N b a x) - have fs: "c\b" "c\a" "c\x" "c\N" "z\b" "z\a" "z\x" "z\M" by fact + have fs: "c\b" "c\a" "c\x" "c\N" "z\b" "z\a" "z\x" "z\M" by fact+ have ih1: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have ih2: "N{b:=(x).Ax x a} \\<^isub>a* N[b\c>a]" by fact show "(Cut .M (z).N){b:=(x).Ax x a} \\<^isub>a* (Cut .M (z).N)[b\c>a]" @@ -6157,7 +6157,7 @@ qed next case (NotR z M c b a x) - have fs: "z\b" "z\a" "z\x" "z\c" by fact + have fs: "z\b" "z\a" "z\x" "z\c" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact show "(NotR (z).M c){b:=(x).Ax x a} \\<^isub>a* (NotR (z).M c)[b\c>a]" proof (cases "c=b") @@ -6190,14 +6190,14 @@ qed next case (NotL c M z b a x) - have fs: "c\b" "c\a" "c\x" "c\z" by fact + have fs: "c\b" "c\a" "c\x" "c\z" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have "(NotL .M z){b:=(x).Ax x a} = NotL .(M{b:=(x).Ax x a}) z" using fs by simp also have "\ \\<^isub>a* NotL .(M[b\c>a]) z" using ih by (auto intro: a_star_congs) finally show "(NotL .M z){b:=(x).Ax x a} \\<^isub>a* (NotL .M z)[b\c>a]" using fs by simp next case (AndR c M d N e b a x) - have fs: "c\b" "c\a" "c\x" "d\b" "d\a" "d\x" "d\c" "c\N" "c\e" "d\M" "d\e" by fact + have fs: "c\b" "c\a" "c\x" "d\b" "d\a" "d\x" "d\c" "c\N" "c\e" "d\M" "d\e" by fact+ have ih1: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have ih2: "N{b:=(x).Ax x a} \\<^isub>a* N[b\c>a]" by fact show "(AndR .M .N e){b:=(x).Ax x a} \\<^isub>a* (AndR .M .N e)[b\c>a]" @@ -6235,21 +6235,21 @@ qed next case (AndL1 u M v b a x) - have fs: "u\b" "u\a" "u\x" "u\v" by fact + have fs: "u\b" "u\a" "u\x" "u\v" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have "(AndL1 (u).M v){b:=(x).Ax x a} = AndL1 (u).(M{b:=(x).Ax x a}) v" using fs by simp also have "\ \\<^isub>a* AndL1 (u).(M[b\c>a]) v" using ih by (auto intro: a_star_congs) finally show "(AndL1 (u).M v){b:=(x).Ax x a} \\<^isub>a* (AndL1 (u).M v)[b\c>a]" using fs by simp next case (AndL2 u M v b a x) - have fs: "u\b" "u\a" "u\x" "u\v" by fact + have fs: "u\b" "u\a" "u\x" "u\v" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have "(AndL2 (u).M v){b:=(x).Ax x a} = AndL2 (u).(M{b:=(x).Ax x a}) v" using fs by simp also have "\ \\<^isub>a* AndL2 (u).(M[b\c>a]) v" using ih by (auto intro: a_star_congs) finally show "(AndL2 (u).M v){b:=(x).Ax x a} \\<^isub>a* (AndL2 (u).M v)[b\c>a]" using fs by simp next case (OrR1 c M d b a x) - have fs: "c\b" "c\a" "c\x" "c\d" by fact + have fs: "c\b" "c\a" "c\x" "c\d" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact show "(OrR1 .M d){b:=(x).Ax x a} \\<^isub>a* (OrR1 .M d)[b\c>a]" proof(cases "d=b") @@ -6283,7 +6283,7 @@ qed next case (OrR2 c M d b a x) - have fs: "c\b" "c\a" "c\x" "c\d" by fact + have fs: "c\b" "c\a" "c\x" "c\d" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact show "(OrR2 .M d){b:=(x).Ax x a} \\<^isub>a* (OrR2 .M d)[b\c>a]" proof(cases "d=b") @@ -6317,7 +6317,7 @@ qed next case (OrL u M v N z b a x) - have fs: "u\b" "u\a" "u\x" "v\b" "v\a" "v\x" "v\u" "u\N" "u\z" "v\M" "v\z" by fact + have fs: "u\b" "u\a" "u\x" "v\b" "v\a" "v\x" "v\u" "u\N" "u\z" "v\M" "v\z" by fact+ have ih1: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have ih2: "N{b:=(x).Ax x a} \\<^isub>a* N[b\c>a]" by fact have "(OrL (u).M (v).N z){b:=(x).Ax x a} = OrL (u).(M{b:=(x).Ax x a}) (v).(N{b:=(x).Ax x a}) z" @@ -6326,7 +6326,7 @@ finally show "(OrL (u).M (v).N z){b:=(x).Ax x a} \\<^isub>a* (OrL (u).M (v).N z)[b\c>a]" using fs by simp next case (ImpR z c M d b a x) - have fs: "z\b" "z\a" "z\x" "c\b" "c\a" "c\x" "z\d" "c\d" by fact + have fs: "z\b" "z\a" "z\x" "c\b" "c\a" "c\x" "z\d" "c\d" by fact+ have ih: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact show "(ImpR (z)..M d){b:=(x).Ax x a} \\<^isub>a* (ImpR (z)..M d)[b\c>a]" proof(cases "b=d") @@ -6360,7 +6360,7 @@ qed next case (ImpL c M u N v b a x) - have fs: "c\b" "c\a" "c\x" "u\b" "u\a" "u\x" "c\N" "c\v" "u\M" "u\v" by fact + have fs: "c\b" "c\a" "c\x" "u\b" "u\a" "u\x" "c\N" "c\v" "u\M" "u\v" by fact+ have ih1: "M{b:=(x).Ax x a} \\<^isub>a* M[b\c>a]" by fact have ih2: "N{b:=(x).Ax x a} \\<^isub>a* N[b\c>a]" by fact have "(ImpL .M (u).N v){b:=(x).Ax x a} = ImpL .(M{b:=(x).Ax x a}) (u).(N{b:=(x).Ax x a}) v" @@ -7124,7 +7124,7 @@ using a proof(nominal_induct M avoiding: x a P b y Q rule: trm.induct) case (Ax z c) - have fs: "a\(Q,b)" "x\(y,P,Q)" "b\Q" "y\P" by fact + have fs: "a\(Q,b)" "x\(y,P,Q)" "b\Q" "y\P" by fact+ { assume asm: "z=x \ c=b" have "(Ax x b){x:=.P}{b:=(y).Q} = (Cut .P (x).Ax x b){b:=(y).Q}" using fs by simp also have "\ = Cut .(P{b:=(y).Q}) (y).Q" @@ -10052,7 +10052,7 @@ proof (induct a rule: SNa.induct) case (SNaI x) note SNa' = this - have "SNa b" . + have "SNa b" by fact thus ?case proof (induct b rule: SNa.induct) case (SNaI y) diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/Crary.thy --- a/src/HOL/Nominal/Examples/Crary.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/Crary.thy Thu Jun 14 23:04:36 2007 +0200 @@ -168,7 +168,7 @@ using assms proof (nominal_induct t avoiding: x u \ rule: trm.induct) case (Lam y t x u) - have fs: "y\\" "y\x" "y\u" by fact + have fs: "y\\" "y\x" "y\u" by fact+ moreover have "x\ Lam [y].t" by fact ultimately have "x\t" by (simp add: abs_fresh fresh_atm) moreover have ih:"\n T. n\t \ ((n,T)#\) = \" by fact @@ -244,7 +244,7 @@ ultimately show ?case by auto next case (Lam n t x u \) - have fs:"n\x" "n\u" "n\\" "x\\" by fact + have fs:"n\x" "n\u" "n\\" "x\\" by fact+ have ih:"\ y s \. y\\ \ ((\<(t[y::=s])>) = ((\)[y::=(\)]))" by fact have "\ <(Lam [n].t)[x::=u]> = \" using fs by auto then have "\ <(Lam [n].t)[x::=u]> = Lam [n]. \" using fs by auto @@ -436,7 +436,7 @@ using assms proof (induct arbitrary: b) case (QAN_Reduce x t a b) - have h:"x \ t" "t \ a" by fact + have h:"x \ t" "t \ a" by fact+ have ih:"\b. t \ b \ a = b" by fact have "x \ b" by fact then obtain t' where "x \ t'" and hl:"t' \ b" using h by auto @@ -519,14 +519,14 @@ case (QAP_Var \ x T u T') have "\ \ Var x \ u : T'" by fact then have "u=Var x" and "(x,T') \ set \" by auto - moreover have "valid \" "(x,T) \ set \" by fact + moreover have "valid \" "(x,T) \ set \" by fact+ ultimately show "T=T'" using type_unicity_in_context by auto next case (QAP_App \ p q T\<^isub>1 T\<^isub>2 s t u T\<^isub>2') - have ih:"\u T. \ \ p \ u : T \ T\<^isub>1\T\<^isub>2 = T" by fact + have ih: "\u T. \ \ p \ u : T \ T\<^isub>1\T\<^isub>2 = T" by fact have "\ \ App p s \ u : T\<^isub>2'" by fact then obtain r t T\<^isub>1' where "u = App r t" "\ \ p \ r : T\<^isub>1' \ T\<^isub>2'" by auto - then have "T\<^isub>1\T\<^isub>2 = T\<^isub>1' \ T\<^isub>2'" by auto + with ih have "T\<^isub>1\T\<^isub>2 = T\<^isub>1' \ T\<^isub>2'" by auto then show "T\<^isub>2=T\<^isub>2'" using ty.inject by auto qed (auto) @@ -559,7 +559,7 @@ case (QAT_Arrow x \ s t T\<^isub>1 T\<^isub>2 u) have ih:"(x,T\<^isub>1)#\ \ App t (Var x) \ App u (Var x) : T\<^isub>2 \ (x,T\<^isub>1)#\ \ App s (Var x) \ App u (Var x) : T\<^isub>2" by fact - have fs: "x\\" "x\s" "x\t" "x\u" by fact + have fs: "x\\" "x\s" "x\t" "x\u" by fact+ have "\ \ t \ u : T\<^isub>1\T\<^isub>2" by fact then have "(x,T\<^isub>1)#\ \ App t (Var x) \ App u (Var x) : T\<^isub>2" using fs by (simp add: Q_Arrow_strong_inversion) @@ -592,7 +592,7 @@ and "\ \ s \ t : T \ \ \ \' \ valid \' \ \' \ s \ t : T" proof (nominal_induct \ s t T and \ s t T avoiding: \' rule: alg_equiv_alg_path_equiv.strong_inducts) case (QAT_Arrow x \ s t T\<^isub>1 T\<^isub>2 \') - have fs:"x\\" "x\s" "x\t" "x\\'"by fact + have fs:"x\\" "x\s" "x\t" "x\\'"by fact+ have h2:"\ \ \'" by fact have ih:"\\'. \(x,T\<^isub>1)#\ \ \'; valid \'\ \ \' \ App s (Var x) \ App t (Var x) : T\<^isub>2" by fact have "valid \'" by fact @@ -640,8 +640,8 @@ next case (3 \ s t T\<^isub>1 T\<^isub>2 \') have "\ \ s is t : T\<^isub>1\T\<^isub>2" - and "\ \ \'" - and "valid \'" by fact + and "\ \ \'" + and "valid \'" by fact+ then show "\' \ s is t : T\<^isub>1\T\<^isub>2" by simp qed (auto) @@ -797,7 +797,7 @@ moreover { assume "(y,U) \ set [(x,T)]" - then have "\' \ (x,s)#\ is (x,t)#\' : U" by auto + with h2 have "\' \ (x,s)#\ is (x,t)#\' : U" by auto } moreover { @@ -821,7 +821,7 @@ using h1 h2 h3 proof (nominal_induct \ t T avoiding: \' \ \' rule: typing.strong_induct) case (t_Lam x \ T\<^isub>1 t\<^isub>2 T\<^isub>2 \' \ \') - have fs:"x\\" "x\\'" "x\\" by fact + have fs:"x\\" "x\\'" "x\\" by fact+ have h:"\' \ \ is \' over \" by fact have ih:"\ \' \ \'. \\' \ \ is \' over (x,T\<^isub>1)#\; valid \'\ \ \' \ \2> is \'2> : T\<^isub>2" by fact { @@ -848,14 +848,14 @@ proof (nominal_induct \ s t T avoiding: \' \ \' rule: def_equiv.strong_induct) case (Q_Refl \ t T \' \ \') have "\ \ t : T" - and "valid \'" by fact + and "valid \'" by fact+ moreover have "\' \ \ is \' over \" by fact ultimately show "\' \ \ is \' : T" using fundamental_theorem_1 by blast next case (Q_Symm \ t s T \' \ \') have "\' \ \ is \' over \" - and "valid \'" by fact + and "valid \'" by fact+ moreover have ih: "\ \' \ \'. \\' \ \ is \' over \; valid \'\ \ \' \ \ is \' : T" by fact ultimately show "\' \ \ is \' : T" using logical_symmetry by blast @@ -864,7 +864,7 @@ have ih1: "\ \' \ \'. \\' \ \ is \' over \; valid \'\ \ \' \ \ is \' : T" by fact have ih2: "\ \' \ \'. \\' \ \ is \' over \; valid \'\ \ \' \ \ is \' : T" by fact have h: "\' \ \ is \' over \" - and v: "valid \'" by fact + and v: "valid \'" by fact+ then have "\' \ \' is \' over \" using logical_pseudo_reflexivity by auto then have "\' \ \' is \' : T" using ih2 v by auto moreover have "\' \ \ is \' : T" using ih1 h v by auto @@ -872,9 +872,9 @@ next case (Q_Abs x \ T\<^isub>1 s\<^isub>2 t\<^isub>2 T\<^isub>2 \' \ \') have fs:"x\\" by fact - have fs2: "x\\" "x\\'" by fact + have fs2: "x\\" "x\\'" by fact+ have h2: "\' \ \ is \' over \" - and h3: "valid \'" by fact + and h3: "valid \'" by fact+ have ih:"\\' \ \'. \\' \ \ is \' over (x,T\<^isub>1)#\; valid \'\ \ \' \ \2> is \'2> : T\<^isub>2" by fact { fix \'' s' t' @@ -888,7 +888,7 @@ ultimately have "\'' \ App (Lam [x]. \2>) s' is App (Lam [x].\'2>) t' : T\<^isub>2" using logical_weak_head_closure by auto } - moreover have "valid \'" using h2 by auto + moreover have "valid \'" using h3 by auto ultimately have "\' \ Lam [x].\2> is Lam [x].\'2> : T\<^isub>1\T\<^isub>2" by auto then show "\' \ \2> is \'2> : T\<^isub>1\T\<^isub>2" using fs2 by auto next @@ -897,9 +897,9 @@ next case (Q_Beta x \ s\<^isub>2 t\<^isub>2 T\<^isub>1 s12 t12 T\<^isub>2 \' \ \') have h: "\' \ \ is \' over \" - and h': "valid \'" by fact + and h': "valid \'" by fact+ have fs: "x\\" by fact - have fs2: " x\\" "x\\'" by fact + have fs2: " x\\" "x\\'" by fact+ have ih1: "\\' \ \'. \\' \ \ is \' over \; valid \'\ \ \' \ \2> is \'2> : T\<^isub>1" by fact have ih2: "\\' \ \'. \\' \ \ is \' over (x,T\<^isub>1)#\; valid \'\ \ \' \ \ is \' : T\<^isub>2" by fact have "\' \ \2> is \'2> : T\<^isub>1" using ih1 h' h by auto @@ -914,8 +914,8 @@ next case (Q_Ext x \ s t T\<^isub>1 T\<^isub>2 \' \ \') have h2: "\' \ \ is \' over \" - and h2': "valid \'" by fact - have fs:"x\\" "x\s" "x\t" by fact + and h2': "valid \'" by fact+ + have fs:"x\\" "x\s" "x\t" by fact+ have ih:"\\' \ \'. \\' \ \ is \' over (x,T\<^isub>1)#\; valid \'\ \ \' \ \ is \' : T\<^isub>2" by fact { @@ -930,7 +930,7 @@ then have "\'' \ App ((x,s')#\) s' is App ((x,t')#\') t' : T\<^isub>2" by auto then have "\'' \ App (\) s' is App (\') t' : T\<^isub>2" using fs fresh_psubst_simp by auto } - moreover have "valid \'" using h2 by auto + moreover have "valid \'" using h2' by auto ultimately show "\' \ \ is \' : T\<^isub>1\T\<^isub>2" by auto next case (Q_Unit \ s t \' \ \') diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/Fsub.thy --- a/src/HOL/Nominal/Examples/Fsub.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/Fsub.thy Thu Jun 14 23:04:36 2007 +0200 @@ -599,7 +599,7 @@ hence rh_drv: "\ \ Top <: T" by simp hence T_inst: "T = Top" by (simp add: S_TopE) have "\ \ ok" - and "S closed_in \" by fact + and "S closed_in \" by fact+ hence "\ \ S <: Top" by (simp add: subtype_of.S_Top) thus "\ \ S <: T" using T_inst by simp next @@ -724,13 +724,13 @@ { --{* The transitivity proof is now by the auxiliary lemma. *} case 1 have "\ \ S <: Q" - and "\ \ Q <: T" by fact + and "\ \ Q <: T" by fact+ thus "\ \ S <: T" by (rule transitivity_aux) next --{* The narrowing proof proceeds by an induction over @{term "(\@[(X,Q)]@\) \ M <: N"}. *} case 2 have "(\@[(X,Q)]@\) \ M <: N" --{* left-hand derivation *} - and "\ \ P<:Q" by fact --{* right-hand derivation *} + and "\ \ P<:Q" by fact+ --{* right-hand derivation *} thus "(\@[(X,P)]@\) \ M <: N" proof (nominal_induct \\"\@[(X,Q)]@\" M N avoiding: \ \ X rule: subtype_of.strong_induct) case (S_Top _ S \ \ X) diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/Height.thy --- a/src/HOL/Nominal/Examples/Height.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/Height.thy Thu Jun 14 23:04:36 2007 +0200 @@ -64,7 +64,7 @@ case (Lam y e1) hence ih: "height (e1[x::=e']) \ (((height e1) - 1) + (height e'))" by simp moreover - have vc: "y\x" "y\e'" by fact (* usual variable convention *) + have vc: "y\x" "y\e'" by fact+ (* usual variable convention *) ultimately show "height ((Lam [y].e1)[x::=e']) \ height (Lam [y].e1) - 1 + height e'" by simp next case (App e1 e2) @@ -74,4 +74,3 @@ qed end - diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/SN.thy --- a/src/HOL/Nominal/Examples/SN.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/SN.thy Thu Jun 14 23:04:36 2007 +0200 @@ -374,7 +374,7 @@ proof (induct a rule: acc.induct) case (accI x) note accI' = accI - have "acc r b" . + have "acc r b" by fact thus ?case proof (induct b rule: acc.induct) case (accI y) @@ -501,7 +501,7 @@ case (t3 a \ \ t \ \) --"lambda case" have ih: "\\. \ closes ((a,\)#\) \ \ \ RED \" by fact have \_cond: "\ closes \" by fact - have fresh: "a\\" "a\\" by fact + have fresh: "a\\" "a\\" by fact+ from ih have "\s\RED \. ((a,s)#\) \ RED \" using fresh \_cond fresh_context by simp then have "\s\RED \. \[a::=s] \ RED \" diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Examples/SOS.thy --- a/src/HOL/Nominal/Examples/SOS.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Examples/SOS.thy Thu Jun 14 23:04:36 2007 +0200 @@ -327,7 +327,7 @@ and "(x\<^isub>1, Data \\<^isub>1)#\ \ e\<^isub>1 : T" and "(x\<^isub>2, Data \\<^isub>2)#\ \ e\<^isub>2 : T" proof - - have f:"x\<^isub>1\\" "x\<^isub>2\\" by fact + have f:"x\<^isub>1\\" "x\<^isub>2\\" by fact+ have "\ \ Case e of inl x\<^isub>1 \ e\<^isub>1 | inr x\<^isub>2 \ e\<^isub>2 : T" by fact then obtain \\<^isub>1 \\<^isub>2 x\<^isub>1' x\<^isub>2' e\<^isub>1' e\<^isub>2' where h:"\ \ e : Data (DSum \\<^isub>1 \\<^isub>2)" and @@ -382,8 +382,8 @@ then have ih\<^isub>1: "valid ((x\<^isub>1,Data S\<^isub>1)#\\<^isub>2) \ (x\<^isub>1,Data S\<^isub>1)#\\<^isub>2 \ e\<^isub>1 : T" and ih\<^isub>2: "valid ((x\<^isub>2,Data S\<^isub>2)#\\<^isub>2) \ (x\<^isub>2,Data S\<^isub>2)#\\<^isub>2 \ e\<^isub>2 : T" and ih\<^isub>3: "\\<^isub>2 \ e : Data (DSum S\<^isub>1 S\<^isub>2)" by auto - have fs\<^isub>1: "x\<^isub>1\\\<^isub>2" "x\<^isub>1\e" "x\<^isub>1\e\<^isub>2" "x\<^isub>1\x\<^isub>2" by fact - have fs\<^isub>2: "x\<^isub>2\\\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\e\<^isub>1" "x\<^isub>2\x\<^isub>1" by fact + have fs\<^isub>1: "x\<^isub>1\\\<^isub>2" "x\<^isub>1\e" "x\<^isub>1\e\<^isub>2" "x\<^isub>1\x\<^isub>2" by fact+ + have fs\<^isub>2: "x\<^isub>2\\\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\e\<^isub>1" "x\<^isub>2\x\<^isub>1" by fact+ have "valid \\<^isub>2" by fact then have "valid ((x\<^isub>1,Data S\<^isub>1)#\\<^isub>2)" and "valid ((x\<^isub>2,Data S\<^isub>2)#\\<^isub>2)" using fs\<^isub>1 fs\<^isub>2 by auto then have "(x\<^isub>1, Data S\<^isub>1)#\\<^isub>2 \ e\<^isub>1 : T" and "(x\<^isub>2, Data S\<^isub>2)#\\<^isub>2 \ e\<^isub>2 : T" using ih\<^isub>1 ih\<^isub>2 by simp_all @@ -439,7 +439,7 @@ qed next case (Lam y t \ e' x T) - have vc: "y\\" "y\x" "y\e'" by fact + have vc: "y\\" "y\x" "y\e'" by fact+ have pr1: "\ \ e' : T'" by fact have pr2: "(x,T')#\ \ Lam [y].t : T" by fact then obtain T\<^isub>1 T\<^isub>2 where pr2': "(y,T\<^isub>1)#(x,T')#\ \ t : T\<^isub>2" and eq: "T = T\<^isub>1\T\<^isub>2" @@ -455,7 +455,7 @@ next case (Case t\<^isub>1 x\<^isub>1 t\<^isub>2 x\<^isub>2 t3 \ e' x T) have vc: "x\<^isub>1\\" "x\<^isub>1\e'" "x\<^isub>1\x""x\<^isub>1\t\<^isub>1" "x\<^isub>1\t3" "x\<^isub>2\\" - "x\<^isub>2\e'" "x\<^isub>2\x" "x\<^isub>2\t\<^isub>1" "x\<^isub>2\t\<^isub>2" "x\<^isub>2\x\<^isub>1" by fact + "x\<^isub>2\e'" "x\<^isub>2\x" "x\<^isub>2\t\<^isub>1" "x\<^isub>2\t\<^isub>2" "x\<^isub>2\x\<^isub>1" by fact+ have as1: "\ \ e' : T'" by fact have as2: "(x,T')#\ \ Case t\<^isub>1 of inl x\<^isub>1 \ t\<^isub>2 | inr x\<^isub>2 \ t3 : T" by fact then obtain S\<^isub>1 S\<^isub>2 where @@ -463,10 +463,10 @@ h2:"(x\<^isub>1,Data S\<^isub>1)#(x,T')#\ \ t\<^isub>2 : T" and h3:"(x\<^isub>2,Data S\<^isub>2)#(x,T')#\ \ t3 : T" using vc by (auto simp add: fresh_list_cons) - have ih1: "\(x,T')#\ \ t\<^isub>1 : T; \ \ e' : T'\ \ \ \ t\<^isub>1[x::=e'] : T" + have ih1: "\(x,T')#\ \ t\<^isub>1 : Data (DSum S\<^isub>1 S\<^isub>2); \ \ e' : T'\ \ \ \ t\<^isub>1[x::=e'] : Data (DSum S\<^isub>1 S\<^isub>2)" and ih2: "\(x,T')#(x\<^isub>1,Data S\<^isub>1)#\ \ t\<^isub>2:T; (x\<^isub>1,Data S\<^isub>1)#\ \ e':T'\ \ (x\<^isub>1,Data S\<^isub>1)#\ \ t\<^isub>2[x::=e']:T" and ih3: "\(x,T')#(x\<^isub>2,Data S\<^isub>2)#\ \ t3:T; (x\<^isub>2,Data S\<^isub>2)#\ \ e':T'\ \ (x\<^isub>2,Data S\<^isub>2)#\ \ t3[x::=e']:T" - by fact + by fact+ from h2 have h2': "(x,T')#(x\<^isub>1,Data S\<^isub>1)#\ \ t\<^isub>2 : T" by (rule context_exchange) from h3 have h3': "(x,T')#(x\<^isub>2,Data S\<^isub>2)#\ \ t3 : T" by (rule context_exchange) have "\ \ t\<^isub>1[x::=e'] : Data (DSum S\<^isub>1 S\<^isub>2)" using h1 ih1 as1 by simp @@ -663,7 +663,7 @@ thus "\ \ e' : T" using ih3 by simp next case (b_CaseL x\<^isub>1 e e\<^isub>2 e'' x\<^isub>2 e\<^isub>1 e' \) - have vc: "x\<^isub>1\\" "x\<^isub>2\\" by fact + have vc: "x\<^isub>1\\" "x\<^isub>2\\" by fact+ have "\ \ Case e of inl x\<^isub>1 \ e\<^isub>1 | inr x\<^isub>2 \ e\<^isub>2 : T" by fact then obtain S\<^isub>1 S\<^isub>2 e\<^isub>1' e\<^isub>2' where a1: "\ \ e : Data (DSum S\<^isub>1 S\<^isub>2)" and @@ -694,7 +694,7 @@ have ih2:"\t. e\<^isub>2 \ t \ e\<^isub>2' = t" by fact have ih3: "\t. e\<^isub>1'[x::=e\<^isub>2'] \ t \ e' = t" by fact have app: "App e\<^isub>1 e\<^isub>2 \ t\<^isub>2" by fact - have vc: "x\e\<^isub>1" "x\e\<^isub>2" by fact + have vc: "x\e\<^isub>1" "x\e\<^isub>2" by fact+ then have "x \ App e\<^isub>1 e\<^isub>2" by auto then have vc': "x\t\<^isub>2" using fresh_preserved app by blast from vc vc' obtain f\<^isub>1 f\<^isub>2 where x1: "e\<^isub>1 \ Lam [x]. f\<^isub>1" and x2: "e\<^isub>2 \ f\<^isub>2" and x3: "f\<^isub>1[x::=f\<^isub>2] \ t\<^isub>2" @@ -708,7 +708,7 @@ thus ?case using ih3 by simp next case (b_CaseL x\<^isub>1 e e\<^isub>2 e'' x\<^isub>2 e\<^isub>1 e' t\<^isub>2) - have fs: "x\<^isub>1\e" "x\<^isub>1\t\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\t\<^isub>2" by fact + have fs: "x\<^isub>1\e" "x\<^isub>1\t\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\t\<^isub>2" by fact+ have ih1:"\t. e \ t \ InL e' = t" by fact have ih2:"\t. e\<^isub>1[x\<^isub>1::=e'] \ t \ e'' = t" by fact have ha: "\(\t. e \ InR t)" using ih1 by force @@ -720,7 +720,7 @@ then show "e'' = t\<^isub>2" using ih2 by simp next case (b_CaseR x\<^isub>1 e e\<^isub>2 e'' x\<^isub>2 e\<^isub>1 e' t\<^isub>2 ) - have fs: "x\<^isub>1\e" "x\<^isub>1\t\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\t\<^isub>2" by fact + have fs: "x\<^isub>1\e" "x\<^isub>1\t\<^isub>2" "x\<^isub>2\e" "x\<^isub>2\t\<^isub>2" by fact+ have ih1: "\t. e \ t \ InR e' = t" by fact have ih2: "\t. e\<^isub>2[x\<^isub>2::=e'] \ t \ e'' = t" by fact have ha: "\(\t. e \ InL t)" using ih1 by force @@ -997,7 +997,7 @@ have ih:"\\ \ T. \\ Vcloses \; \ \ e : T\ \ \v. \ \ v \ v \ V T" by fact have as\<^isub>1: "\ Vcloses \" by fact have as\<^isub>2: "\ \ Lam [x].e : T" by fact - have fs: "x\\" "x\\" by fact + have fs: "x\\" "x\\" by fact+ from as\<^isub>2 fs obtain T\<^isub>1 T\<^isub>2 where "(i)": "(x,T\<^isub>1)#\ \ e:T\<^isub>2" and "(ii)": "T = T\<^isub>1 \ T\<^isub>2" by auto from "(i)" have "(iii)": "valid ((x,T\<^isub>1)#\)" by (simp add: typing_implies_valid) @@ -1016,7 +1016,7 @@ next case (Case t' n\<^isub>1 t\<^isub>1 n\<^isub>2 t\<^isub>2 \ \ T) have f: "n\<^isub>1\\" "n\<^isub>1\\" "n\<^isub>2\\" "n\<^isub>2\\" "n\<^isub>2\n\<^isub>1" "n\<^isub>1\t'" - "n\<^isub>1\t\<^isub>2" "n\<^isub>2\t'" "n\<^isub>2\t\<^isub>1" by fact + "n\<^isub>1\t\<^isub>2" "n\<^isub>2\t'" "n\<^isub>2\t\<^isub>1" by fact+ have h:"\ Vcloses \" by fact have th:"\ \ Case t' of inl n\<^isub>1 \ t\<^isub>1 | inr n\<^isub>2 \ t\<^isub>2 : T" by fact then obtain S\<^isub>1 S\<^isub>2 where diff -r 4b03e3586f7f -r 31781b2de73d src/HOL/Nominal/Nominal.thy --- a/src/HOL/Nominal/Nominal.thy Thu Jun 14 22:59:42 2007 +0200 +++ b/src/HOL/Nominal/Nominal.thy Thu Jun 14 23:04:36 2007 +0200 @@ -1715,7 +1715,7 @@ and at: "at TYPE('x)" shows "pi2\(pi1\x) = (pi2\pi1)\(pi2\x)" proof - - have "(pi2@pi1) \ ((pi2\pi1)@pi2)" by (rule at_ds8) + have "(pi2@pi1) \ ((pi2\pi1)@pi2)" by (rule at_ds8 [OF at]) hence "(pi2@pi1)\x = ((pi2\pi1)@pi2)\x" by (rule pt3[OF pt]) thus ?thesis by (simp add: pt2[OF pt]) qed @@ -2543,7 +2543,7 @@ proof - have ptd: "pt TYPE('y) TYPE('y)" by (simp add: at_pt_inst[OF at']) have ptc: "pt TYPE('y\'a) TYPE('x)" by (simp add: pt_fun_inst[OF ptb, OF pta, OF at]) - have cpc: "cp TYPE('y\'a) TYPE ('x) TYPE ('y)" by (rule cp_fun_inst[OF cpb,OF cpa]) + have cpc: "cp TYPE('y\'a) TYPE ('x) TYPE ('y)" by (rule cp_fun_inst[OF cpb cpa ptb at]) have f2: "finite ((supp (pi\h))::'y set)" proof - from f1 have "finite (pi\((supp h)::'y set))" @@ -3077,7 +3077,7 @@ and at: "at TYPE('x)" shows "pi2\(pi1\x) = perm_aux (pi2\pi1) (pi2\x)" proof - - have "(pi2@pi1) \ ((pi2\pi1)@pi2)" by (rule at_ds8) + have "(pi2@pi1) \ ((pi2\pi1)@pi2)" by (rule at_ds8[OF at]) hence "(pi2@pi1)\x = ((pi2\pi1)@pi2)\x" by (rule pt3[OF pt]) thus ?thesis by (simp add: pt2[OF pt] perm_aux_def) qed