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