src/ZF/AC/DC.ML
author paulson
Tue, 26 Jun 2001 16:54:39 +0200
changeset 11380 e76366922751
parent 11317 7f9e4c389318
child 12153 dc67fdb03a2a
permissions -rw-r--r--
tidying and consolidating files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     1
(*  Title:      ZF/AC/DC.ML
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     2
    ID:  $Id$
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     3
    Author:     Krzysztof Grabczewski
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     4
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     5
The proofs concerning the Axiom of Dependent Choice
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     6
*)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     7
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     8
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     9
(* DC ==> DC(omega)                                                       *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    10
(*                                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    11
(* The scheme of the proof:                                               *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    12
(*                                                                        *)
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    13
(* Assume DC. Let R and X satisfy the premise of DC(omega).               *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    14
(*                                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    15
(* Define XX and RR as follows:                                           *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    16
(*                                                                        *)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    17
(*       XX = (\\<Union>n \\<in> nat. {f \\<in> n->X. \\<forall>k \\<in> n. <f``k, f`k> \\<in> R})              *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    18
(*       f RR g iff domain(g)=succ(domain(f)) &                           *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    19
(*              restrict(g, domain(f)) = f                                *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    20
(*                                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    21
(* Then RR satisfies the hypotheses of DC.                                *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    22
(* So applying DC:                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    23
(*                                                                        *)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    24
(*       \\<exists>f \\<in> nat->XX. \\<forall>n \\<in> nat. f`n RR f`succ(n)                        *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    25
(*                                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    26
(* Thence                                                                 *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    27
(*                                                                        *)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    28
(*       ff = {<n, f`succ(n)`n>. n \\<in> nat}                                   *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    29
(*                                                                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    30
(* is the desired function.                                               *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    31
(*                                                                        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    32
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    33
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    34
Open_locale "DC0_imp";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    35
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    36
val all_ex = thm "all_ex";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    37
val XX_def = thm "XX_def";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    38
val RR_def = thm "RR_def";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    39
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    40
Goalw [RR_def] "RR \\<subseteq> XX*XX";
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    41
by (Fast_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    42
qed "lemma1_1";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    43
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    44
Goalw [RR_def, XX_def] "RR \\<noteq> 0";
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    45
by (rtac (all_ex RS ballE) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    46
by (eresolve_tac [empty_subsetI RS PowI RSN (2, notE)] 2);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    47
by (eresolve_tac [nat_0I RS n_lesspoll_nat RSN (2, impE)] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    48
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    49
by (res_inst_tac [("a","<0, {<0, x>}>")] not_emptyI 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    50
by (rtac CollectI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    51
by (rtac SigmaI 1);
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 9402
diff changeset
    52
by (rtac (nat_0I RS UN_I) 1);
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 9402
diff changeset
    53
by (asm_simp_tac (simpset() addsimps [nat_0I RS UN_I]) 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2483
diff changeset
    54
by (rtac (nat_1I RS UN_I) 1);
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 9402
diff changeset
    55
by (asm_simp_tac (simpset() addsimps [singleton_0]) 2);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    56
by (force_tac (claset() addSIs [singleton_fun RS Pi_type],
9683
f87c8c449018 added some xsymbols, and tidied
paulson
parents: 9402
diff changeset
    57
	       simpset() addsimps [singleton_0 RS sym]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    58
qed "lemma1_2";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    59
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    60
Goalw [RR_def, XX_def] "range(RR) \\<subseteq> domain(RR)";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    61
by (rtac range_subset_domain 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    62
by (Blast_tac 2);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    63
by (Clarify_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    64
by (forward_tac [fun_is_rel RS image_subset RS PowI RS (all_ex RS bspec)] 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    65
by (eresolve_tac [[n_lesspoll_nat, nat_into_Ord RSN (2, image_Ord_lepoll)]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    66
        MRS lepoll_lesspoll_lesspoll RSN (2, impE)] 1
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    67
        THEN REPEAT (assume_tac 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    68
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    69
by (res_inst_tac [("x","cons(<n,x>, g)")] exI 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    70
by (rtac CollectI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    71
by (force_tac (claset() addSEs [cons_fun_type2],
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    72
	       simpset() addsimps [cons_image_n, cons_val_n, 
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    73
				   cons_image_k, cons_val_k]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
    74
by (asm_full_simp_tac (simpset()
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    75
        addsimps [domain_of_fun, succ_def, restrict_cons_eq]) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    76
qed "lemma1_3";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    77
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    78
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    79
Goal "[| \\<forall>n \\<in> nat. <f`n, f`succ(n)> \\<in> RR;  f \\<in> nat -> XX;  n \\<in> nat |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    80
\     ==> \\<exists>k \\<in> nat. f`succ(n) \\<in> k -> X & n \\<in> k  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    81
\                 & <f`succ(n)``n, f`succ(n)`n> \\<in> R";
6070
032babd0120b ZF: the natural numbers as a datatype
paulson
parents: 6021
diff changeset
    82
by (induct_tac "n" 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    83
by (dresolve_tac [nat_1I RSN (2, apply_type)] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    84
by (dresolve_tac [nat_0I RSN (2, bspec)] 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    85
by (asm_full_simp_tac (simpset() addsimps [XX_def]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    86
by Safe_tac;
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
    87
by (rtac bexI 1 THEN (assume_tac 2));
9402
480a1b40fdd6 strengthened force_tac by using new first_best_tac
oheimb
parents: 8123
diff changeset
    88
by (best_tac (claset() addIs [ltD]
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    89
                        addSEs [nat_0_le RS leE]
9402
480a1b40fdd6 strengthened force_tac by using new first_best_tac
oheimb
parents: 8123
diff changeset
    90
			addEs [sym RS trans RS succ_neq_0, domain_of_fun]
480a1b40fdd6 strengthened force_tac by using new first_best_tac
oheimb
parents: 8123
diff changeset
    91
	       addss (simpset() addsimps [RR_def])) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    92
(** LEVEL 7, other subgoal **)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    93
by (dresolve_tac [nat_succI RSN (2, bspec)] 1 THEN (assume_tac 1));
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
    94
by (subgoal_tac "f ` succ(succ(x)) \\<in> succ(k)->X" 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    95
by (dresolve_tac [nat_succI RS nat_succI RSN (2, apply_type)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    96
        THEN (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
    97
by (full_simp_tac (simpset() addsimps [XX_def,RR_def]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    98
by Safe_tac;
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
    99
by (forw_inst_tac [("a","succ(k)")] (domain_of_fun RS sym RS trans) 1 THEN
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   100
    (assume_tac 1));
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   101
by (forw_inst_tac [("a","xa")] (domain_of_fun RS sym RS trans) 1 THEN
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   102
    (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   103
by (fast_tac (claset() addSEs [nat_into_Ord RS succ_in_succ]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   104
        addSDs [nat_into_Ord RS succ_in_succ RSN (2, bspec)]) 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   105
by (dtac domain_of_fun 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   106
by (full_simp_tac (simpset() addsimps [XX_def,RR_def]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   107
by (deepen_tac (claset() addDs [domain_of_fun RS sym RS trans]) 0 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   108
qed "lemma2";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   109
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   110
Goal "[| \\<forall>n \\<in> nat. <f`n, f`succ(n)> \\<in> RR;  f \\<in> nat -> XX;  m \\<in> nat |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   111
\     ==>  {f`succ(x)`x. x \\<in> m} = {f`succ(m)`x. x \\<in> m}";
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   112
by (subgoal_tac "\\<forall>x \\<in> m. f`succ(m)`x = f`succ(x)`x" 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   113
by (Asm_full_simp_tac 1);
6070
032babd0120b ZF: the natural numbers as a datatype
paulson
parents: 6021
diff changeset
   114
by (induct_tac "m" 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   115
by (Fast_tac 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   116
by (rtac ballI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   117
by (etac succE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   118
by (rtac restrict_eq_imp_val_eq 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   119
by (dresolve_tac [nat_succI RSN (2, bspec)] 1 THEN (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   120
by (asm_full_simp_tac (simpset() addsimps [RR_def]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   121
by (dtac lemma2 1 THEN REPEAT (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   122
by (fast_tac (claset() addSDs [domain_of_fun]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   123
by (dres_inst_tac [("x","xa")] bspec 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   124
by (eresolve_tac [sym RS trans RS sym] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   125
by (resolve_tac [restrict_eq_imp_val_eq RS sym] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   126
by (dresolve_tac [nat_succI RSN (2, bspec)] 1 THEN (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   127
by (asm_full_simp_tac (simpset() addsimps [RR_def]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   128
by (dtac lemma2 1 THEN REPEAT (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   129
by (blast_tac (claset() addSDs [domain_of_fun]
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   130
                        addIs [nat_into_Ord RSN (2, OrdmemD) RS subsetD]) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   131
qed "lemma3_1";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   132
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   133
Goal "[| \\<forall>n \\<in> nat. <f`n, f`succ(n)> \\<in> RR;  f \\<in> nat -> XX;  m \\<in> nat |] \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   134
\     ==> (\\<lambda>x \\<in> nat. f`succ(x)`x) `` m = f`succ(m)``m";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   135
by (etac natE 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   136
by (Asm_simp_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   137
by (stac image_lam 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   138
by (fast_tac (claset() addSEs [[nat_succI, Ord_nat] MRS OrdmemD]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   139
by (stac lemma3_1 1 THEN REPEAT (assume_tac 1));
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   140
by (Fast_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   141
by (fast_tac (claset() addSDs [lemma2]
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   142
		       addSEs [nat_into_Ord RSN (2, OrdmemD) RSN 
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   143
                            (2, image_fun RS sym)]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   144
qed "lemma3";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   145
6021
4a3fc834288e new Close_locale synatx
paulson
parents: 5482
diff changeset
   146
Close_locale "DC0_imp";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   147
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   148
Goalw [DC_def, DC0_def] "DC0 ==> DC(nat)";
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   149
by (Clarify_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   150
by (REPEAT (etac allE 1));
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   151
by (etac impE 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   152
   (*these three results comprise Lemma 1*)
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   153
by (blast_tac (claset() addSIs (map export [lemma1_1, lemma1_2, lemma1_3])) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   154
by (etac bexE 1);
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   155
by (res_inst_tac [("x","\\<lambda>n \\<in> nat. f`succ(n)`n")] bexI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   156
by (fast_tac (claset() addSIs [lam_type] addSDs [export lemma2]
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   157
                       addSEs [fun_weaken_type, apply_type]) 2);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   158
by (rtac oallI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   159
by (forward_tac [ltD RSN (3, export lemma2)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   160
        THEN assume_tac 2);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   161
by (fast_tac (claset() addSEs [fun_weaken_type]) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   162
(** LEVEL 10: last subgoal **)
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   163
by (stac (ltD RSN (3, export lemma3)) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   164
by (Force_tac 4);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   165
by (assume_tac 3);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   166
by (assume_tac 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   167
by (fast_tac (claset() addSEs [fun_weaken_type]) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   168
qed "DC0_imp_DC_nat";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   169
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   170
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   171
(* ************************************************************************
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   172
   DC(omega) ==> DC                                                       
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   173
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   174
   The scheme of the proof:                                               
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   175
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   176
   Assume DC(omega). Let R and x satisfy the premise of DC.               
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   177
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   178
   Define XX and RR as follows:                                           
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   179
                                                                          
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   180
    XX = (\\<Union>n \\<in> nat. {f \\<in> succ(n)->domain(R). \\<forall>k \\<in> n. <f`k, f`succ(k)> \\<in> R})
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   181
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   182
    RR = {<z1,z2>:Fin(XX)*XX. 
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   183
           (domain(z2)=succ(\\<Union>f \\<in> z1. domain(f)) &
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   184
	    (\\<forall>f \\<in> z1. restrict(z2, domain(f)) = f)) |      
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   185
	   (~ (\\<exists>g \\<in> XX. domain(g)=succ(\\<Union>f \\<in> z1. domain(f)) &
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   186
	                (\\<forall>f \\<in> z1. restrict(g, domain(f)) = f)) &           
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   187
	    z2={<0,x>})}                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   188
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   189
   Then XX and RR satisfy the hypotheses of DC(omega).                    
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   190
   So applying DC:                                                        
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   191
                                                                          
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   192
         \\<exists>f \\<in> nat->XX. \\<forall>n \\<in> nat. f``n RR f`n                             
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   193
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   194
   Thence                                                                 
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   195
                                                                          
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   196
         ff = {<n, f`n`n>. n \\<in> nat}                                         
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   197
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   198
   is the desired function.                                               
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   199
                                                                          
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   200
************************************************************************* *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   201
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   202
Goal "n \\<in> nat ==> \\<forall>A. (A eqpoll n & A \\<subseteq> X) --> A \\<in> Fin(X)";
6070
032babd0120b ZF: the natural numbers as a datatype
paulson
parents: 6021
diff changeset
   203
by (induct_tac "n" 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   204
by (rtac allI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   205
by (fast_tac (claset() addSIs [Fin.emptyI]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   206
        addSDs [eqpoll_imp_lepoll RS lepoll_0_is_0]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   207
by (rtac allI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   208
by (rtac impI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   209
by (etac conjE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   210
by (resolve_tac [eqpoll_succ_imp_not_empty RS not_emptyE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   211
        THEN (assume_tac 1));
7499
23e090051cb8 isatool expandshort;
wenzelm
parents: 6070
diff changeset
   212
by (ftac Diff_sing_eqpoll 1 THEN (assume_tac 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   213
by (etac allE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   214
by (etac impE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   215
by (Fast_tac 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   216
by (dtac subsetD 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   217
by (dresolve_tac [Fin.consI] 1 THEN (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   218
by (asm_full_simp_tac (simpset() addsimps [cons_Diff]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   219
qed "Finite_Fin_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   220
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   221
Goalw [Finite_def] "[| Finite(A); A \\<subseteq> X |] ==> A \\<in> Fin(X)";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   222
by (etac bexE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   223
by (dtac Finite_Fin_lemma 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   224
by (etac allE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   225
by (etac impE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   226
by (assume_tac 2);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   227
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   228
qed "Finite_Fin";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   229
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   230
Goal
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   231
 "x \\<in> X ==> {<0,x>}: (\\<Union>n \\<in> nat. {f \\<in> succ(n)->X. \\<forall>k \\<in> n. <f`k, f`succ(k)> \\<in> R})";
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2483
diff changeset
   232
by (rtac (nat_0I RS UN_I) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   233
by (fast_tac (claset() addSIs [singleton_fun RS Pi_type]
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   234
        addss (simpset() addsimps [singleton_0 RS sym])) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   235
qed "singleton_in_funs";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   236
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   237
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   238
Open_locale "imp_DC0";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   239
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   240
val XX_def = thm "XX_def";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   241
val RR_def = thm "RR_def";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   242
val allRR_def = thm "allRR_def";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   243
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   244
Goal "[| range(R) \\<subseteq> domain(R);  x \\<in> domain(R) |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   245
\     ==> RR \\<subseteq> Pow(XX)*XX &  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   246
\            (\\<forall>Y \\<in> Pow(XX). Y lesspoll nat --> (\\<exists>x \\<in> XX. <Y,x>:RR))";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   247
by (rtac conjI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   248
by (force_tac (claset() addSDs [FinD RS PowI], 
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   249
	       simpset() addsimps [RR_def]) 1); 
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   250
by (rtac (impI RS ballI) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   251
by (dresolve_tac [[lesspoll_nat_is_Finite, PowD] MRS Finite_Fin] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   252
        THEN (assume_tac 1));
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   253
by (excluded_middle_tac "\\<exists>g \\<in> XX. domain(g)=succ(\\<Union>f \\<in> Y. domain(f))  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   254
\       & (\\<forall>f \\<in> Y. restrict(g, domain(f)) = f)" 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   255
by (fast_tac (claset() addss (simpset() addsimps [RR_def])) 2); 
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   256
by (safe_tac (claset() delrules [domainE]));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   257
by (rewrite_goals_tac [XX_def,RR_def]);
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   258
by (swap_res_tac [bexI] 1 THEN etac singleton_in_funs 2);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   259
by (asm_full_simp_tac (simpset() addsimps [nat_0I  RSN (2, bexI), 
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   260
					   cons_fun_type2]) 1);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   261
qed "lemma4";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   262
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   263
Goal "[| f \\<in> nat->X; n \\<in> nat |] ==>  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   264
\       (\\<Union>x \\<in> f``succ(n). P(x)) =  P(f`n) Un (\\<Union>x \\<in> f``n. P(x))";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   265
by (asm_full_simp_tac (simpset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   266
        addsimps [Ord_nat RSN (2, OrdmemD) RSN (2, image_fun),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   267
        [nat_succI, Ord_nat] MRS OrdmemD RSN (2, image_fun)]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   268
qed "UN_image_succ_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   269
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   270
Goal "[| (\\<Union>x \\<in> f``n. P(x)) = y; P(f`n) = succ(y);  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   271
\        f \\<in> nat -> X; n \\<in> nat |] ==> (\\<Union>x \\<in> f``succ(n). P(x)) = succ(y)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   272
by (asm_full_simp_tac (simpset() addsimps [UN_image_succ_eq]) 1);
2496
40efb87985b5 Removal of needless "addIs [equality]", etc.
paulson
parents: 2493
diff changeset
   273
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   274
qed "UN_image_succ_eq_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   275
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   276
Goal "[| f \\<in> succ(n) -> D;  n \\<in> nat;  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   277
\        domain(f)=succ(x); x=y |] ==> f`y \\<in> D";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   278
by (fast_tac (claset() addEs [apply_type]
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   279
	      addSDs [[sym, domain_of_fun] MRS trans]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   280
qed "apply_domain_type";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   281
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   282
Goal "[| f \\<in> nat -> X; n \\<in> nat |] ==> f``succ(n) = cons(f`n, f``n)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   283
by (asm_full_simp_tac (simpset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   284
        addsimps [nat_succI, Ord_nat RSN (2, OrdmemD), image_fun]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   285
qed "image_fun_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   286
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   287
Goalw [XX_def] "[| domain(f`n) = succ(u); f \\<in> nat -> XX;  u=k;  n \\<in> nat |]   \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   288
\               ==> f`n \\<in> succ(k) -> domain(R)";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   289
by (dtac apply_type 1 THEN (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   290
by (fast_tac (claset() addEs [domain_eq_imp_fun_type]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   291
qed "f_n_type";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   292
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   293
Goalw [XX_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   294
     "[| f \\<in> nat -> XX;  domain(f`n) = succ(k);  n \\<in> nat |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   295
\     ==> \\<forall>i \\<in> k. <f`n`i, f`n`succ(i)> \\<in> R";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   296
by (dtac apply_type 1 THEN (assume_tac 1));
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   297
by (etac UN_E 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   298
by (etac CollectE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   299
by (dresolve_tac [domain_of_fun RS sym RS trans] 1 THEN (assume_tac 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   300
by (Asm_full_simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   301
qed "f_n_pairs_in_R";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   302
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4723
diff changeset
   303
Goalw [restrict_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   304
     "[| restrict(f, domain(x))=x;  f \\<in> n->X;  domain(x) \\<subseteq> n |]  \
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   305
\     ==> restrict(cons(<n, y>, f), domain(x)) = x";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   306
by (eresolve_tac [sym RS trans RS sym] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   307
by (rtac fun_extension 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   308
by (fast_tac (claset() addSIs [lam_type]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   309
by (fast_tac (claset() addSIs [lam_type]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   310
by (asm_full_simp_tac (simpset() addsimps [subsetD RS cons_val_k]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   311
qed "restrict_cons_eq_restrict";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   312
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   313
Goal "[| \\<forall>x \\<in> f``n. restrict(f`n, domain(x))=x;  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   314
\        f \\<in> nat -> XX;  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   315
\        n \\<in> nat;  domain(f`n) = succ(n);  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   316
\        (\\<Union>x \\<in> f``n. domain(x)) \\<subseteq> n |] \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   317
\     ==> \\<forall>x \\<in> f``succ(n). restrict(cons(<succ(n),y>, f`n), domain(x)) = x";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   318
by (rtac ballI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   319
by (asm_full_simp_tac (simpset() addsimps [image_fun_succ]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   320
by (dtac f_n_type 1 THEN REPEAT (ares_tac [refl] 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   321
by (etac disjE 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   322
by (asm_full_simp_tac (simpset() addsimps [domain_of_fun,restrict_cons_eq]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   323
by (dtac bspec 1 THEN (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   324
by (fast_tac (claset() addSEs [restrict_cons_eq_restrict]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   325
qed "all_in_image_restrict_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   326
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   327
Goalw [RR_def, allRR_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   328
     "[| \\<forall>b<nat. <f``b, f`b> \\<in> RR;  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   329
\        f \\<in> nat -> XX; range(R) \\<subseteq> domain(R); x \\<in> domain(R)|]   \
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   330
\     ==> allRR";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   331
by (rtac oallI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   332
by (dtac ltD 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   333
by (etac nat_induct 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   334
by (dresolve_tac [[nat_0I, Ord_nat] MRS ltI RSN (2, ospec)] 1);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
   335
by (fast_tac (FOL_cs addss
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   336
              (simpset() addsimps [singleton_fun RS domain_of_fun,
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2483
diff changeset
   337
                                  singleton_0, singleton_in_funs])) 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   338
(*induction step*) (** LEVEL 5 **)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   339
by (full_simp_tac (*prevent simplification of ~\\<exists>to \\<forall>~*)
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   340
		  (FOL_ss addsimps [separation, split]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   341
by (dresolve_tac [[nat_succI, Ord_nat] MRS ltI RSN (2, ospec)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   342
        THEN (assume_tac 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   343
by (REPEAT (eresolve_tac [conjE, disjE] 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   344
by (force_tac (FOL_cs addSEs [trans, subst_context]
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   345
                     addSIs [UN_image_succ_eq_succ], simpset()) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   346
by (etac conjE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   347
by (etac notE 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   348
by (asm_lr_simp_tac (simpset() addsimps [XX_def, UN_image_succ_eq_succ]) 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   349
(** LEVEL 12 **)
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   350
by (REPEAT (eresolve_tac [conjE, bexE] 1));
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   351
by (dtac apply_domain_type 1 THEN REPEAT (assume_tac 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   352
by (etac domainE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   353
by (etac domainE 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   354
by (forward_tac [export f_n_type] 1 THEN REPEAT (assume_tac 1));
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2483
diff changeset
   355
by (rtac bexI 1);
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   356
by (etac nat_succI 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   357
by (res_inst_tac [("x","cons(<succ(xa), ya>, f`xa)")] bexI 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2483
diff changeset
   358
by (rtac conjI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   359
by (fast_tac (FOL_cs
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   360
        addEs [subst_context RSN (2, trans) RS domain_cons_eq_succ,
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   361
	       subst_context, export all_in_image_restrict_eq, 
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   362
	       trans, equalityD1]) 2);
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   363
by (eresolve_tac [rangeI RSN (2, subsetD) RSN (2, cons_fun_type2)] 2
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   364
        THEN REPEAT (assume_tac 2));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   365
by (rtac ballI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   366
by (etac succE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   367
(** LEVEL 25 **)
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   368
by (dresolve_tac [domain_of_fun RSN (2, export f_n_pairs_in_R)] 2
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   369
        THEN REPEAT (assume_tac 2));
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   370
by (dtac bspec 2 THEN (assume_tac 2));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   371
by (asm_full_simp_tac (simpset()
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   372
        addsimps [nat_into_Ord RS succ_in_succ, succI2, cons_val_k]) 2);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   373
by (asm_full_simp_tac (simpset() addsimps [cons_val_n, cons_val_k]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   374
qed "simplify_recursion";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   375
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   376
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   377
Goalw [allRR_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   378
     "[| allRR; f \\<in> nat -> XX; range(R) \\<subseteq> domain(R); x \\<in> domain(R); n \\<in> nat |]   \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   379
\     ==> f`n \\<in> succ(n) -> domain(R) & (\\<forall>i \\<in> n. <f`n`i, f`n`succ(i)>:R)";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   380
by (dtac ospec 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   381
by (eresolve_tac [Ord_nat RSN (2, ltI)] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   382
by (etac CollectE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   383
by (Asm_full_simp_tac 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   384
by (rtac conjI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   385
by (fast_tac (FOL_cs addSEs [conjE, f_n_pairs_in_R, trans, subst_context]) 2);
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   386
by (rewtac XX_def);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   387
by (fast_tac (claset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   388
        addSEs [trans RS domain_eq_imp_fun_type, subst_context]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   389
qed "lemma2";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   390
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   391
Goal "[| allRR;  f \\<in> nat -> XX;  n \\<in> nat;  range(R) \\<subseteq> domain(R);  x \\<in> domain(R)  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   392
\       |] ==> f`n`n = f`succ(n)`n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   393
by (forward_tac [lemma2 RS conjunct1 RS domain_of_fun] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   394
        THEN REPEAT (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   395
by (rewtac allRR_def);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   396
by (dresolve_tac [[nat_succI, Ord_nat] MRS ltI RSN (2, ospec)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   397
        THEN (assume_tac 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   398
by (Asm_full_simp_tac 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   399
by (REPEAT (etac conjE 1));
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   400
by (etac ballE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   401
by (eresolve_tac [restrict_eq_imp_val_eq RS sym] 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   402
by (fast_tac (claset() addSEs [ssubst]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   403
by (asm_full_simp_tac (simpset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   404
        addsimps [[nat_succI, Ord_nat] MRS OrdmemD RSN (2, image_fun)]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   405
qed "lemma3";
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   406
6021
4a3fc834288e new Close_locale synatx
paulson
parents: 5482
diff changeset
   407
Close_locale "imp_DC0";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   408
3862
6f389875ab33 Patch to avoid simplification of ~EX to ALL~
paulson
parents: 3731
diff changeset
   409
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   410
Goalw [DC_def, DC0_def] "DC(nat) ==> DC0";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   411
by (REPEAT (resolve_tac [allI, impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   412
by (REPEAT (eresolve_tac [asm_rl, conjE, ex_in_domain RS exE, allE] 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   413
by (eresolve_tac [export lemma4 RSN (2, impE)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   414
        THEN REPEAT (assume_tac 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   415
by (etac bexE 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   416
by (dresolve_tac [export simplify_recursion] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   417
        THEN REPEAT (assume_tac 1));
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   418
by (res_inst_tac [("x","\\<lambda>n \\<in> nat. f`n`n")] bexI 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   419
by (rtac lam_type 2);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   420
by (eresolve_tac [[export lemma2 RS conjunct1, succI1] MRS apply_type] 2
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   421
        THEN REPEAT (assume_tac 2));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   422
by (rtac ballI 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   423
by (forward_tac [export (nat_succI RSN (5,lemma2)) RS conjunct2] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   424
        THEN REPEAT (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   425
by (dresolve_tac [export lemma3] 1 THEN REPEAT (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   426
by (asm_full_simp_tac (simpset() addsimps [nat_succI]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   427
qed "DC_nat_imp_DC0";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   428
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   429
(* ********************************************************************** *)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   430
(* \\<forall>K. Card(K) --> DC(K) ==> WO3                                       *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   431
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   432
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4723
diff changeset
   433
Goalw [lesspoll_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   434
        "[| ~ A lesspoll B; C lesspoll B |] ==> A - C \\<noteq> 0";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   435
by (fast_tac (claset() addSDs [Diff_eq_0_iff RS iffD1 RS subset_imp_lepoll]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   436
        addSIs [eqpollI] addEs [notE] addSEs [eqpollE, lepoll_trans]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   437
qed "lesspoll_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   438
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   439
val [f_type, Ord_a, not_eq] = goalw thy [inj_def]
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   440
        "[| f \\<in> a->X; Ord(a); (!!b c. [| b<c; c \\<in> a |] ==> f`b\\<noteq>f`c) |]   \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   441
\        ==> f \\<in> inj(a, X)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   442
by (resolve_tac [f_type RS CollectI] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   443
by (REPEAT (resolve_tac [ballI,impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   444
by (resolve_tac [Ord_a RS Ord_in_Ord RS Ord_linear_lt] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   445
        THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   446
by (eres_inst_tac [("j","x")] (Ord_a RS Ord_in_Ord) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   447
by (REPEAT (fast_tac (claset() addDs [not_eq, not_eq RS not_sym]) 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   448
qed "fun_Ord_inj";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   449
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   450
Goal "[| f \\<in> X->Y; A \\<subseteq> X; a \\<in> A |] ==> f`a \\<in> f``A";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   451
by (fast_tac (claset() addSEs [image_fun RS ssubst]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   452
qed "value_in_image";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   453
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   454
Goalw [DC_def, WO3_def] "\\<forall>K. Card(K) --> DC(K) ==> WO3";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   455
by (rtac allI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   456
by (excluded_middle_tac "A lesspoll Hartog(A)" 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   457
by (fast_tac (claset() addSDs [lesspoll_imp_ex_lt_eqpoll]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   458
        addSIs [Ord_Hartog, leI RS le_imp_subset]) 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   459
by (REPEAT (eresolve_tac [allE, impE] 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   460
by (rtac Card_Hartog 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   461
by (eres_inst_tac [("x","A")] allE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   462
by (eres_inst_tac [("x","{<z1,z2>:Pow(A)*A . z1  \
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   463
\               lesspoll Hartog(A) & z2 \\<notin> z1}")] allE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   464
by (Asm_full_simp_tac 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   465
by (etac impE 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   466
by (fast_tac (claset() addEs [lesspoll_lemma RS not_emptyE]) 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   467
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   468
by (resolve_tac [exI RS (lepoll_def RS (def_imp_iff RS iffD2))
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   469
        RS (HartogI RS notE)] 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   470
by (resolve_tac [Ord_Hartog RSN (2, fun_Ord_inj)] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   471
by (dresolve_tac [Ord_Hartog RSN (2, OrdmemD) RSN (2,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   472
        ltD RSN (3, value_in_image))] 1 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   473
        THEN REPEAT (assume_tac 1));
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   474
by (force_tac (claset() addSDs [Ord_Hartog RSN (2, ltI) RSN (2, ospec)], 
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   475
	       simpset()) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   476
qed "DC_WO3";
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   477
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   478
(* ********************************************************************** *)
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   479
(* WO1 ==> \\<forall>K. Card(K) --> DC(K)                                       *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   480
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   481
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   482
Goal "[| Ord(a); b \\<in> a |] ==> (\\<lambda>x \\<in> a. P(x))``b = (\\<lambda>x \\<in> b. P(x))``b";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   483
by (rtac images_eq 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   484
by (REPEAT (fast_tac (claset() addSEs [RepFunI, OrdmemD]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   485
        addSIs [lam_type]) 2));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   486
by (rtac ballI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   487
by (dresolve_tac [OrdmemD RS subsetD] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   488
        THEN REPEAT (assume_tac 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   489
by (Asm_full_simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   490
qed "lam_images_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   491
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   492
Goalw [lesspoll_def] "[| Card(K); b \\<in> K |] ==> b lesspoll K";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   493
by (asm_full_simp_tac (simpset() addsimps [Card_iff_initial]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   494
by (fast_tac (claset() addSIs [le_imp_lepoll, ltI, leI]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   495
qed "in_Card_imp_lesspoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   496
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   497
Goal "(\\<lambda>b \\<in> a. P(b)) \\<in> a -> {P(b). b \\<in> a}";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   498
by (fast_tac (claset() addSIs [lam_type, RepFunI]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   499
qed "lam_type_RepFun";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   500
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   501
Goal "[| \\<forall>Y \\<in> Pow(X). Y lesspoll K --> (\\<exists>x \\<in> X. <Y, x> \\<in> R);  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   502
\        b \\<in> K; Z \\<in> Pow(X); Z lesspoll K |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   503
\     ==> {x \\<in> X. <Z,x> \\<in> R} \\<noteq> 0";
5265
9d1d4c43c76d Disjointness reasoning by AddEs [equals0E, sym RS equals0E]
paulson
parents: 5241
diff changeset
   504
by (Blast_tac 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   505
qed "lemmaX";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   506
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
   507
Goal "[| Card(K); well_ord(X,Q);  \
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   508
\       \\<forall>Y \\<in> Pow(X). Y lesspoll K --> (\\<exists>x \\<in> X. <Y, x> \\<in> R); b \\<in> K |]  \
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   509
\       ==> ff(b, X, Q, R) \\<in> {x \\<in> X. <(\\<lambda>c \\<in> b. ff(c, X, Q, R))``b, x> \\<in> R}";
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   510
by (res_inst_tac [("P","b \\<in> K")] impE 1 THEN TRYALL assume_tac);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   511
by (res_inst_tac [("i","b")] (Card_is_Ord RS Ord_in_Ord RS trans_induct) 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   512
        THEN REPEAT (assume_tac 1));
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   513
by (rtac impI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   514
by (resolve_tac [ff_def RS def_transrec RS ssubst] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   515
by (etac the_first_in 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   516
by (Fast_tac 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   517
by (asm_full_simp_tac (simpset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   518
        addsimps [[lam_type_RepFun, subset_refl] MRS image_fun]) 1);
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   519
by (etac lemmaX 1 THEN assume_tac 1);
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   520
by (blast_tac (claset() addIs [Card_is_Ord RSN (2, OrdmemD) RS subsetD]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   521
by (fast_tac (claset() addSEs [[in_Card_imp_lesspoll, RepFun_lepoll]
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   522
			       MRS lepoll_lesspoll_lesspoll]) 1);
5482
73dc3b2a7102 tidied using locales
paulson
parents: 5268
diff changeset
   523
qed "lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   524
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   525
Goalw [DC_def, WO1_def] "WO1 ==> \\<forall>K. Card(K) --> DC(K)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   526
by (REPEAT (resolve_tac [allI,impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   527
by (REPEAT (eresolve_tac [allE,exE,conjE] 1));
11317
7f9e4c389318 X-symbols for set theory
paulson
parents: 9683
diff changeset
   528
by (res_inst_tac [("x","\\<lambda>b \\<in> K. ff(b, X, Ra, R)")] bexI 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1200
diff changeset
   529
by (rtac lam_type 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   530
by (resolve_tac [lemma RS CollectD1] 2 THEN REPEAT (assume_tac 2));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   531
by (asm_full_simp_tac (simpset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
   532
        addsimps [[Card_is_Ord, ltD] MRS lam_images_eq]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3862
diff changeset
   533
by (fast_tac (claset() addSEs [ltE, lemma RS CollectD2]) 1);
4723
9e2609b1bfb1 Adapted proofs because of new simplification tactics.
nipkow
parents: 4091
diff changeset
   534
qed "WO1_DC_Card";