diff -r f2094906e491 -r e44d86131648 src/ZF/Constructible/AC_in_L.thy --- a/src/ZF/Constructible/AC_in_L.thy Tue Sep 27 13:34:54 2022 +0200 +++ b/src/ZF/Constructible/AC_in_L.thy Tue Sep 27 16:51:35 2022 +0100 @@ -17,17 +17,17 @@ domains "rlist(A,r)" \ "list(A) * list(A)" intros shorterI: - "[| length(l') < length(l); l' \ list(A); l \ list(A) |] - ==> \ rlist(A,r)" + "\length(l') < length(l); l' \ list(A); l \ list(A)\ + \ \ rlist(A,r)" sameI: - "[| \ rlist(A,r); a \ A |] - ==> \ rlist(A,r)" + "\ \ rlist(A,r); a \ A\ + \ \ rlist(A,r)" diffI: - "[| length(l') = length(l); \ r; - l' \ list(A); l \ list(A); a' \ A; a \ A |] - ==> \ rlist(A,r)" + "\length(l') = length(l); \ r; + l' \ list(A); l \ list(A); a' \ A; a \ A\ + \ \ rlist(A,r)" type_intros list.intros @@ -40,7 +40,7 @@ subsubsection\Linearity\ lemma rlist_Nil_Cons [intro]: - "[|a \ A; l \ list(A)|] ==> <[], Cons(a,l)> \ rlist(A, r)" + "\a \ A; l \ list(A)\ \ <[], Cons(a,l)> \ rlist(A, r)" by (simp add: shorterI) lemma linear_rlist: @@ -82,13 +82,13 @@ lemma not_rlist_Nil [simp]: " \ rlist(A,r)" by (blast intro: elim: rlist_NilE) -lemma rlist_imp_length_le: " \ rlist(A,r) ==> length(l') \ length(l)" +lemma rlist_imp_length_le: " \ rlist(A,r) \ length(l') \ length(l)" apply (erule rlist.induct) apply (simp_all add: leI) done lemma wf_on_rlist_n: - "[| n \ nat; wf[A](r) |] ==> wf[{l \ list(A). length(l) = n}](rlist(A,r))" + "\n \ nat; wf[A](r)\ \ wf[{l \ list(A). length(l) = n}](rlist(A,r))" apply (induct_tac n) apply (rule wf_onI2, simp) apply (rule wf_onI2, clarify) @@ -112,7 +112,7 @@ by (blast intro: length_type) -lemma wf_on_rlist: "wf[A](r) ==> wf[list(A)](rlist(A,r))" +lemma wf_on_rlist: "wf[A](r) \ wf[list(A)](rlist(A,r))" apply (subst list_eq_UN_length) apply (rule wf_on_Union) apply (rule wf_imp_wf_on [OF wf_Memrel [of nat]]) @@ -125,14 +125,14 @@ done -lemma wf_rlist: "wf(r) ==> wf(rlist(field(r),r))" +lemma wf_rlist: "wf(r) \ wf(rlist(field(r),r))" apply (simp add: wf_iff_wf_on_field) apply (rule wf_on_subset_A [OF _ field_rlist]) apply (blast intro: wf_on_rlist) done lemma well_ord_rlist: - "well_ord(A,r) ==> well_ord(list(A), rlist(A,r))" + "well_ord(A,r) \ well_ord(list(A), rlist(A,r))" apply (rule well_ordI) apply (simp add: well_ord_def wf_on_rlist) apply (simp add: well_ord_def tot_ord_def linear_rlist) @@ -167,20 +167,20 @@ "enum(f, Forall(p)) = f ` " lemma (in Nat_Times_Nat) fn_type [TC,simp]: - "[|x \ nat; y \ nat|] ==> fn` \ nat" + "\x \ nat; y \ nat\ \ fn` \ nat" by (blast intro: inj_is_fun [OF fn_inj] apply_funtype) lemma (in Nat_Times_Nat) fn_iff: - "[|x \ nat; y \ nat; u \ nat; v \ nat|] - ==> (fn` = fn`) \ (x=u & y=v)" + "\x \ nat; y \ nat; u \ nat; v \ nat\ + \ (fn` = fn`) \ (x=u & y=v)" by (blast dest: inj_apply_equality [OF fn_inj]) lemma (in Nat_Times_Nat) enum_type [TC,simp]: - "p \ formula ==> enum(fn,p) \ nat" + "p \ formula \ enum(fn,p) \ nat" by (induct_tac p, simp_all) lemma (in Nat_Times_Nat) enum_inject [rule_format]: - "p \ formula ==> \q\formula. enum(fn,p) = enum(fn,q) \ p=q" + "p \ formula \ \q\formula. enum(fn,p) = enum(fn,q) \ p=q" apply (induct_tac p, simp_all) apply (rule ballI) apply (erule formula.cases) @@ -232,7 +232,7 @@ definition env_form_r :: "[i,i,i]=>i" where \ \wellordering on (environment, formula) pairs\ - "env_form_r(f,r,A) == + "env_form_r(f,r,A) \ rmult(list(A), rlist(A, r), formula, measure(formula, enum(f)))" @@ -240,12 +240,12 @@ env_form_map :: "[i,i,i,i]=>i" where \ \map from (environment, formula) pairs to ordinals\ "env_form_map(f,r,A,z) - == ordermap(list(A) * formula, env_form_r(f,r,A)) ` z" + \ ordermap(list(A) * formula, env_form_r(f,r,A)) ` z" definition DPow_ord :: "[i,i,i,i,i]=>o" where \ \predicate that holds if \<^term>\k\ is a valid index for \<^term>\X\\ - "DPow_ord(f,r,A,X,k) == + "DPow_ord(f,r,A,X,k) \ \env \ list(A). \p \ formula. arity(p) \ succ(length(env)) & X = {x\A. sats(A, p, Cons(x,env))} & @@ -254,61 +254,61 @@ definition DPow_least :: "[i,i,i,i]=>i" where \ \function yielding the smallest index for \<^term>\X\\ - "DPow_least(f,r,A,X) == \ k. DPow_ord(f,r,A,X,k)" + "DPow_least(f,r,A,X) \ \ k. DPow_ord(f,r,A,X,k)" definition DPow_r :: "[i,i,i]=>i" where \ \a wellordering on \<^term>\DPow(A)\\ - "DPow_r(f,r,A) == measure(DPow(A), DPow_least(f,r,A))" + "DPow_r(f,r,A) \ measure(DPow(A), DPow_least(f,r,A))" lemma (in Nat_Times_Nat) well_ord_env_form_r: "well_ord(A,r) - ==> well_ord(list(A) * formula, env_form_r(fn,r,A))" + \ well_ord(list(A) * formula, env_form_r(fn,r,A))" by (simp add: env_form_r_def well_ord_rmult well_ord_rlist well_ord_formula) lemma (in Nat_Times_Nat) Ord_env_form_map: - "[|well_ord(A,r); z \ list(A) * formula|] - ==> Ord(env_form_map(fn,r,A,z))" + "\well_ord(A,r); z \ list(A) * formula\ + \ Ord(env_form_map(fn,r,A,z))" by (simp add: env_form_map_def Ord_ordermap well_ord_env_form_r) lemma DPow_imp_ex_DPow_ord: - "X \ DPow(A) ==> \k. DPow_ord(fn,r,A,X,k)" + "X \ DPow(A) \ \k. DPow_ord(fn,r,A,X,k)" apply (simp add: DPow_ord_def) apply (blast dest!: DPowD) done lemma (in Nat_Times_Nat) DPow_ord_imp_Ord: - "[|DPow_ord(fn,r,A,X,k); well_ord(A,r)|] ==> Ord(k)" + "\DPow_ord(fn,r,A,X,k); well_ord(A,r)\ \ Ord(k)" apply (simp add: DPow_ord_def, clarify) apply (simp add: Ord_env_form_map) done lemma (in Nat_Times_Nat) DPow_imp_DPow_least: - "[|X \ DPow(A); well_ord(A,r)|] - ==> DPow_ord(fn, r, A, X, DPow_least(fn,r,A,X))" + "\X \ DPow(A); well_ord(A,r)\ + \ DPow_ord(fn, r, A, X, DPow_least(fn,r,A,X))" apply (simp add: DPow_least_def) apply (blast dest: DPow_imp_ex_DPow_ord intro: DPow_ord_imp_Ord LeastI) done lemma (in Nat_Times_Nat) env_form_map_inject: - "[|env_form_map(fn,r,A,u) = env_form_map(fn,r,A,v); well_ord(A,r); - u \ list(A) * formula; v \ list(A) * formula|] - ==> u=v" + "\env_form_map(fn,r,A,u) = env_form_map(fn,r,A,v); well_ord(A,r); + u \ list(A) * formula; v \ list(A) * formula\ + \ u=v" apply (simp add: env_form_map_def) apply (rule inj_apply_equality [OF bij_is_inj, OF ordermap_bij, OF well_ord_env_form_r], assumption+) done lemma (in Nat_Times_Nat) DPow_ord_unique: - "[|DPow_ord(fn,r,A,X,k); DPow_ord(fn,r,A,Y,k); well_ord(A,r)|] - ==> X=Y" + "\DPow_ord(fn,r,A,X,k); DPow_ord(fn,r,A,Y,k); well_ord(A,r)\ + \ X=Y" apply (simp add: DPow_ord_def, clarify) apply (drule env_form_map_inject, auto) done lemma (in Nat_Times_Nat) well_ord_DPow_r: - "well_ord(A,r) ==> well_ord(DPow(A), DPow_r(fn,r,A))" + "well_ord(A,r) \ well_ord(DPow(A), DPow_r(fn,r,A))" apply (simp add: DPow_r_def) apply (rule well_ord_measure) apply (simp add: DPow_least_def) @@ -332,7 +332,7 @@ rlimit :: "[i,i=>i]=>i" where \ \Expresses the wellordering at limit ordinals. The conditional lets us remove the premise \<^term>\Limit(i)\ from some theorems.\ - "rlimit(i,r) == + "rlimit(i,r) \ if Limit(i) then {z: Lset(i) * Lset(i). \x' x. z = & @@ -344,10 +344,10 @@ Lset_new :: "i=>i" where \ \This constant denotes the set of elements introduced at level \<^term>\succ(i)\\ - "Lset_new(i) == {x \ Lset(succ(i)). lrank(x) = i}" + "Lset_new(i) \ {x \ Lset(succ(i)). lrank(x) = i}" lemma Limit_Lset_eq2: - "Limit(i) ==> Lset(i) = (\j\i. Lset_new(j))" + "Limit(i) \ Lset(i) = (\j\i. Lset_new(j))" apply (simp add: Limit_Lset_eq) apply (rule equalityI) apply safe @@ -362,14 +362,14 @@ done lemma wf_on_Lset: - "wf[Lset(succ(j))](r(succ(j))) ==> wf[Lset_new(j)](rlimit(i,r))" + "wf[Lset(succ(j))](r(succ(j))) \ wf[Lset_new(j)](rlimit(i,r))" apply (simp add: wf_on_def Lset_new_def) apply (erule wf_subset) apply (simp add: rlimit_def, force) done lemma wf_on_rlimit: - "(\j wf[Lset(i)](rlimit(i,r))" + "(\j wf[Lset(i)](rlimit(i,r))" apply (case_tac "Limit(i)") prefer 2 apply (simp add: rlimit_def wf_on_any_0) @@ -382,8 +382,8 @@ done lemma linear_rlimit: - "[|Limit(i); \j linear(Lset(i), rlimit(i,r))" + "\Limit(i); \j + \ linear(Lset(i), rlimit(i,r))" apply (frule Limit_is_Ord) apply (simp add: Limit_Lset_eq2 Lset_new_def) apply (simp add: linear_def rlimit_def Ball_def lt_Ord Lset_iff_lrank_lt) @@ -397,13 +397,13 @@ done lemma well_ord_rlimit: - "[|Limit(i); \j well_ord(Lset(i), rlimit(i,r))" + "\Limit(i); \j + \ well_ord(Lset(i), rlimit(i,r))" by (blast intro: well_ordI wf_on_rlimit well_ord_is_wf linear_rlimit well_ord_is_linear) lemma rlimit_cong: - "(!!j. j r'(j) = r(j)) ==> rlimit(i,r) = rlimit(i,r')" + "(\j. j r'(j) = r(j)) \ rlimit(i,r) = rlimit(i,r')" apply (simp add: rlimit_def, clarify) apply (rule refl iff_refl Collect_cong ex_cong conj_cong)+ apply (simp add: Limit_is_Ord Lset_lrank_lt) @@ -414,7 +414,7 @@ definition L_r :: "[i, i] => i" where - "L_r(f) == %i. + "L_r(f) \ %i. transrec3(i, 0, \x r. DPow_r(f, r, Lset(x)), \x r. rlimit(x, \y. r`y))" @@ -427,25 +427,25 @@ text\The limit case is non-trivial because of the distinction between object-level and meta-level abstraction.\ -lemma [simp]: "Limit(i) ==> L_r(f,i) = rlimit(i, L_r(f))" +lemma [simp]: "Limit(i) \ L_r(f,i) = rlimit(i, L_r(f))" by (simp cong: rlimit_cong add: transrec3_Limit L_r_def ltD) lemma (in Nat_Times_Nat) L_r_type: - "Ord(i) ==> L_r(fn,i) \ Lset(i) * Lset(i)" + "Ord(i) \ L_r(fn,i) \ Lset(i) * Lset(i)" apply (induct i rule: trans_induct3) apply (simp_all add: Lset_succ DPow_r_type well_ord_DPow_r rlimit_def Transset_subset_DPow [OF Transset_Lset], blast) done lemma (in Nat_Times_Nat) well_ord_L_r: - "Ord(i) ==> well_ord(Lset(i), L_r(fn,i))" + "Ord(i) \ well_ord(Lset(i), L_r(fn,i))" apply (induct i rule: trans_induct3) apply (simp_all add: well_ord0 Lset_succ L_r_type well_ord_DPow_r well_ord_rlimit ltD) done lemma well_ord_L_r: - "Ord(i) ==> \r. well_ord(Lset(i), r)" + "Ord(i) \ \r. well_ord(Lset(i), r)" apply (insert nat_times_nat_lepoll_nat) apply (unfold lepoll_def) apply (blast intro: Nat_Times_Nat.well_ord_L_r Nat_Times_Nat.intro) @@ -453,7 +453,7 @@ text\Every constructible set is well-ordered! Therefore the Wellordering Theorem and - the Axiom of Choice hold in \<^term>\L\!!\ + the Axiom of Choice hold in \<^term>\L\\\ theorem L_implies_AC: assumes x: "L(x)" shows "\r. well_ord(x,r)" using Transset_Lset x apply (simp add: Transset_def L_def)