src/ZF/AC/WO2_AC16.ML
author paulson
Tue, 04 Aug 1998 16:05:19 +0200
changeset 5241 e5129172cb2b
parent 5137 60205b0de9b9
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/WO2_AC16.ML
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
     3
    Author:     Krzysztof Grabczewski
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     4
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     5
  The proof of WO2 ==> AC16(k #+ m, k)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     6
  
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     7
  The main part of the proof is the inductive reasoning concerning
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     8
  properties of constructed family T_gamma.
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     9
  The proof deals with three cases for ordinals: 0, succ and limit ordinal.
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    10
  The first instance is trivial, the third not difficult, but the second
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    11
  is very complicated requiring many lemmas.
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    12
  We also need to prove that at any stage gamma the set 
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    13
  (s - Union(...) - k_gamma)   (Rubin & Rubin page 15)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    14
  contains m distinct elements (in fact is equipollent to s)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    15
*)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    16
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    17
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    18
(* case of limit ordinal                                                  *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    19
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    20
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    21
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    22
Goal "[| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y)  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    23
\               --> (EX! Y. Y:F(y) & f(z)<=Y);  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    24
\               ALL i j. i le j --> F(i) <= F(j); j le i; i<x; z<a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    25
\               V: F(i); f(z)<=V; W:F(j); f(z)<=W |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    26
\               ==> V = W";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    27
by (REPEAT (eresolve_tac [asm_rl, allE, impE] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    28
by (dtac subsetD 1 THEN (assume_tac 1));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    29
by (REPEAT (dtac ospec 1 THEN (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    30
by (eresolve_tac [disjI2 RSN (2, impE)] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    31
by (fast_tac (FOL_cs addSIs [bexI]) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    32
by (etac ex1_two_eq 1 THEN (REPEAT (ares_tac [conjI] 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    33
val lemma3_1 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    34
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    35
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    36
Goal "[| ALL y<x. ALL z<a. z<y | (EX Y: F(y). f(z)<=Y)  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    37
\               --> (EX! Y. Y:F(y) & f(z)<=Y);  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    38
\               ALL i j. i le j --> F(i) <= F(j); i<x; j<x; z<a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    39
\               V: F(i); f(z)<=V; W:F(j); f(z)<=W |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    40
\               ==> V = W";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    41
by (res_inst_tac [("j","j")] (lt_Ord RS (lt_Ord RSN (2, Ord_linear_le))) 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    42
        THEN (REPEAT (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    43
by (eresolve_tac [lemma3_1 RS sym] 1 THEN (REPEAT (assume_tac 1)));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    44
by (etac lemma3_1 1 THEN (REPEAT (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    45
val lemma3 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    46
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    47
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    48
Goal "[| ALL y<x. F(y) <= X &  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    49
\               (ALL x<a. x < y | (EX Y:F(y). fa(x) <= Y) -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    50
\                       (EX! Y. Y : F(y) & fa(x) <= Y)); x < a |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    51
\               ==> ALL y<x. ALL z<a. z < y | (EX Y:F(y). fa(z) <= Y) -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    52
\                       (EX! Y. Y : F(y) & fa(z) <= Y)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    53
by (REPEAT (resolve_tac [oallI, impI] 1));
4152
451104c223e2 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4091
diff changeset
    54
by (dtac ospec 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    55
by (fast_tac (FOL_cs addSEs [oallE]) 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    56
val lemma4 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    57
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    58
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
    59
Goal "[| ALL y<x. F(y) <= X &  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    60
\               (ALL x<a. x < y | (EX Y:F(y). fa(x) <= Y) -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    61
\                       (EX! Y. Y : F(y) & fa(x) <= Y)); \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    62
\               x < a; Limit(x); ALL i j. i le j --> F(i) <= F(j) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    63
\               ==> (UN x<x. F(x)) <= X &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    64
\               (ALL xa<a. xa < x | (EX x:UN x<x. F(x). fa(xa) <= x)  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    65
\               --> (EX! Y. Y : (UN x<x. F(x)) & fa(xa) <= Y))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    66
by (rtac conjI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    67
by (rtac subsetI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    68
by (etac OUN_E 1);
4152
451104c223e2 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4091
diff changeset
    69
by (dtac ospec 1 THEN (assume_tac 1));
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
    70
by (Fast_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    71
by (dtac lemma4 1 THEN (assume_tac 1));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    72
by (rtac oallI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    73
by (rtac impI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    74
by (etac disjE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    75
by (forward_tac [Limit_has_succ RSN (2, ospec)] 1 THEN (REPEAT (assume_tac 1)));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    76
by (dres_inst_tac [("A","a"),("x","xa")] ospec 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    77
by (eresolve_tac [lt_Ord RS le_refl RSN (2, disjI1 RSN (2, impE))] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    78
        THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    79
by (REPEAT (eresolve_tac [ex1E, conjE] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    80
by (rtac ex1I 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    81
by (rtac conjI 1 THEN (assume_tac 2));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    82
by (eresolve_tac [Limit_has_succ RS OUN_I] 1 THEN (TRYALL assume_tac));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    83
by (REPEAT (eresolve_tac [conjE, OUN_E] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    84
by (etac lemma3 1 THEN (TRYALL assume_tac));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    85
by (etac Limit_has_succ 1 THEN (assume_tac 1));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    86
by (etac bexE 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    87
by (rtac ex1I 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    88
by (etac conjI 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    89
by (REPEAT (eresolve_tac [conjE, OUN_E] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    90
by (etac lemma3 1 THEN (TRYALL assume_tac));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    91
val lemma5 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    92
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    93
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
    94
(* case of successor ordinal                                              *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    95
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    96
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    97
(*
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    98
  First quite complicated proof of the fact used in the recursive construction
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    99
  of the family T_gamma (WO2 ==> AC16(k #+ m, k)) - the fact that at any stage
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   100
  gamma the set (s - Union(...) - k_gamma) is equipollent to s
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   101
  (Rubin & Rubin page 15).
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   102
*)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   103
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   104
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   105
(* dbl_Diff_eqpoll_Card                                                   *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   106
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   107
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   108
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   109
Goal "[| A eqpoll a; Card(a); ~Finite(a); B lesspoll a;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   110
\       C lesspoll a |] ==> A - B - C eqpoll a";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   111
by (rtac Diff_lesspoll_eqpoll_Card 1 THEN (REPEAT (assume_tac 1)));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   112
by (rtac Diff_lesspoll_eqpoll_Card 1 THEN (REPEAT (assume_tac 1)));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   113
qed "dbl_Diff_eqpoll_Card";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   114
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   115
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   116
(* Case of finite ordinals                                                *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   117
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   118
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   119
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   120
Goalw [lesspoll_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   121
        "!!X. [| Finite(X); ~Finite(a); Ord(a) |] ==> X lesspoll a";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   122
by (rtac conjI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   123
by (dresolve_tac [nat_le_infinite_Ord RS le_imp_lepoll] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   124
        THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   125
by (rewtac Finite_def);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   126
by (fast_tac (claset() addSEs [eqpoll_sym RS eqpoll_trans]) 2);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   127
by (rtac lepoll_trans 1 THEN (assume_tac 2));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   128
by (fast_tac (claset() addSEs [Ord_nat RSN (2, ltI) RS leI RS le_imp_subset RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   129
        subset_imp_lepoll RSN (2, eqpoll_imp_lepoll RS lepoll_trans)]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   130
qed "Finite_lesspoll_infinite_Ord";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   131
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   132
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   133
Goal "x:X ==> Union(X) = Union(X-{x}) Un x";
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   134
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   135
qed "Union_eq_Un_Diff";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   136
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   138
Goal "n:nat ==> ALL X. X eqpoll n --> (ALL x:X. Finite(x))  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   139
\       --> Finite(Union(X))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   140
by (etac nat_induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   141
by (fast_tac (claset() addSDs [eqpoll_imp_lepoll RS lepoll_0_is_0]
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   142
        addSIs [nat_0I RS nat_into_Finite] addss (simpset())) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   143
by (REPEAT (resolve_tac [allI, impI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   144
by (resolve_tac [eqpoll_succ_imp_not_empty RS not_emptyE] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   145
by (res_inst_tac [("P","%z. Finite(z)")] (Union_eq_Un_Diff RS ssubst) 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   146
        THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   147
by (rtac Finite_Un 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   148
by (Fast_tac 2);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   149
by (fast_tac (claset() addSIs [Diff_sing_eqpoll]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   150
qed "Finite_Union_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   151
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   152
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   153
Goal "[| ALL x:X. Finite(x); Finite(X) |] ==> Finite(Union(X))";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   154
by (eresolve_tac [Finite_def RS def_imp_iff RS iffD1 RS bexE] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   155
by (dtac Finite_Union_lemma 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   156
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   157
qed "Finite_Union";
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
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   160
Goalw [Finite_def] "[| x lepoll n; n:nat |] ==> Finite(x)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   161
by (fast_tac (claset()
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   162
        addEs [nat_into_Ord RSN (2, lepoll_imp_ex_le_eqpoll) RS exE,
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   163
        Ord_nat RSN (2, ltI) RSN (2, lt_trans1) RS ltD]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   164
qed "lepoll_nat_num_imp_Finite";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   165
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   166
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   167
Goal "[| ALL x:X. x lepoll n & x <= T; well_ord(T, R); X lepoll b;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   168
\       b<a; ~Finite(a); Card(a); n:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   169
\       ==> Union(X) lesspoll a";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   170
by (excluded_middle_tac "Finite(X)" 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   171
by (resolve_tac [Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord)] 2
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   172
        THEN (REPEAT (assume_tac 3)));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   173
by (fast_tac (claset() addSEs [lepoll_nat_num_imp_Finite]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   174
                addSIs [Finite_Union]) 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   175
by (dresolve_tac [lt_Ord RSN (2, lepoll_imp_ex_le_eqpoll)] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   176
by (REPEAT (eresolve_tac [exE, conjE] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   177
by (forward_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   178
by (eresolve_tac [eqpoll_sym RS (eqpoll_def RS def_imp_iff RS iffD1) RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   179
                exE] 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   180
by (forward_tac [bij_is_surj RS surj_image_eq] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   181
by (dresolve_tac [[bij_is_fun, subset_refl] MRS image_fun] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   182
by (dresolve_tac [sym RS trans] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   183
by (hyp_subst_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   184
by (rtac lepoll_lesspoll_lesspoll 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   185
by (eresolve_tac [lt_trans1 RSN (2, lt_Card_imp_lesspoll)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   186
        THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   187
by (rtac UN_lepoll 1
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   188
        THEN (TRYALL (fast_tac (claset() addSEs [lt_Ord]))));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   189
qed "Union_lesspoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   190
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   191
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   192
(* recfunAC16_lepoll_index                                                *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   193
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   194
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   195
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   196
Goal "A Un {a} = cons(a, A)";
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   197
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   198
qed "Un_sing_eq_cons";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   199
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   200
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   201
Goal "A lepoll B ==> A Un {a} lepoll succ(B)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   202
by (asm_simp_tac (simpset() addsimps [Un_sing_eq_cons, succ_def]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   203
by (eresolve_tac [mem_not_refl RSN (2, cons_lepoll_cong)] 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   204
qed "Un_lepoll_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   205
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   206
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   207
Goal "Ord(a) ==> F(a) - (UN b<succ(a). F(b)) = 0";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   208
by (fast_tac (claset() addSIs [OUN_I, le_refl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   209
qed "Diff_UN_succ_empty";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   210
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   211
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   212
Goal "Ord(a) ==> F(a) Un X - (UN b<succ(a). F(b)) <= X";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   213
by (fast_tac (claset() addSIs [OUN_I, le_refl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   214
qed "Diff_UN_succ_subset";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   215
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   216
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   217
Goal "Ord(x) ==>  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   218
\       recfunAC16(f, g, x, a) - (UN i<x. recfunAC16(f, g, i, a)) lepoll 1";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   219
by (etac Ord_cases 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   220
by (asm_simp_tac (simpset() addsimps [recfunAC16_0,
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   221
				      empty_subsetI RS subset_imp_lepoll]) 1);
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   222
by (asm_simp_tac (simpset() addsimps [recfunAC16_Limit, Diff_cancel, 
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   223
				      empty_subsetI RS subset_imp_lepoll]) 2);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   224
by (asm_simp_tac (simpset() addsimps [recfunAC16_succ]) 1);
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   225
by (rtac conjI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   226
by (fast_tac (claset() addSIs [empty_subsetI RS subset_imp_lepoll]
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   227
                      addSEs [Diff_UN_succ_empty RS ssubst]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   228
by (fast_tac (claset() addSEs [Diff_UN_succ_subset RS subset_imp_lepoll RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   229
        (singleton_eqpoll_1 RS eqpoll_imp_lepoll RSN (2, lepoll_trans))]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   230
qed "recfunAC16_Diff_lepoll_1";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   231
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   232
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   233
Goal "[| z : F(x); Ord(x) |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   234
\       ==> z:F(LEAST i. z:F(i)) - (UN j<(LEAST i. z:F(i)). F(j))";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   235
by (fast_tac (claset() addEs [less_LeastE] addSEs [OUN_E, LeastI]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   236
qed "in_Least_Diff";
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
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   239
Goal "[| (LEAST i. w:F(i)) = (LEAST i. z:F(i));  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   240
\       w:(UN i<a. F(i)); z:(UN i<a. F(i)) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   241
\       ==> EX b<a. w:(F(b) - (UN c<b. F(c))) & z:(F(b) - (UN c<b. F(c)))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   242
by (REPEAT (etac OUN_E 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   243
by (dresolve_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   244
by (forward_tac [lt_Ord RSN (2, in_Least_Diff)] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   245
by (rtac oexI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   246
by (rtac conjI 1 THEN (assume_tac 2));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   247
by (etac subst 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   248
by (eresolve_tac [lt_Ord RSN (2, Least_le) RS lt_trans1] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   249
        THEN (REPEAT (assume_tac 1)));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   250
qed "Least_eq_imp_ex";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   251
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   252
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   253
Goal "[| A lepoll 1; a:A; b:A |] ==> a=b";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   254
by (fast_tac (claset() addSDs [lepoll_1_is_sing]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   255
qed "two_in_lepoll_1";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   256
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   257
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   258
Goal "[| ALL i<a. F(i)-(UN j<i. F(j)) lepoll 1; Limit(a) |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   259
\       ==> (UN x<a. F(x)) lepoll a";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   260
by (resolve_tac [lepoll_def RS (def_imp_iff RS iffD2)] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   261
by (res_inst_tac [("x","lam z: (UN x<a. F(x)). LEAST i. z:F(i)")] exI 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   262
by (rewtac inj_def);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   263
by (rtac CollectI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   264
by (rtac lam_type 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   265
by (etac OUN_E 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   266
by (etac Least_in_Ord 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   267
by (etac ltD 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   268
by (etac lt_Ord2 1);
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);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   271
by (Asm_simp_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   272
by (rtac impI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   273
by (dtac Least_eq_imp_ex 1 THEN (REPEAT (assume_tac 1)));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   274
by (fast_tac (claset() addSEs [two_in_lepoll_1]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   275
qed "UN_lepoll_index";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   276
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   277
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   278
Goal "Ord(y) ==> recfunAC16(f, fa, y, a) lepoll y";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   279
by (etac trans_induct 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   280
by (etac Ord_cases 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   281
by (asm_simp_tac (simpset() addsimps [recfunAC16_0, lepoll_refl]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   282
by (asm_simp_tac (simpset() addsimps [recfunAC16_succ]) 1);
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   283
by (fast_tac (claset() 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   284
        addSDs [succI1 RSN (2, bspec)]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   285
        addSEs [subset_succI RS subset_imp_lepoll RSN (2, lepoll_trans),
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   286
                Un_lepoll_succ]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   287
by (asm_simp_tac (simpset() addsimps [recfunAC16_Limit]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   288
by (fast_tac (claset() addSEs [lt_Ord RS recfunAC16_Diff_lepoll_1]
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   289
                       addSIs [UN_lepoll_index]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   290
qed "recfunAC16_lepoll_index";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   291
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   292
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   293
Goal "[| recfunAC16(f,g,y,a) <= {X: Pow(A). X eqpoll n};  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   294
\               A eqpoll a; y<a; ~Finite(a); Card(a); n:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   295
\               ==> Union(recfunAC16(f,g,y,a)) lesspoll a";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   296
by (eresolve_tac [eqpoll_def RS def_imp_iff RS iffD1 RS exE] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   297
by (rtac Union_lesspoll 1 THEN (TRYALL assume_tac));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   298
by (eresolve_tac [lt_Ord RS recfunAC16_lepoll_index] 3);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   299
by (eresolve_tac [[bij_is_inj, Card_is_Ord RS well_ord_Memrel] MRS
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   300
		  well_ord_rvimage] 2 
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   301
    THEN (assume_tac 2));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   302
by (fast_tac (claset() addSEs [eqpoll_imp_lepoll]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   303
qed "Union_recfunAC16_lesspoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   304
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   305
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   306
Goal
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   307
  "!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)};  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   308
\       Card(a); ~ Finite(a); A eqpoll a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   309
\       k : nat; m : nat; y<a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   310
\       fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)}) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   311
\       ==> A - Union(recfunAC16(f, fa, y, a)) - fa`y eqpoll a";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   312
by (rtac dbl_Diff_eqpoll_Card 1 THEN (TRYALL assume_tac));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   313
by (rtac Union_recfunAC16_lesspoll 1 THEN (REPEAT (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   314
by (eresolve_tac [add_type RS nat_succI] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   315
by (resolve_tac [nat_succI RSN (2, bexI RS (Finite_def RS def_imp_iff RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   316
        iffD2)) RS (Card_is_Ord RSN (3, Finite_lesspoll_infinite_Ord))] 1
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   317
        THEN (TRYALL assume_tac));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   318
by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type) RS CollectE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   319
        THEN (TRYALL assume_tac));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   320
qed "dbl_Diff_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   321
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   322
(* back to the proof *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   323
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   324
val disj_Un_eqpoll_nat_sum = disj_Un_eqpoll_sum RS (
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   325
                             sum_eqpoll_cong RSN (2, 
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   326
                             nat_sum_eqpoll_sum RSN (3, 
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   327
                             eqpoll_trans RS eqpoll_trans))) |> standard;
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   328
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   329
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   330
Goal "[| x : Pow(A - B - fa`i); x eqpoll m;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   331
\       fa : bij(a, {x: Pow(A) . x eqpoll k}); i<a; k:nat; m:nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   332
\       ==> fa ` i Un x : {x: Pow(A) . x eqpoll k #+ m}";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   333
by (rtac CollectI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   334
by (fast_tac (claset() addSIs [PowD RS (PowD RSN (2, Un_least RS PowI))] 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   335
        addSEs [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)]) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   336
by (rtac disj_Un_eqpoll_nat_sum 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   337
        THEN (TRYALL assume_tac));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   338
by (fast_tac (claset() addSIs [equals0I]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   339
by (eresolve_tac [ltD RSN (2, bij_is_fun RS apply_type RS CollectE)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   340
        THEN (REPEAT (assume_tac 1)));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   341
qed "Un_in_Collect";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   342
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   343
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   344
(* Lemmas simplifying assumptions                                         *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   345
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   346
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   347
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   348
Goal "[| ALL y<succ(j). F(y)<=X & (ALL x<a. x<y | P(x,y)  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   349
\       --> Q(x,y)); succ(j)<a |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   350
\       ==> F(j)<=X & (ALL x<a. x<j | P(x,j) --> Q(x,j))";
4152
451104c223e2 Ran expandshort, especially to introduce Safe_tac
paulson
parents: 4091
diff changeset
   351
by (dtac ospec 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   352
by (resolve_tac [lt_Ord RS (succI1 RS ltI RS lt_Ord RS le_refl)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   353
        THEN (REPEAT (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   354
val lemma6 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   355
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   356
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   357
Goal "[| ALL x<a. x<j | P(x,j) --> Q(x,j);  succ(j)<a |]  \
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   358
\     ==> P(j,j) --> (ALL x<a. x le j | P(x,j) --> Q(x,j))";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   359
by (fast_tac (claset() addSEs [leE]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   360
val lemma7 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   361
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   362
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   363
(* Lemmas needded to prove ex_next_set which means that for any successor *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   364
(* ordinal there is a set satisfying certain properties                   *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   365
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   366
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   367
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   368
Goal "[| A eqpoll a; ~ Finite(a); Ord(a); m:nat |]  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   369
\       ==> EX X:Pow(A). X eqpoll m";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   370
by (eresolve_tac [Ord_nat RSN (2, ltI) RS 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   371
                (nat_le_infinite_Ord RSN (2, lt_trans2)) RS 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   372
                leI RS le_imp_lepoll RS 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   373
                ((eqpoll_sym RS eqpoll_imp_lepoll) RSN (2, lepoll_trans)) RS 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   374
                lepoll_imp_eqpoll_subset RS exE] 1 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   375
        THEN REPEAT (assume_tac 1));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   376
by (fast_tac (claset() addSEs [eqpoll_sym]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   377
qed "ex_subset_eqpoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   378
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   379
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   380
Goal "[| A <= B Un C; A Int C = 0 |] ==> A <= B";
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5137
diff changeset
   381
by (fast_tac (claset() addEs [equals0E]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   382
qed "subset_Un_disjoint";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   383
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   384
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   385
Goal "[| X:Pow(A - Union(B) -C); T:B; F<=T |] ==> F Int X = 0";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   386
by (fast_tac (claset() addSIs [equals0I]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   387
qed "Int_empty";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   388
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   389
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   390
(* equipollent subset (and finite) is the whole set                       *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   391
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   392
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   393
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   394
Goal "[| A <= B; a : A; A - {a} = B - {a} |] ==> A = B";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   395
by (fast_tac (claset() addSEs [equalityE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   396
qed "Diffs_eq_imp_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   397
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   398
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   399
Goal "m:nat ==> ALL A B. A <= B & m lepoll A & B lepoll m --> A=B";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   400
by (etac nat_induct 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   401
by (fast_tac (claset() addSDs [lepoll_0_is_0]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   402
by (REPEAT (resolve_tac [allI, impI] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   403
by (REPEAT (etac conjE 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   404
by (resolve_tac [succ_lepoll_imp_not_empty RS not_emptyE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   405
        THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   406
by (forward_tac [subsetD RS Diff_sing_lepoll] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   407
        THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   408
by (forward_tac [lepoll_Diff_sing] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   409
by (REPEAT (eresolve_tac [allE, impE] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   410
by (rtac conjI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   411
by (Fast_tac 2);
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   412
by (Fast_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   413
by (etac Diffs_eq_imp_eq 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   414
        THEN REPEAT (assume_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   415
qed "subset_imp_eq_lemma";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   416
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   417
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   418
Goal "[| A <= B; m lepoll A; B lepoll m; m:nat |] ==> A=B";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   419
by (fast_tac (FOL_cs addSDs [subset_imp_eq_lemma]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   420
qed "subset_imp_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   421
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   422
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   423
Goal "[| f:bij(a, {Y:X. Y eqpoll succ(k)}); k:nat; f`b<=f`y; b<a;  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   424
\       y<a |] ==> b=y";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   425
by (dtac subset_imp_eq 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   426
by (etac nat_succI 3);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   427
by (fast_tac (claset() addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   428
                CollectE, eqpoll_sym RS eqpoll_imp_lepoll]) 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   429
by (fast_tac (claset() addSEs [bij_is_fun RS (ltD RSN (2, apply_type)) RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   430
        CollectE, eqpoll_imp_lepoll]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   431
by (rewrite_goals_tac [bij_def, inj_def]);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   432
by (fast_tac (claset() addSDs [ltD]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   433
qed "bij_imp_arg_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   434
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   435
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   436
Goal
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   437
  "!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)};  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   438
\       Card(a); ~ Finite(a); A eqpoll a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   439
\       k : nat; m : nat; y<a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   440
\       fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)});  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   441
\       ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   442
\       ==> EX X:{Y: Pow(A). Y eqpoll succ(k #+ m)}. fa`y <= X &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   443
\               (ALL b<a. fa`b <= X -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   444
\               (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   445
by (eresolve_tac [dbl_Diff_eqpoll RS ex_subset_eqpoll RS bexE] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   446
        THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   447
by (etac Card_is_Ord 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   448
by (forward_tac [Un_in_Collect] 2 THEN REPEAT (assume_tac 2));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   449
by (etac CollectE 4);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   450
by (rtac bexI 4);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   451
by (rtac CollectI 5);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   452
by (assume_tac 5);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   453
by (eresolve_tac [add_succ RS subst] 5);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   454
by (assume_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   455
by (etac nat_succI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   456
by (assume_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   457
by (rtac conjI 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   458
by (Fast_tac 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   459
by (REPEAT (resolve_tac [ballI, impI, oallI, notI] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   460
by (dresolve_tac [Int_empty RSN (2, subset_Un_disjoint)] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   461
        THEN REPEAT (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   462
by (dtac bij_imp_arg_eq 1 THEN REPEAT (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   463
by (hyp_subst_tac 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   464
by (eresolve_tac [bexI RSN (2, notE)] 1 THEN TRYALL assume_tac);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   465
qed "ex_next_set";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   466
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   467
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   468
(* Lemma ex_next_Ord states that for any successor                        *)
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   469
(* ordinal there is a number of the set satisfying certain properties     *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   470
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   471
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   472
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   473
Goal
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   474
  "!!a. [| recfunAC16(f, fa, y, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)};  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   475
\       Card(a); ~ Finite(a); A eqpoll a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   476
\       k : nat; m : nat; y<a;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   477
\       fa : bij(a, {Y: Pow(A). Y eqpoll succ(k)});  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   478
\       f : bij(a, {Y: Pow(A). Y eqpoll succ(k #+ m)});  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   479
\       ~ (EX Y:recfunAC16(f, fa, y, a). fa`y <= Y) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   480
\       ==> EX c<a. fa`y <= f`c &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   481
\               (ALL b<a. fa`b <= f`c -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   482
\               (ALL T:recfunAC16(f, fa, y, a). ~ fa`b <= T))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   483
by (dtac ex_next_set 1 THEN REPEAT (assume_tac 1));
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   484
by (etac bexE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   485
by (resolve_tac [bij_converse_bij RS bij_is_fun RS apply_type RS ltI RSN
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   486
        (2, oexI)] 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   487
by (resolve_tac [right_inverse_bij RS ssubst] 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   488
        THEN REPEAT (ares_tac [Card_is_Ord] 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   489
qed "ex_next_Ord";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   490
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   491
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   492
Goal "[| EX! Y. Y:Z & P(Y); ~P(W) |] ==> EX! Y. Y: (Z Un {W}) & P(Y)";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   493
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   494
qed "ex1_in_Un_sing";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   495
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   496
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   497
(* Lemma simplifying assumptions                                          *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   498
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   499
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   500
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   501
Goal "[| ALL x<a. x<j | (EX xa:F(j). P(x, xa))  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   502
\       --> (EX! Y. Y:F(j) & P(x, Y)); F(j) <= X;  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   503
\       L : X; P(j, L) & (ALL x<a. P(x, L) --> (ALL xa:F(j). ~P(x, xa))) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   504
\       ==> F(j) Un {L} <= X &  \
2845
b4f8df0efa6c Changes made necessary by the new ex1 rules
paulson
parents: 2496
diff changeset
   505
\       (ALL x<a. x le j | (EX xa: (F(j) Un {L}). P(x, xa)) -->  \
b4f8df0efa6c Changes made necessary by the new ex1 rules
paulson
parents: 2496
diff changeset
   506
\               (EX! Y. Y: (F(j) Un {L}) & P(x, Y)))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   507
by (rtac conjI 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   508
by (fast_tac (claset() addSIs [singleton_subsetI]) 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   509
by (rtac oallI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   510
by (etac oallE 1 THEN (contr_tac 2));
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   511
by (blast_tac (claset() addSEs [leE]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   512
val lemma8 = result();
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   513
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   514
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   515
(* The main part of the proof: inductive proof of the property of T_gamma *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   516
(* lemma main_induct                                                      *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   517
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   518
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   519
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   520
Goal "[| b < a; f : bij(a, {Y: Pow(A) . Y eqpoll succ(k #+ m)});  \
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   521
\       fa : bij(a, {Y: Pow(A) . Y eqpoll succ(k)});  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   522
\       ~Finite(a); Card(a); A eqpoll a; k : nat; m : nat |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   523
\       ==> recfunAC16(f, fa, b, a) <= {X: Pow(A) . X eqpoll succ(k #+ m)} &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   524
\       (ALL x<a. x < b | (EX Y:recfunAC16(f, fa, b, a). fa ` x <= Y) -->  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   525
\       (EX! Y. Y:recfunAC16(f, fa, b, a) & fa ` x <= Y))";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   526
by (etac lt_induct 1);
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   527
by (forward_tac [lt_Ord] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   528
by (etac Ord_cases 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   529
(* case 0 *)
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   530
by (asm_simp_tac (simpset() addsimps [recfunAC16_0]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   531
(* case Limit *)
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   532
by (asm_simp_tac (simpset() addsimps [recfunAC16_Limit]) 2);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   533
by (rtac lemma5 2 THEN (REPEAT (assume_tac 2)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   534
by (fast_tac (FOL_cs addSEs [recfunAC16_mono]) 2);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   535
(* case succ *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   536
by (hyp_subst_tac 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   537
by (eresolve_tac [lemma6 RS conjE] 1 THEN (assume_tac 1));
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   538
by (asm_simp_tac (simpset() delsplits [split_if]
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   539
			    addsimps [recfunAC16_succ]) 1);
5116
8eb343ab5748 Renamed expand_if to split_if and setloop split_tac to addsplits,
paulson
parents: 5068
diff changeset
   540
by (resolve_tac [conjI RS (split_if RS iffD2)] 1);
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   541
by (Asm_simp_tac 1);
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   542
by (etac lemma7 1 THEN  assume_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   543
by (rtac impI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   544
by (resolve_tac [ex_next_Ord RS oexE] 1 
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   545
    THEN REPEAT (ares_tac [le_refl RS lt_trans] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   546
by (etac lemma8 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   547
by (resolve_tac [bij_is_fun RS apply_type] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   548
by (eresolve_tac [Least_le RS lt_trans2 RS ltD] 1 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   549
        THEN REPEAT (ares_tac [lt_Ord, succ_leI] 1));
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   550
(*SLOW!  5 secs?*)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   551
by (eresolve_tac [lt_Ord RSN (2, LeastI)] 1 THEN (assume_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   552
qed "main_induct";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   553
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   554
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   555
(* Lemma to simplify the inductive proof                                  *)
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
   556
(*   - the desired property is a consequence of the inductive assumption  *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   557
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   558
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   559
val [prem1, prem2, prem3, prem4] = goal thy
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   560
        "[| (!!b. b<a ==> F(b) <= S & (ALL x<a. (x<b | (EX Y:F(b). f`x <= Y)) \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   561
\       --> (EX! Y. Y : F(b) & f`x <= Y)));  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   562
\       f:a->f``(a); Limit(a); (!!i j. i le j ==> F(i) <= F(j)) |]  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   563
\       ==> (UN j<a. F(j)) <= S &  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   564
\       (ALL x:f``a. EX! Y. Y : (UN j<a. F(j)) & x <= Y)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   565
by (rtac conjI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   566
by (rtac subsetI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   567
by (etac OUN_E 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   568
by (dtac prem1 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   569
by (Fast_tac 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   570
(** LEVEL 5 **)
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   571
by (rtac ballI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   572
by (etac imageE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   573
by (dresolve_tac [prem3 RS Limit_is_Ord RSN (2, ltI) RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   574
        (prem3 RS Limit_has_succ)] 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   575
by (forward_tac [prem1] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   576
by (etac conjE 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   577
(** LEVEL 10 **)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   578
by (dresolve_tac [leI RS succ_leE RSN (2, ospec)] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   579
by (etac impE 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   580
by (fast_tac (claset() addSEs [leI RS succ_leE RS lt_Ord RS le_refl]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   581
by (dresolve_tac [prem2 RSN (2, apply_equality)] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   582
by (REPEAT (eresolve_tac [conjE, ex1E] 1));
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   583
(** LEVEL 15 **)
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   584
by (rtac ex1I 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   585
by (fast_tac (claset() addSIs [OUN_I]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   586
by (REPEAT (eresolve_tac [conjE, OUN_E] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   587
by (eresolve_tac [lt_Ord RSN (2, lt_Ord RS Ord_linear_le)] 1 THEN (assume_tac 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   588
by (dresolve_tac [prem4 RS subsetD] 2 THEN (assume_tac 2));
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   589
(** LEVEL 20 **)
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   590
by (fast_tac FOL_cs 2);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   591
by (forward_tac [prem1] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   592
by (forward_tac [succ_leE] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   593
by (dresolve_tac [prem4 RS subsetD] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   594
by (etac conjE 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   595
(** LEVEL 25 **)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   596
by (dresolve_tac [lt_trans RSN (2, ospec)] 1 THEN (TRYALL assume_tac));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   597
by (dresolve_tac [disjI1 RSN (2, mp)] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   598
by (etac ex1_two_eq 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1932
diff changeset
   599
by (REPEAT (Fast_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2845
diff changeset
   600
qed "lemma_simp_induct";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   601
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   602
(* ********************************************************************** *)
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   603
(* The target theorem                                                     *)
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   604
(* ********************************************************************** *)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   605
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5116
diff changeset
   606
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4152
diff changeset
   607
Goalw [AC16_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   608
        "!!n k. [| WO2; 0<m; k:nat; m:nat |] ==> AC16(k #+ m,k)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   609
by (rtac allI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   610
by (rtac impI 1);
2493
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   611
by (forward_tac [WO2_infinite_subsets_eqpoll_X] 1 
bdeb5024353a Removal of sum_cs and eq_cs
paulson
parents: 2469
diff changeset
   612
    THEN (REPEAT (assume_tac 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   613
by (forw_inst_tac [("n","k #+ m")] (WO2_infinite_subsets_eqpoll_X) 1
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   614
        THEN (REPEAT (ares_tac [add_type] 1)));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   615
by (forward_tac [WO2_imp_ex_Card] 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   616
by (REPEAT (eresolve_tac [exE,conjE] 1));
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   617
by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   618
        def_imp_iff RS iffD1)] 1 THEN (assume_tac 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   619
by (dresolve_tac [eqpoll_trans RS eqpoll_sym RS (eqpoll_def RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   620
        def_imp_iff RS iffD1)] 1 THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   621
by (REPEAT (etac exE 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   622
by (res_inst_tac [("x","UN j<a. recfunAC16(fa,f,j,a)")] exI 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   623
by (res_inst_tac [("P","%z. ?Y & (ALL x:z. ?Z(x))")] 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   624
        (bij_is_surj RS surj_image_eq RS subst) 1
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   625
        THEN (assume_tac 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   626
by (rtac lemma_simp_induct 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   627
by (eresolve_tac [bij_is_fun RS surj_image RS surj_is_fun] 2);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   628
by (eresolve_tac [eqpoll_imp_lepoll RS lepoll_infinite RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   629
        infinite_Card_is_InfCard RS InfCard_is_Limit] 2 
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   630
        THEN REPEAT (assume_tac 2));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   631
by (etac recfunAC16_mono 2);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
   632
by (rtac main_induct 1 
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1208
diff changeset
   633
        THEN REPEAT (ares_tac [eqpoll_imp_lepoll RS lepoll_infinite] 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   634
qed "WO2_AC16";