src/ZF/AC/AC16_WO4.ML
author paulson
Tue, 04 Aug 1998 16:05:19 +0200
changeset 5241 e5129172cb2b
parent 5147 825877190618
child 5265 9d1d4c43c76d
permissions -rw-r--r--
Renamed equals0D to equals0E; tidied
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
     1
(*  Title:      ZF/AC/AC16_WO4.ML
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
     3
    Author:     Krzysztof Grabczewski
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
     4
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
     5
  The proof of AC16(n, k) ==> WO4(n-k)
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
     6
*)
1196
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
open AC16_WO4;
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     9
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    10
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    11
(* The case of finite set                                                 *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    12
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    13
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    14
Goalw [Finite_def] "[| Finite(A); 0<m; m:nat |] ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    15
\       EX a f. Ord(a) & domain(f) = a &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    16
\               (UN b<a. f`b) = A & (ALL b<a. f`b lepoll m)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    17
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    18
by (dresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1)] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    19
by (etac exE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    20
by (res_inst_tac [("x","n")] exI 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    21
by (res_inst_tac [("x","lam i:n. {f`i}")] exI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
    22
by (Asm_full_simp_tac 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    23
by (rewrite_goals_tac [bij_def, surj_def]);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    24
by (fast_tac (claset() addSIs [ltI, nat_into_Ord, lam_funtype RS domain_of_fun,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    25
        equalityI, singleton_eqpoll_1 RS eqpoll_imp_lepoll RS lepoll_trans,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    26
        nat_1_lepoll_iff RS iffD2]
1932
cc9f1ba8f29a Tidying: removing redundant args in classical reasoner calls
paulson
parents: 1924
diff changeset
    27
        addSEs [apply_type, ltE]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    28
val lemma1 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    29
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    30
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    31
(* The case of infinite set                                               *)
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
2167
5819e85ad261 Adjusting to new version of uresult
paulson
parents: 1932
diff changeset
    34
(* well_ord(x,r) ==> well_ord({{y,z}. y:x}, Something(x,z))  **)
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    35
bind_thm ("well_ord_paired", (paired_bij RS bij_is_inj RS well_ord_rvimage));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    36
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    37
Goal "[| A lepoll B; ~ A lepoll C |] ==> ~ B lepoll C";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    38
by (fast_tac (claset() addEs [notE, lepoll_trans]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    39
qed "lepoll_trans1";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    40
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
    41
Goalw [lepoll_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
    42
        "[| Y lepoll X; well_ord(X, R) |] ==> EX S. well_ord(Y, S)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    43
by (fast_tac (claset() addSEs [well_ord_rvimage]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    44
qed "well_ord_lepoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    45
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    46
Goal "[| well_ord(X,R); well_ord(Y,S)  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    47
\               |] ==> EX T. well_ord(X Un Y, T)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    48
by (eresolve_tac [well_ord_radd RS (Un_lepoll_sum RS well_ord_lepoll)] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    49
by (assume_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    50
qed "well_ord_Un";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    51
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    52
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    53
(* There exists a well ordered set y such that ...                        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    54
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    55
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
    56
Goal "EX y R. well_ord(y,R) & x Int y = 0 & ~y lepoll z & ~Finite(y)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    57
by (res_inst_tac [("x","{{a,x}. a:nat Un  Hartog(z)}")] exI 1);
3891
3a05a7f549bd transfer thy Ord_nat;
wenzelm
parents: 3731
diff changeset
    58
by (resolve_tac [transfer thy Ord_nat RS well_ord_Memrel RS (Ord_Hartog RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    59
                well_ord_Memrel RSN (2, well_ord_Un)) RS exE] 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    60
by (fast_tac (claset() addSIs [Ord_Hartog, well_ord_Memrel, well_ord_paired,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    61
        equals0I, HartogI RSN (2, lepoll_trans1),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    62
        subset_imp_lepoll RS (paired_eqpoll RS eqpoll_sym RS
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    63
        eqpoll_imp_lepoll RSN (2, lepoll_trans))]
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
    64
        addSEs [nat_not_Finite RS notE] addEs [mem_asym]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    65
        addSDs [Un_upper1 RS subset_imp_lepoll RS lepoll_Finite,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    66
        paired_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    67
        RS lepoll_Finite]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    68
val lemma2 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    69
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    70
val [prem] = goal thy "~Finite(B) ==> ~Finite(A Un B)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    71
by (fast_tac (claset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    72
        addSIs [subset_imp_lepoll RS (prem RSN (2, lepoll_infinite))]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    73
qed "infinite_Un";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    74
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    75
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    76
(* There is a v : s_u such that k lepoll x Int y (in our case succ(k))    *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    77
(* The idea of the proof is the following :                               *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    78
(* Suppose not, i.e. every element of s_u has exactly k-1 elements of y   *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    79
(* Thence y is less than or equipollent to {v:Pow(x). v eqpoll n#-k}      *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    80
(*   We have obtained this result in two steps :                          *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    81
(*   1. y is less than or equipollent to {v:s_u. a <= v}                  *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    82
(*      where a is certain k-2 element subset of y                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    83
(*   2. {v:s_u. a <= v} is less than or equipollent                       *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    84
(*      to {v:Pow(x). v eqpoll n-k}                                       *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    85
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    86
1710
f50ec5b35937 Simplified KG's proofs
paulson
parents: 1461
diff changeset
    87
(*Proof simplified by LCP*)
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    88
Goal "[| ~(EX x:A. f`x=y); f : inj(A, B); y:B |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    89
\       ==> (lam a:succ(A). if(a=A, y, f`a)) : inj(succ(A), B)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    90
by (res_inst_tac [("d","%z. if(z=y, A, converse(f)`z)")] lam_injective 1);
1710
f50ec5b35937 Simplified KG's proofs
paulson
parents: 1461
diff changeset
    91
by (ALLGOALS
f50ec5b35937 Simplified KG's proofs
paulson
parents: 1461
diff changeset
    92
    (asm_simp_tac 
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    93
     (simpset() addsimps [inj_is_fun RS apply_type, left_inverse] 
5116
8eb343ab5748 Renamed expand_if to split_if and setloop split_tac to addsplits,
paulson
parents: 5068
diff changeset
    94
      setloop (split_tac [split_if] ORELSE' Step_tac))));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
    95
qed "succ_not_lepoll_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    96
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
    97
Goalw [lepoll_def, eqpoll_def, bij_def, surj_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
    98
        "[| ~A eqpoll B; A lepoll B |] ==> succ(A) lepoll B";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
    99
by (fast_tac (claset() addSEs [succ_not_lepoll_lemma, inj_is_fun]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   100
qed "succ_not_lepoll_imp_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   101
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   102
val [prem] = goalw thy [s_u_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   103
        "(ALL v:s_u(u, t_n, k, y). k eqpoll v Int y ==> False)  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   104
\       ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   105
by (excluded_middle_tac "?P" 1 THEN (assume_tac 2));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   106
by (resolve_tac [prem RS FalseE] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   107
by (rtac ballI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   108
by (etac CollectE 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   109
by (etac conjE 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   110
by (etac swap 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   111
by (fast_tac (claset() addSEs [succ_not_lepoll_imp_eqpoll]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   112
qed "suppose_not";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   113
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   114
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   115
(* There is a k-2 element subset of y                                     *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   116
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   117
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   118
Goalw [lepoll_def, eqpoll_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   119
        "[| n:nat; nat lepoll X |] ==> EX Y. Y<=X & n eqpoll Y";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   120
by (fast_tac (FOL_cs addSDs [Ord_nat RSN (2, OrdmemD) RSN (2, restrict_inj)]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   121
        addSIs [subset_refl]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   122
        addSEs [restrict_bij, inj_is_fun RS fun_is_rel RS image_subset]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   123
qed "nat_lepoll_imp_ex_eqpoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   124
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   125
val ordertype_eqpoll =
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   126
        ordermap_bij RS (exI RS (eqpoll_def RS def_imp_iff RS iffD2));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   127
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   128
Goal "[| well_ord(y,R); ~Finite(y); n:nat  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   129
\       |] ==> EX z. z<=y & n eqpoll z";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   130
by (etac nat_lepoll_imp_ex_eqpoll_n 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   131
by (resolve_tac [ordertype_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   132
        RSN (2, lepoll_trans)] 1 THEN (assume_tac 2));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   133
by (fast_tac (claset() addSIs [nat_le_infinite_Ord RS le_imp_lepoll]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   134
                addSEs [Ord_ordertype, ordertype_eqpoll RS eqpoll_imp_lepoll
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   135
                        RS lepoll_infinite]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   136
qed "ex_subset_eqpoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   137
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   138
Goalw [lesspoll_def] "n: nat ==> n lesspoll nat";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   139
by (fast_tac (claset() addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_lepoll,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   140
        eqpoll_sym RS eqpoll_imp_lepoll]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   141
        addIs [Ord_nat RSN (2, nat_succI RS ltI) RS leI
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   142
        RS le_imp_lepoll RS lepoll_trans RS succ_lepoll_natE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   143
qed "n_lesspoll_nat";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   144
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   145
Goal "[| well_ord(y,R); ~Finite(y); k eqpoll a; a <= y; k: nat |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   146
\       ==> y - a eqpoll y";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   147
by (fast_tac (empty_cs addIs [lepoll_lesspoll_lesspoll]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   148
        addSIs [Card_cardinal, Diff_lesspoll_eqpoll_Card RS eqpoll_trans,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   149
                Card_cardinal RS Card_is_Ord RS nat_le_infinite_Ord
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   150
                RS le_imp_lepoll]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   151
        addSEs [well_ord_cardinal_eqpoll,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   152
                well_ord_cardinal_eqpoll RS eqpoll_sym,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   153
                eqpoll_sym RS eqpoll_imp_lepoll,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   154
                n_lesspoll_nat RS lesspoll_lepoll_lesspoll,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   155
                well_ord_cardinal_eqpoll RS eqpoll_sym RS eqpoll_imp_lepoll
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   156
                RS lepoll_infinite]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   157
qed "Diff_Finite_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   158
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   159
Goal "[| a<=y; b:y-a; u:x |] ==> cons(b, cons(u, a)) : Pow(x Un y)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   160
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   161
qed "cons_cons_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   162
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   163
Goal "[| a eqpoll k; a<=y; b:y-a; u:x; x Int y = 0  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   164
\       |] ==> cons(b, cons(u, a)) eqpoll succ(succ(k))";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   165
by (fast_tac (claset() addSIs [cons_eqpoll_succ] addEs [equals0E]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   166
qed "cons_cons_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   167
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   168
Goalw [s_u_def] "s_u(u, t_n, k, y) <= t_n";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   169
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   170
qed "s_u_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   171
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   172
Goalw [s_u_def, succ_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   173
        "[| w:t_n; cons(b,cons(u,a)) <= w; a <= y; b : y-a; k eqpoll a  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   174
\       |] ==> w: s_u(u, t_n, succ(k), y)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   175
by (fast_tac (claset() addDs [eqpoll_imp_lepoll RS cons_lepoll_cong]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   176
                addSEs [subset_imp_lepoll RSN (2, lepoll_trans)]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   177
qed "s_uI";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   178
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   179
Goalw [s_u_def] "v : s_u(u, t_n, k, y) ==> u : v";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   180
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   181
qed "in_s_u_imp_u_in";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   182
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   183
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   184
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(k))}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   185
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   186
\       k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0 |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   187
\       ==> EX! c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   188
by (etac ballE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   189
by (fast_tac (FOL_cs addSIs [CollectI, cons_cons_subset,
3013
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   190
                             eqpoll_sym RS cons_cons_eqpoll]) 2);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   191
by (etac ex1E 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   192
by (res_inst_tac [("a","w")] ex1I 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   193
by (rtac conjI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   194
by (rtac CollectI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   195
by (fast_tac (FOL_cs addSEs [s_uI]) 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   196
by (Fast_tac 1);
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   197
by (Fast_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   198
by (etac allE 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   199
by (etac impE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   200
by (assume_tac 2);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   201
by (fast_tac (claset() addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   202
qed "ex1_superset_a";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   203
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   204
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   205
        "[| succ(k) eqpoll A; k eqpoll B; B <= A; a : A-B; k:nat  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   206
\       |] ==> A = cons(a, B)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   207
by (rtac equalityI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   208
by (Fast_tac 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   209
by (resolve_tac [Diff_eq_0_iff RS iffD1] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   210
by (rtac equals0I 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   211
by (dresolve_tac [eqpoll_sym RS eqpoll_imp_lepoll] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   212
by (dresolve_tac [eqpoll_sym RS cons_eqpoll_succ] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   213
by (Fast_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   214
by (dtac cons_eqpoll_succ 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   215
by (Fast_tac 1);
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   216
by (fast_tac 
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   217
    (claset() 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   218
        addSEs [[eqpoll_sym RS eqpoll_imp_lepoll, subset_imp_lepoll] MRS
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   219
        (lepoll_trans RS lepoll_trans) RS succ_lepoll_natE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   220
qed "set_eq_cons";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   221
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   222
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   223
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(k))}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   224
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   225
\       ALL v:s_u(u, t_n, succ(k), y). succ(k) eqpoll v Int y;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   226
\       k eqpoll a; a <= y; b : y - a; u : x; x Int y = 0; k:nat   \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   227
\       |] ==> (THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c)  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   228
\       Int y = cons(b, a)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   229
by (dresolve_tac [ex1_superset_a RS theI] 1 THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   230
by (rtac set_eq_cons 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   231
by (REPEAT (Fast_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   232
qed "the_eq_cons";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   233
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   234
Goal "[| cons(x,a) = cons(y,a); x~: a |] ==> x = y ";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   235
by (fast_tac (claset() addSEs [equalityE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   236
qed "cons_eqE";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   237
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   238
Goal "A = B ==> A Int C = B Int C";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   239
by (Asm_simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   240
qed "eq_imp_Int_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   241
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   242
Goal "[| a=b; a=c; b=d |] ==> c=d";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   243
by (Asm_full_simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   244
qed "msubst";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   245
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   246
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   247
(*   1. y is less than or equipollent to {v:s_u. a <= v}                  *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   248
(*      where a is certain k-2 element subset of y                        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   249
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   250
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   251
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   252
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(k))}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   253
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   254
\       ALL v:s_u(u, t_n, succ(k), y). succ(k) eqpoll v Int y;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   255
\       well_ord(y,R); ~Finite(y); k eqpoll a; a <= y;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   256
\       k:nat; u:x; x Int y = 0 |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   257
\       ==> y lepoll {v:s_u(u, t_n, succ(k), y). a <= v}";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   258
by (resolve_tac [Diff_Finite_eqpoll RS eqpoll_sym RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   259
        eqpoll_imp_lepoll RS lepoll_trans] 1
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   260
        THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   261
by (res_inst_tac [("f3","lam b:y-a.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   262
\       THE c. c:{v:s_u(u, t_n, succ(k), y). a <= v} & b:c")]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   263
        (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   264
by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   265
by (rtac CollectI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   266
by (rtac lam_type 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   267
by (resolve_tac [ex1_superset_a RS theI RS conjunct1] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   268
        THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   269
by (rtac ballI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   270
by (rtac ballI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   271
by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   272
by (resolve_tac [beta RS ssubst] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   273
by (rtac impI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   274
by (rtac cons_eqE 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   275
by (Fast_tac 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   276
by (dres_inst_tac [("A","THE c. ?P(c)"), ("C","y")] eq_imp_Int_eq 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   277
by (eresolve_tac [[asm_rl, the_eq_cons, the_eq_cons] MRS msubst] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   278
        THEN REPEAT (assume_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   279
qed "y_lepoll_subset_s_u";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   280
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   281
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   282
(* some arithmetic                                                        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   283
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   284
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   285
Goal 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   286
        "[| k:nat; m:nat |] ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   287
\       ALL A B. A eqpoll k #+ m & k lepoll B & B<=A --> A-B lepoll m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   288
by (eres_inst_tac [("n","k")] nat_induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   289
by (simp_tac (simpset() addsimps [add_0]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   290
by (fast_tac (claset() addIs [eqpoll_imp_lepoll RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   291
        (Diff_subset RS subset_imp_lepoll RS lepoll_trans)]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   292
by (REPEAT (resolve_tac [allI,impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   293
by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   294
by (Fast_tac 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   295
by (eres_inst_tac [("x","A - {xa}")] allE 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   296
by (eres_inst_tac [("x","B - {xa}")] allE 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   297
by (etac impE 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   298
by (asm_full_simp_tac (simpset() addsimps [add_succ]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   299
by (fast_tac (claset() addSIs [Diff_sing_eqpoll, lepoll_Diff_sing]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   300
by (res_inst_tac [("P","%z. z lepoll m")] subst 1 THEN (assume_tac 2));
2496
40efb87985b5 Removal of needless "addIs [equality]", etc.
paulson
parents: 2483
diff changeset
   301
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   302
qed "eqpoll_sum_imp_Diff_lepoll_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   303
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   304
Goal "[| A eqpoll succ(k #+ m); B<=A; succ(k) lepoll B;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   305
\       k:nat; m:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   306
\       ==> A-B lepoll m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   307
by (dresolve_tac [add_succ RS ssubst] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   308
by (dresolve_tac [nat_succI RS eqpoll_sum_imp_Diff_lepoll_lemma] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   309
        THEN (REPEAT (assume_tac 1)));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   310
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   311
qed "eqpoll_sum_imp_Diff_lepoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   312
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   313
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   314
(* similar properties for eqpoll                                          *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   315
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   316
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   317
Goal 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   318
        "[| k:nat; m:nat |] ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   319
\       ALL A B. A eqpoll k #+ m & k eqpoll B & B<=A --> A-B eqpoll m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   320
by (eres_inst_tac [("n","k")] nat_induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   321
by (fast_tac (claset() addSDs [eqpoll_sym RS eqpoll_imp_lepoll RS lepoll_0_is_0]
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   322
        addss (simpset() addsimps [add_0])) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   323
by (REPEAT (resolve_tac [allI,impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   324
by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   325
by (fast_tac (claset() addSEs [eqpoll_imp_lepoll]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   326
by (eres_inst_tac [("x","A - {xa}")] allE 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   327
by (eres_inst_tac [("x","B - {xa}")] allE 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   328
by (etac impE 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   329
by (fast_tac (claset() addSIs [Diff_sing_eqpoll,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   330
        eqpoll_sym RSN (2, Diff_sing_eqpoll) RS eqpoll_sym]
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   331
        addss (simpset() addsimps [add_succ])) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   332
by (res_inst_tac [("P","%z. z eqpoll m")] subst 1 THEN (assume_tac 2));
2496
40efb87985b5 Removal of needless "addIs [equality]", etc.
paulson
parents: 2483
diff changeset
   333
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   334
qed "eqpoll_sum_imp_Diff_eqpoll_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   335
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   336
Goal "[| A eqpoll succ(k #+ m); B<=A; succ(k) eqpoll B;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   337
\       k:nat; m:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   338
\       ==> A-B eqpoll m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   339
by (dresolve_tac [add_succ RS ssubst] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   340
by (dresolve_tac [nat_succI RS eqpoll_sum_imp_Diff_eqpoll_lemma] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   341
        THEN (REPEAT (assume_tac 1)));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   342
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   343
qed "eqpoll_sum_imp_Diff_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   344
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   345
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   346
(* back to the second part                                                *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   347
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   348
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   349
Goal "[| x Int y = 0; w <= x Un y |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   350
\        ==> w Int (x - {u}) = w - cons(u, w Int y)";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   351
by (fast_tac (claset() addEs [equals0E]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   352
qed "w_Int_eq_w_Diff";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   353
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   354
Goal "[| w:{v:s_u(u, t_n, succ(l), y). a <= v};  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   355
\       l eqpoll a; t_n <= {v:Pow(x Un y). v eqpoll succ(succ(l) #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   356
\       m:nat; l:nat; x Int y = 0; u : x;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   357
\       ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   358
\       |] ==> w Int (x - {u}) eqpoll m";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   359
by (etac CollectE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   360
by (resolve_tac [w_Int_eq_w_Diff RS ssubst] 1 THEN (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   361
by (fast_tac (claset() addSDs [s_u_subset RS subsetD]) 1);
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   362
by (fast_tac (claset() addEs [equals0E] addSDs [bspec]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   363
        addDs [s_u_subset RS subsetD]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   364
        addSEs [eqpoll_sym RS cons_eqpoll_succ RS eqpoll_sym, in_s_u_imp_u_in]
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   365
        addSIs [eqpoll_sum_imp_Diff_eqpoll]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   366
qed "w_Int_eqpoll_m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   367
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   368
Goal "[| 0<m; x eqpoll m; m:nat |] ==> x ~= 0";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   369
by (fast_tac (empty_cs
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   370
        addSEs [mem_irrefl, ltE, eqpoll_succ_imp_not_empty, natE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   371
qed "eqpoll_m_not_empty";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   372
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   373
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   374
        "[| z : xa Int (x - {u}); l eqpoll a; a <= y; x Int y = 0; u:x  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   375
\       |] ==> cons(z, cons(u, a)) : {v: Pow(x Un y). v eqpoll succ(succ(l))}";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   376
by (fast_tac (claset() addSIs [cons_eqpoll_succ] addEs [equals0E, eqpoll_sym]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   377
qed "cons_cons_in";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   378
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   379
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   380
(*   2. {v:s_u. a <= v} is less than or equipollent                       *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   381
(*      to {v:Pow(x). v eqpoll n-k}                                       *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   382
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   383
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   384
Goal 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   385
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(succ(l))}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   386
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   387
\       t_n <= {v:Pow(x Un y). v eqpoll succ(succ(l) #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   388
\       0<m; m:nat; l:nat;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   389
\       ALL v:s_u(u, t_n, succ(l), y). succ(l) eqpoll v Int y;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   390
\       a <= y; l eqpoll a; x Int y = 0; u : x  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   391
\       |] ==> {v:s_u(u, t_n, succ(l), y). a <= v}  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   392
\               lepoll {v:Pow(x). v eqpoll m}";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   393
by (res_inst_tac [("f3","lam w:{v:s_u(u, t_n, succ(l), y). a <= v}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   394
\       w Int (x - {u})")] 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   395
        (exI RS (lepoll_def RS def_imp_iff RS iffD2)) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   396
by (resolve_tac [inj_def RS def_imp_eq RS ssubst] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   397
by (rtac CollectI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   398
by (rtac lam_type 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   399
by (rtac CollectI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   400
by (Fast_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   401
by (rtac w_Int_eqpoll_m 1 THEN REPEAT (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   402
by (simp_tac (simpset() delsimps ball_simps) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   403
by (REPEAT (resolve_tac [ballI, impI] 1));
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   404
(** LEVEL 9 **)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   405
by (eresolve_tac [w_Int_eqpoll_m RSN (2, eqpoll_m_not_empty) RS not_emptyE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   406
        THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   407
by (dresolve_tac [equalityD1 RS subsetD] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   408
by (dresolve_tac [cons_cons_in RSN (2, bspec)] 1 THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   409
by (etac ex1_two_eq 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   410
by (fast_tac (claset() addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   411
by (fast_tac (claset() addSEs [s_u_subset RS subsetD, in_s_u_imp_u_in]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   412
qed "subset_s_u_lepoll_w";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   413
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   414
Goal "[| 0<k; k:nat |] ==> EX l:nat. k = succ(l)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   415
by (etac natE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   416
by (fast_tac (empty_cs addSEs [ltE, mem_irrefl]) 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   417
by (fast_tac (empty_cs addSIs [refl, bexI]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   418
qed "ex_eq_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   419
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   420
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   421
 "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(k)}.  \
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   422
\                  EX! w. w:t_n & z <= w; \
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   423
\         well_ord(y,R); ~Finite(y); u:x; x Int y = 0;  \
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   424
\         t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)};  \
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   425
\         ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat  \
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   426
\      |] ==> EX v : s_u(u, t_n, k, y). succ(k) lepoll v Int y";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   427
by (rtac suppose_not 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   428
by (eresolve_tac [ex_eq_succ RS bexE] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   429
by (hyp_subst_tac 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   430
by (res_inst_tac [("n1","xa")] (ex_subset_eqpoll_n RS exE) 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   431
        THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   432
by (etac conjE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   433
by (forward_tac [[y_lepoll_subset_s_u, subset_s_u_lepoll_w] MRS lepoll_trans] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   434
        THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   435
by (contr_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   436
qed "exists_proper_in_s_u";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   437
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   438
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   439
(* LL can be well ordered                                                 *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   440
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   441
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   442
Goal "{x:Pow(X). x lepoll 0} = {0}";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   443
by (fast_tac (claset() addSDs [lepoll_0_is_0]
2496
40efb87985b5 Removal of needless "addIs [equality]", etc.
paulson
parents: 2483
diff changeset
   444
                      addSIs [lepoll_refl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   445
qed "subsets_lepoll_0_eq_unit";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   446
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   447
Goal "[| well_ord(X, R); ~Finite(X); n:nat |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   448
\               ==> EX S. well_ord({Y: Pow(X) . Y eqpoll succ(n)}, S)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   449
by (resolve_tac [well_ord_infinite_subsets_eqpoll_X
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   450
        RS (eqpoll_def RS def_imp_iff RS iffD1) RS exE] 1
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   451
    THEN (REPEAT (assume_tac 1)));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   452
by (fast_tac (claset() addSEs [bij_is_inj RS well_ord_rvimage]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   453
qed "well_ord_subsets_eqpoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   454
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   455
Goal "n:nat ==> {z:Pow(y). z lepoll succ(n)} =  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   456
\       {z:Pow(y). z lepoll n} Un {z:Pow(y). z eqpoll succ(n)}";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   457
by (fast_tac (claset() addIs [le_refl, leI, le_imp_lepoll]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   458
                addSDs [lepoll_succ_disj]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   459
                addSEs [nat_into_Ord, lepoll_trans, eqpoll_imp_lepoll]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   460
qed "subsets_lepoll_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   461
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   462
Goal "n:nat ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   463
\       {z:Pow(y). z lepoll n} Int {z:Pow(y). z eqpoll succ(n)} = 0";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   464
by (fast_tac (claset() addSEs [eqpoll_sym RS eqpoll_imp_lepoll 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   465
                RS lepoll_trans RS succ_lepoll_natE]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   466
                addSIs [equals0I]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   467
qed "Int_empty";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   468
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   469
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   470
(* unit set is well-ordered by the empty relation                         *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   471
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   472
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   473
Goalw [irrefl_def, trans_on_def, part_ord_def, linear_def, tot_ord_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   474
        "tot_ord({a},0)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   475
by (Simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   476
qed "tot_ord_unit";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   477
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   478
Goalw [wf_on_def, wf_def] "wf[{a}](0)";
2496
40efb87985b5 Removal of needless "addIs [equality]", etc.
paulson
parents: 2483
diff changeset
   479
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   480
qed "wf_on_unit";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   481
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   482
Goalw [well_ord_def] "well_ord({a},0)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   483
by (simp_tac (simpset() addsimps [tot_ord_unit, wf_on_unit]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   484
qed "well_ord_unit";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   485
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   486
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   487
(* well_ord_subsets_lepoll_n                                              *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   488
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   489
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   490
Goal "[| well_ord(y,r); ~Finite(y); n:nat |] ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   491
\       EX R. well_ord({z:Pow(y). z lepoll n}, R)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   492
by (etac nat_induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   493
by (fast_tac (claset() addSIs [well_ord_unit]
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   494
        addss (simpset() addsimps [subsets_lepoll_0_eq_unit])) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   495
by (etac exE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   496
by (eresolve_tac [well_ord_subsets_eqpoll_n RS exE] 1 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   497
        THEN REPEAT (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   498
by (asm_simp_tac (simpset() addsimps [subsets_lepoll_succ]) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   499
by (dtac well_ord_radd 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   500
by (eresolve_tac [Int_empty RS disj_Un_eqpoll_sum RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   501
                (eqpoll_def RS def_imp_iff RS iffD1) RS exE] 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   502
by (fast_tac (claset() addSEs [bij_is_inj RS well_ord_rvimage]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   503
qed "well_ord_subsets_lepoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   504
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   505
Goalw [LL_def, MM_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   506
        "t_n <= {v:Pow(x Un y). v eqpoll n}  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   507
\               ==> LL(t_n, k, y) <= {z:Pow(y). z lepoll n}";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   508
by (fast_tac (claset() addIs [subset_imp_lepoll 
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   509
			      RS (eqpoll_imp_lepoll
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   510
				  RSN (2, lepoll_trans))]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   511
qed "LL_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   512
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   513
Goal "[| t_n <= {v:Pow(x Un y). v eqpoll n}; \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   514
\               well_ord(y, R); ~Finite(y); n:nat  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   515
\               |] ==> EX S. well_ord(LL(t_n, k, y), S)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   516
by (fast_tac (FOL_cs addIs [exI]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   517
                addSEs [LL_subset RSN (2,  well_ord_subset)]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   518
                addEs [well_ord_subsets_lepoll_n RS exE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   519
qed "well_ord_LL";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   520
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   521
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   522
(* every element of LL is a contained in exactly one element of MM        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   523
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   524
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   525
Goalw [MM_def, LL_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   526
        "[| ALL z:{z: Pow(x Un y) . z eqpoll k}. EX! w. w:t_n & z <= w; \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   527
\       t_n <= {v:Pow(x Un y). v eqpoll n}; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   528
\       v:LL(t_n, k, y)  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   529
\       |] ==> EX! w. w:MM(t_n, k, y) & v<=w";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   530
by Safe_tac;
2845
b4f8df0efa6c Changes made necessary by the new ex1 rules
paulson
parents: 2496
diff changeset
   531
by (Fast_tac 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   532
by (resolve_tac [lepoll_imp_eqpoll_subset RS exE] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   533
by (eres_inst_tac [("x","xa")] ballE 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   534
by (fast_tac (claset() addSEs [eqpoll_sym]) 2);
2845
b4f8df0efa6c Changes made necessary by the new ex1 rules
paulson
parents: 2496
diff changeset
   535
by (etac alt_ex1E 1);
3013
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   536
by (dtac spec 1);
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   537
by (dtac spec 1);
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   538
by (etac mp 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   539
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   540
qed "unique_superset_in_MM";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   541
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   542
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   543
(* The function GG satisfies the conditions of WO4                        *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   544
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   545
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   546
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   547
(* The union of appropriate values is the whole x                         *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   548
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   549
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   550
Goal
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   551
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(k)}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   552
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   553
\       well_ord(y,R); ~Finite(y); u:x; x Int y = 0;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   554
\       t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   555
\       ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   556
\       |] ==> EX w:MM(t_n, succ(k), y). u:w";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   557
by (eresolve_tac [exists_proper_in_s_u RS bexE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   558
        THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   559
by (rewrite_goals_tac [MM_def, s_u_def]);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   560
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   561
qed "exists_in_MM";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   562
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   563
Goalw [LL_def] "w : MM(t_n, k, y) ==> w Int y : LL(t_n, k, y)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   564
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   565
qed "Int_in_LL";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   566
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   567
Goalw [MM_def] "MM(t_n, k, y) <= t_n";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   568
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   569
qed "MM_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   570
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   571
Goal 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   572
        "[| ALL z:{z: Pow(x Un y) . z eqpoll succ(k)}.  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   573
\       EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   574
\       well_ord(y,R); ~Finite(y); u:x; x Int y = 0;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   575
\       t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   576
\       ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   577
\       |] ==> EX w:LL(t_n, succ(k), y). u:GG(t_n, succ(k), y)`w";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   578
by (forward_tac [exists_in_MM] 1 THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   579
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   580
by (res_inst_tac [("x","w Int y")] bexI 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   581
by (etac Int_in_LL 2);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   582
by (rewtac GG_def);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   583
by (asm_full_simp_tac (simpset() delsimps ball_simps addsimps [Int_in_LL]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   584
by (eresolve_tac [unique_superset_in_MM RS the_equality2 RS ssubst] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   585
        THEN (assume_tac 1));
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
   586
by (REPEAT (fast_tac (claset() addEs [equals0E] addSEs [Int_in_LL]) 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   587
qed "exists_in_LL";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   588
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   589
Goalw [LL_def] 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   590
        "[| ALL z:{z: Pow(x Un y) . z eqpoll k}. EX! w. w:t_n & z <= w; \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   591
\       t_n <= {v:Pow(x Un y). v eqpoll n};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   592
\       v : LL(t_n, k, y) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   593
\       ==> v = (THE x. x : MM(t_n, k, y) & v <= x) Int y";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   594
by (fast_tac (claset() addSEs [Int_in_LL,
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   595
                unique_superset_in_MM RS the_equality2 RS ssubst]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   596
qed "in_LL_eq_Int";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   597
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   598
Goal  
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   599
        "[| ALL z:{z: Pow(x Un y) . z eqpoll k}. EX! w. w:t_n & z <= w; \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   600
\       t_n <= {v:Pow(x Un y). v eqpoll n};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   601
\       v : LL(t_n, k, y) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   602
\       ==> (THE x. x : MM(t_n, k, y) & v <= x) <= x Un y";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   603
by (fast_tac (claset() addSDs [unique_superset_in_MM RS theI RS conjunct1 RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   604
        (MM_subset RS subsetD)]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   605
qed "the_in_MM_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   606
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   607
Goalw [GG_def] 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   608
        "[| ALL z:{z: Pow(x Un y) . z eqpoll k}. EX! w. w:t_n & z <= w; \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   609
\       t_n <= {v:Pow(x Un y). v eqpoll n};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   610
\       v : LL(t_n, k, y) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   611
\       ==> GG(t_n, k, y) ` v <= x";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   612
by (forward_tac [the_in_MM_subset] 1 THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   613
by (dtac in_LL_eq_Int 1 THEN REPEAT (assume_tac 1));
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   614
by (Asm_full_simp_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   615
by (rtac subsetI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   616
by (etac DiffE 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   617
by (etac swap 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   618
by (fast_tac (claset() addEs [ssubst]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   619
qed "GG_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   620
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   621
Goal  
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   622
        "[| well_ord(LL(t_n, succ(k), y), S);  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   623
\       ALL z:{z: Pow(x Un y) . z eqpoll succ(k)}. EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   624
\       well_ord(y,R); ~Finite(y); x Int y = 0;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   625
\       t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   626
\       ~ y lepoll {v:Pow(x). v eqpoll m}; 0<k; 0<m; k:nat; m:nat  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   627
\       |] ==> (UN b<ordertype(LL(t_n, succ(k), y), S).  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   628
\       (GG(t_n, succ(k), y)) `  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   629
\       (converse(ordermap(LL(t_n, succ(k), y), S)) ` b)) = x";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   630
by (rtac equalityI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   631
by (rtac subsetI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   632
by (etac OUN_E 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   633
by (eresolve_tac [GG_subset RS subsetD] 1 THEN TRYALL assume_tac);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   634
by (eresolve_tac [ordermap_bij RS bij_converse_bij RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   635
                bij_is_fun RS apply_type] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   636
by (etac ltD 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   637
by (rtac subsetI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   638
by (eresolve_tac [exists_in_LL RS bexE] 1 THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   639
by (rtac OUN_I 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   640
by (resolve_tac [Ord_ordertype RSN (2, ltI)] 1 THEN (assume_tac 2));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   641
by (eresolve_tac [ordermap_type RS apply_type] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   642
by (eresolve_tac [ordermap_bij RS bij_is_inj RS left_inverse RS ssubst] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   643
        THEN REPEAT (assume_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   644
qed "OUN_eq_x";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   645
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   646
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   647
(* Every element of the family is less than or equipollent to n-k (m)     *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   648
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   649
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   650
Goalw [MM_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   651
        "[| w : MM(t_n, k, y); t_n <= {v:Pow(x Un y). v eqpoll n}  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   652
\       |] ==> w eqpoll n";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   653
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   654
qed "in_MM_eqpoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   655
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   656
Goalw [LL_def, MM_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   657
        "w : LL(t_n, k, y) ==> k lepoll w";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   658
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   659
qed "in_LL_eqpoll_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   660
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   661
Goalw [GG_def] 
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   662
        "[|  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   663
\       ALL z:{z: Pow(x Un y) . z eqpoll succ(k)}. EX! w. w:t_n & z <= w; \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   664
\       t_n <= {v:Pow(x Un y). v eqpoll succ(k #+ m)};  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   665
\       well_ord(LL(t_n, succ(k), y), S); k:nat; m:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   666
\       ==> ALL b<ordertype(LL(t_n, succ(k), y), S).  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   667
\       (GG(t_n, succ(k), y)) `  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   668
\       (converse(ordermap(LL(t_n, succ(k), y), S)) ` b) lepoll m";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   669
by (rtac oallI 1);
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   670
by (asm_full_simp_tac 
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3891
diff changeset
   671
    (simpset() delsimps ball_simps
2483
95c2f9c0930a Default rewrite rules for quantification over Collect(A,P)
paulson
parents: 2469
diff changeset
   672
              addsimps [ltD,
3013
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   673
                        ordermap_bij RS bij_converse_bij RS
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   674
                        bij_is_fun RS apply_type]) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   675
by (rtac eqpoll_sum_imp_Diff_lepoll 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   676
by (REPEAT (fast_tac 
3013
01a563785367 Ran expandshort
paulson
parents: 2845
diff changeset
   677
            (FOL_cs addSDs [ltD]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   678
        addSIs [eqpoll_sum_imp_Diff_lepoll, in_LL_eqpoll_n]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   679
        addEs [unique_superset_in_MM RS theI RS conjunct1 RS in_MM_eqpoll_n,
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   680
          in_LL_eq_Int RS equalityD1 RS (Int_lower1 RSN (2, subset_trans)),
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   681
        ordermap_bij RS bij_converse_bij RS bij_is_fun RS apply_type]) 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 3013
diff changeset
   682
qed "all_in_lepoll_m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   683
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   684
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   685
(* The main theorem AC16(n, k) ==> WO4(n-k)                               *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   686
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   687
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
   688
Goalw [AC16_def,WO4_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
   689
        "[| AC16(k #+ m, k); 0 < k; 0 < m; k:nat; m:nat |] ==> WO4(m)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   690
by (rtac allI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   691
by (excluded_middle_tac "Finite(A)" 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   692
by (rtac lemma1 2 THEN REPEAT (assume_tac 2));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   693
by (resolve_tac [lemma2 RS revcut_rl] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   694
by (REPEAT (eresolve_tac [exE, conjE] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   695
by (eres_inst_tac [("x","A Un y")] allE 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   696
by (forward_tac [infinite_Un] 1 THEN (mp_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   697
by (REPEAT (eresolve_tac [exE, conjE] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   698
by (resolve_tac [well_ord_LL RS exE] 1 THEN REPEAT (assume_tac 1));
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   699
by (fast_tac (claset() addSIs [add_type]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   700
by (res_inst_tac [("x","ordertype(LL(T, succ(k), y), x)")] exI 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   701
by (res_inst_tac [("x","lam b:ordertype(LL(T, succ(k), y), x).  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   702
\       (GG(T, succ(k), y)) `  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   703
\       (converse(ordermap(LL(T, succ(k), y), x)) ` b)")] exI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 2167
diff changeset
   704
by (Simp_tac 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   705
by (fast_tac (empty_cs addSIs [conjI, lam_funtype RS domain_of_fun]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   706
        addSEs [Ord_ordertype, all_in_lepoll_m, OUN_eq_x]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   707
qed "AC16_WO4";