# HG changeset patch # User wenzelm # Date 1535565699 -7200 # Node ID 511d163ab623b0d419e2ed2bd22a5cf94fd5f9da # Parent da0cb00a4d6a9a6b4c72b19fb3ee0db454259f09 prefer "locale begin ... end"; diff -r da0cb00a4d6a -r 511d163ab623 src/ZF/AC/AC16_WO4.thy --- a/src/ZF/AC/AC16_WO4.thy Wed Aug 29 19:35:41 2018 +0200 +++ b/src/ZF/AC/AC16_WO4.thy Wed Aug 29 20:01:39 2018 +0200 @@ -220,8 +220,9 @@ and mpos[iff]: "0 {v \ Pow(x). v \ m}" +begin -lemma (in AC16) knat [iff]: "k \ nat" +lemma knat [iff]: "k \ nat" by (simp add: k_def) @@ -230,7 +231,7 @@ (* where a is certain k-2 element subset of y *) (* ********************************************************************** *) -lemma (in AC16) Diff_Finite_eqpoll: "[| l \ a; a \ y |] ==> y - a \ y" +lemma Diff_Finite_eqpoll: "[| l \ a; a \ y |] ==> y - a \ y" apply (insert WO_R Infinite lnat) apply (rule eqpoll_trans) apply (rule Diff_lesspoll_eqpoll_Card) @@ -247,10 +248,10 @@ done -lemma (in AC16) s_subset: "s(u) \ t_n" +lemma s_subset: "s(u) \ t_n" by (unfold s_def, blast) -lemma (in AC16) sI: +lemma sI: "[| w \ t_n; cons(b,cons(u,a)) \ w; a \ y; b \ y-a; l \ a |] ==> w \ s(u)" apply (unfold s_def succ_def k_def) @@ -258,11 +259,11 @@ intro: subset_imp_lepoll lepoll_trans) done -lemma (in AC16) in_s_imp_u_in: "v \ s(u) ==> u \ v" +lemma in_s_imp_u_in: "v \ s(u) ==> u \ v" by (unfold s_def, blast) -lemma (in AC16) ex1_superset_a: +lemma ex1_superset_a: "[| l \ a; a \ y; b \ y - a; u \ x |] ==> \! c. c \ s(u) & a \ c & b \ c" apply (rule all_ex [simplified k_def, THEN ballE]) @@ -273,7 +274,7 @@ intro!: cons_cons_subset eqpoll_sym [THEN cons_cons_eqpoll]) done -lemma (in AC16) the_eq_cons: +lemma the_eq_cons: "[| \v \ s(u). succ(l) \ v \ y; l \ a; a \ y; b \ y - a; u \ x |] ==> (THE c. c \ s(u) & a \ c & b \ c) \ y = cons(b, a)" @@ -282,7 +283,7 @@ apply (fast+) done -lemma (in AC16) y_lepoll_subset_s: +lemma y_lepoll_subset_s: "[| \v \ s(u). succ(l) \ v \ y; l \ a; a \ y; u \ x |] ==> y \ {v \ s(u). a \ v}" @@ -306,14 +307,14 @@ (*relies on the disjointness of x, y*) -lemma (in AC16) x_imp_not_y [dest]: "a \ x ==> a \ y" +lemma x_imp_not_y [dest]: "a \ x ==> a \ y" by (blast dest: disjoint [THEN equalityD1, THEN subsetD, OF IntI]) -lemma (in AC16) w_Int_eq_w_Diff: +lemma w_Int_eq_w_Diff: "w \ x \ y ==> w \ (x - {u}) = w - cons(u, w \ y)" by blast -lemma (in AC16) w_Int_eqpoll_m: +lemma w_Int_eqpoll_m: "[| w \ {v \ s(u). a \ v}; l \ a; u \ x; \v \ s(u). succ(l) \ v \ y |] @@ -335,12 +336,12 @@ (* to {v \ Pow(x). v \ n-k} *) (* ********************************************************************** *) -lemma (in AC16) eqpoll_m_not_empty: "a \ m ==> a \ 0" +lemma eqpoll_m_not_empty: "a \ m ==> a \ 0" apply (insert mpos) apply (fast elim!: zero_lt_natE dest!: eqpoll_succ_imp_not_empty) done -lemma (in AC16) cons_cons_in: +lemma cons_cons_in: "[| z \ xa \ (x - {u}); l \ a; a \ y; u \ x |] ==> \! w. w \ t_n & cons(z, cons(u, a)) \ w" apply (rule all_ex [THEN bspec]) @@ -348,7 +349,7 @@ apply (fast intro!: cons_eqpoll_succ elim: eqpoll_sym) done -lemma (in AC16) subset_s_lepoll_w: +lemma subset_s_lepoll_w: "[| \v \ s(u). succ(l) \ v \ y; a \ y; l \ a; u \ x |] ==> {v \ s(u). a \ v} \ {v \ Pow(x). v \ m}" apply (rule_tac f3 = "\w \ {v \ s (u) . a \ v}. w \ (x - {u})" @@ -371,14 +372,14 @@ (* well_ord_subsets_lepoll_n *) (* ********************************************************************** *) -lemma (in AC16) well_ord_subsets_eqpoll_n: +lemma well_ord_subsets_eqpoll_n: "n \ nat ==> \S. well_ord({z \ Pow(y) . z \ succ(n)}, S)" apply (rule WO_R [THEN well_ord_infinite_subsets_eqpoll_X, THEN eqpoll_def [THEN def_imp_iff, THEN iffD1], THEN exE]) apply (fast intro: bij_is_inj [THEN well_ord_rvimage])+ done -lemma (in AC16) well_ord_subsets_lepoll_n: +lemma well_ord_subsets_lepoll_n: "n \ nat ==> \R. well_ord({z \ Pow(y). z \ n}, R)" apply (induct_tac "n") apply (force intro!: well_ord_unit simp add: subsets_lepoll_0_eq_unit) @@ -392,13 +393,13 @@ done -lemma (in AC16) LL_subset: "LL \ {z \ Pow(y). z \ succ(k #+ m)}" +lemma LL_subset: "LL \ {z \ Pow(y). z \ succ(k #+ m)}" apply (unfold LL_def MM_def) apply (insert "includes") apply (blast intro: subset_imp_lepoll eqpoll_imp_lepoll lepoll_trans) done -lemma (in AC16) well_ord_LL: "\S. well_ord(LL,S)" +lemma well_ord_LL: "\S. well_ord(LL,S)" apply (rule well_ord_subsets_lepoll_n [THEN exE, of "succ(k#+m)"]) apply simp apply (blast intro: well_ord_subset [OF _ LL_subset]) @@ -408,7 +409,7 @@ (* every element of LL is a contained in exactly one element of MM *) (* ********************************************************************** *) -lemma (in AC16) unique_superset_in_MM: +lemma unique_superset_in_MM: "v \ LL ==> \! w. w \ MM & v \ w" apply (unfold MM_def LL_def, safe, fast) apply (rule lepoll_imp_eqpoll_subset [THEN exE], assumption) @@ -425,34 +426,34 @@ (* The union of appropriate values is the whole x *) (* ********************************************************************** *) -lemma (in AC16) Int_in_LL: "w \ MM ==> w \ y \ LL" +lemma Int_in_LL: "w \ MM ==> w \ y \ LL" by (unfold LL_def, fast) -lemma (in AC16) in_LL_eq_Int: +lemma in_LL_eq_Int: "v \ LL ==> v = (THE x. x \ MM & v \ x) \ y" apply (unfold LL_def, clarify) apply (subst unique_superset_in_MM [THEN the_equality2]) apply (auto simp add: Int_in_LL) done -lemma (in AC16) unique_superset1: "a \ LL \ (THE x. x \ MM \ a \ x) \ MM" +lemma unique_superset1: "a \ LL \ (THE x. x \ MM \ a \ x) \ MM" by (erule unique_superset_in_MM [THEN theI, THEN conjunct1]) -lemma (in AC16) the_in_MM_subset: +lemma the_in_MM_subset: "v \ LL ==> (THE x. x \ MM & v \ x) \ x \ y" apply (drule unique_superset1) apply (unfold MM_def) apply (fast dest!: unique_superset1 "includes" [THEN subsetD]) done -lemma (in AC16) GG_subset: "v \ LL ==> GG ` v \ x" +lemma GG_subset: "v \ LL ==> GG ` v \ x" apply (unfold GG_def) apply (frule the_in_MM_subset) apply (frule in_LL_eq_Int) apply (force elim: equalityE) done -lemma (in AC16) nat_lepoll_ordertype: "nat \ ordertype(y, R)" +lemma nat_lepoll_ordertype: "nat \ ordertype(y, R)" apply (rule nat_le_infinite_Ord [THEN le_imp_lepoll]) apply (rule Ord_ordertype [OF WO_R]) apply (rule ordertype_eqpoll [THEN eqpoll_imp_lepoll, THEN lepoll_infinite]) @@ -460,7 +461,7 @@ apply (rule Infinite) done -lemma (in AC16) ex_subset_eqpoll_n: "n \ nat ==> \z. z \ y & n \ z" +lemma ex_subset_eqpoll_n: "n \ nat ==> \z. z \ y & n \ z" apply (erule nat_lepoll_imp_ex_eqpoll_n) apply (rule lepoll_trans [OF nat_lepoll_ordertype]) apply (rule ordertype_eqpoll [THEN eqpoll_sym, THEN eqpoll_imp_lepoll]) @@ -468,7 +469,7 @@ done -lemma (in AC16) exists_proper_in_s: "u \ x ==> \v \ s(u). succ(k) \ v \ y" +lemma exists_proper_in_s: "u \ x ==> \v \ s(u). succ(k) \ v \ y" apply (rule ccontr) apply (subgoal_tac "\v \ s (u) . k \ v \ y") prefer 2 apply (simp add: s_def, blast intro: succ_not_lepoll_imp_eqpoll) @@ -479,12 +480,12 @@ apply (blast intro: lepoll_trans [OF y_lepoll_subset_s subset_s_lepoll_w]) done -lemma (in AC16) exists_in_MM: "u \ x ==> \w \ MM. u \ w" +lemma exists_in_MM: "u \ x ==> \w \ MM. u \ w" apply (erule exists_proper_in_s [THEN bexE]) apply (unfold MM_def s_def, fast) done -lemma (in AC16) exists_in_LL: "u \ x ==> \w \ LL. u \ GG`w" +lemma exists_in_LL: "u \ x ==> \w \ LL. u \ GG`w" apply (rule exists_in_MM [THEN bexE], assumption) apply (rule bexI) apply (erule_tac [2] Int_in_LL) @@ -494,7 +495,7 @@ apply (fast elim!: Int_in_LL)+ done -lemma (in AC16) OUN_eq_x: "well_ord(LL,S) ==> +lemma OUN_eq_x: "well_ord(LL,S) ==> (\b MM ==> w \ succ(k #+ m)" +lemma in_MM_eqpoll_n: "w \ MM ==> w \ succ(k #+ m)" apply (unfold MM_def) apply (fast dest: "includes" [THEN subsetD]) done -lemma (in AC16) in_LL_eqpoll_n: "w \ LL ==> succ(k) \ w" +lemma in_LL_eqpoll_n: "w \ LL ==> succ(k) \ w" by (unfold LL_def MM_def, fast) -lemma (in AC16) in_LL: "w \ LL ==> w \ (THE x. x \ MM \ w \ x)" +lemma in_LL: "w \ LL ==> w \ (THE x. x \ MM \ w \ x)" by (erule subset_trans [OF in_LL_eq_Int [THEN equalityD1] Int_lower1]) -lemma (in AC16) all_in_lepoll_m: +lemma all_in_lepoll_m: "well_ord(LL,S) ==> \b m" apply (unfold GG_def) @@ -541,7 +542,7 @@ THEN apply_type])+ done -lemma (in AC16) "conclusion": +lemma "conclusion": "\a f. Ord(a) & domain(f) = a & (\bb m)" apply (rule well_ord_LL [THEN exE]) apply (rename_tac S) @@ -553,13 +554,13 @@ Ord_ordertype OUN_eq_x all_in_lepoll_m [THEN ospec]) done +end + (* ********************************************************************** *) (* The main theorem AC16(n, k) ==> WO4(n-k) *) (* ********************************************************************** *) -term AC16 - theorem AC16_WO4: "[| AC_Equiv.AC16(k #+ m, k); 0 < k; 0 < m; k \ nat; m \ nat |] ==> WO4(m)" apply (unfold AC_Equiv.AC16_def WO4_def) diff -r da0cb00a4d6a -r 511d163ab623 src/ZF/AC/DC.thy --- a/src/ZF/AC/DC.thy Wed Aug 29 19:35:41 2018 +0200 +++ b/src/ZF/AC/DC.thy Wed Aug 29 20:01:39 2018 +0200 @@ -104,7 +104,7 @@ defines XX_def: "XX == (\n \ nat. {f \ n->X. \k \ n. \ R})" and RR_def: "RR == {:XX*XX. domain(z2)=succ(domain(z1)) & restrict(z2, domain(z1)) = z1}" - +begin (* ********************************************************************** *) (* DC ==> DC(omega) *) @@ -132,10 +132,10 @@ (* *) (* ********************************************************************** *) -lemma (in DC0_imp) lemma1_1: "RR \ XX*XX" +lemma lemma1_1: "RR \ XX*XX" by (unfold RR_def, fast) -lemma (in DC0_imp) lemma1_2: "RR \ 0" +lemma lemma1_2: "RR \ 0" apply (unfold RR_def XX_def) apply (rule all_ex [THEN ballE]) apply (erule_tac [2] notE [OF _ empty_subsetI [THEN PowI]]) @@ -152,7 +152,7 @@ apply (simp add: singleton_0) done -lemma (in DC0_imp) lemma1_3: "range(RR) \ domain(RR)" +lemma lemma1_3: "range(RR) \ domain(RR)" apply (unfold RR_def XX_def) apply (rule range_subset_domain, blast, clarify) apply (frule fun_is_rel [THEN image_subset, THEN PowI, @@ -168,7 +168,7 @@ apply (simp add: domain_of_fun succ_def restrict_cons_eq) done -lemma (in DC0_imp) lemma2: +lemma lemma2: "[| \n \ nat. \ RR; f \ nat -> XX; n \ nat |] ==> \k \ nat. f`succ(n) \ k -> X & n \ k & \ R" @@ -197,7 +197,7 @@ apply (blast dest: domain_of_fun [symmetric, THEN trans] ) done -lemma (in DC0_imp) lemma3_1: +lemma lemma3_1: "[| \n \ nat. \ RR; f \ nat -> XX; m \ nat |] ==> {f`succ(x)`x. x \ m} = {f`succ(m)`x. x \ m}" apply (subgoal_tac "\x \ m. f`succ (m) `x = f`succ (x) `x") @@ -220,7 +220,7 @@ intro: nat_into_Ord OrdmemD [THEN subsetD]) done -lemma (in DC0_imp) lemma3: +lemma lemma3: "[| \n \ nat. \ RR; f \ nat -> XX; m \ nat |] ==> (\x \ nat. f`succ(x)`x) `` m = f`succ(m)``m" apply (erule natE, simp) @@ -232,6 +232,7 @@ elim!: image_fun [symmetric, OF _ OrdmemD [OF _ nat_into_Ord]]) done +end theorem DC0_imp_DC_nat: "DC0 ==> DC(nat)" apply (unfold DC_def DC0_def, clarify) @@ -310,8 +311,9 @@ {\Fin(XX)*XX. (domain(z2)=succ(\f \ z1. domain(f)) & (\f \ z1. domain(f)) = b & (\f \ z1. restrict(z2,domain(f)) = f))}" +begin -lemma (in imp_DC0) lemma4: +lemma lemma4: "[| range(R) \ domain(R); x \ domain(R) |] ==> RR \ Pow(XX)*XX & (\Y \ Pow(XX). Y \ nat \ (\x \ XX. :RR))" @@ -329,25 +331,25 @@ apply (simp add: nat_0I [THEN rev_bexI] cons_fun_type2) done -lemma (in imp_DC0) UN_image_succ_eq: +lemma UN_image_succ_eq: "[| f \ nat->X; n \ nat |] ==> (\x \ f``succ(n). P(x)) = P(f`n) \ (\x \ f``n. P(x))" by (simp add: image_fun OrdmemD) -lemma (in imp_DC0) UN_image_succ_eq_succ: +lemma UN_image_succ_eq_succ: "[| (\x \ f``n. P(x)) = y; P(f`n) = succ(y); f \ nat -> X; n \ nat |] ==> (\x \ f``succ(n). P(x)) = succ(y)" by (simp add: UN_image_succ_eq, blast) -lemma (in imp_DC0) apply_domain_type: +lemma apply_domain_type: "[| h \ succ(n) -> D; n \ nat; domain(h)=succ(y) |] ==> h`y \ D" by (fast elim: apply_type dest!: trans [OF sym domain_of_fun]) -lemma (in imp_DC0) image_fun_succ: +lemma image_fun_succ: "[| h \ nat -> X; n \ nat |] ==> h``succ(n) = cons(h`n, h``n)" by (simp add: image_fun OrdmemD) -lemma (in imp_DC0) f_n_type: +lemma f_n_type: "[| domain(f`n) = succ(k); f \ nat -> XX; n \ nat |] ==> f`n \ succ(k) -> domain(R)" apply (unfold XX_def) @@ -355,7 +357,7 @@ apply (fast elim: domain_eq_imp_fun_type) done -lemma (in imp_DC0) f_n_pairs_in_R [rule_format]: +lemma f_n_pairs_in_R [rule_format]: "[| h \ nat -> XX; domain(h`n) = succ(k); n \ nat |] ==> \i \ k. \ R" apply (unfold XX_def) @@ -364,7 +366,7 @@ apply (drule domain_of_fun [symmetric, THEN trans], assumption, simp) done -lemma (in imp_DC0) restrict_cons_eq_restrict: +lemma restrict_cons_eq_restrict: "[| restrict(h, domain(u))=u; h \ n->X; domain(u) \ n |] ==> restrict(cons(, h), domain(u)) = u" apply (unfold restrict_def) @@ -373,7 +375,7 @@ apply (blast elim: mem_irrefl) done -lemma (in imp_DC0) all_in_image_restrict_eq: +lemma all_in_image_restrict_eq: "[| \x \ f``n. restrict(f`n, domain(x))=x; f \ nat -> XX; n \ nat; domain(f`n) = succ(n); @@ -387,7 +389,7 @@ apply (blast intro!: restrict_cons_eq_restrict) done -lemma (in imp_DC0) simplify_recursion: +lemma simplify_recursion: "[| \b \ RR; f \ nat -> XX; range(R) \ domain(R); x \ domain(R)|] ==> allRR" @@ -432,7 +434,7 @@ done -lemma (in imp_DC0) lemma2: +lemma lemma2: "[| allRR; f \ nat->XX; range(R) \ domain(R); x \ domain(R); n \ nat |] ==> f`n \ succ(n) -> domain(R) & (\i \ n. :R)" apply (unfold allRR_def) @@ -445,7 +447,7 @@ apply (fast elim!: trans [THEN domain_eq_imp_fun_type] subst_context) done -lemma (in imp_DC0) lemma3: +lemma lemma3: "[| allRR; f \ nat->XX; n\nat; range(R) \ domain(R); x \ domain(R) |] ==> f`n`n = f`succ(n)`n" apply (frule lemma2 [THEN conjunct1, THEN domain_of_fun], assumption+) @@ -457,6 +459,8 @@ apply (simp add: image_fun OrdmemD) done +end + theorem DC_nat_imp_DC0: "DC(nat) ==> DC0" apply (unfold DC_def DC0_def)