src/ZF/AC/Hartog.ML
author paulson
Fri, 28 Jul 1995 17:21:44 +0200
changeset 1208 bc3093616ba4
parent 1200 d4551b1a6da7
child 1299 e74f694ca1da
permissions -rw-r--r--
Ran expandshort and corrected spelling of Grabczewski
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     1
(*  Title: 	ZF/AC/Hartog.ML
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     2
    ID:         $Id$
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
     3
    Author: 	Krzysztof Grabczewski
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     4
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     5
  Some proofs on the Hartogs function.
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     6
*)
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     7
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     8
open Hartog;
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
     9
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    10
goal thy "!!X. ALL a. Ord(a) --> a:X ==> P";
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    11
by (res_inst_tac [("X1","{y:X. Ord(y)}")] (ON_class RS revcut_rl) 1);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    12
by (fast_tac ZF_cs 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    13
val Ords_in_set = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    14
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    15
goalw thy [lepoll_def] "!!X. [| Ord(a); a lepoll X |] ==>  \
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    16
\		EX Y. Y<=X & (EX R. well_ord(Y,R) & ordertype(Y,R)=a)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    17
by (etac exE 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    18
by (REPEAT (resolve_tac [exI, conjI] 1));
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    19
by (eresolve_tac [inj_is_fun RS fun_is_rel RS image_subset] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    20
by (rtac exI 1);
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    21
by (rtac conjI 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    22
by (eresolve_tac [well_ord_Memrel RSN (2, subset_refl RSN (2, 
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    23
	restrict_bij RS bij_converse_bij) RS bij_is_inj RS well_ord_rvimage)] 1
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents: 1123
diff changeset
    24
	THEN (assume_tac 1));
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    25
by (resolve_tac [subset_refl RSN (2, restrict_bij RS bij_converse_bij) RS
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    26
	(well_ord_Memrel RSN (2, bij_ordertype_vimage)) RS 
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    27
	(ordertype_Memrel RSN (2, trans))] 1
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents: 1123
diff changeset
    28
	THEN (REPEAT (assume_tac 1)));
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    29
val Ord_lepoll_imp_ex_well_ord = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    30
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    31
goal thy "!!X. [| Ord(a); a lepoll X |] ==>  \
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    32
\		EX Y. Y<=X & (EX R. R<=X*X & ordertype(Y,R)=a)";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    33
by (dtac Ord_lepoll_imp_ex_well_ord 1 THEN (assume_tac 1));
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    34
by (step_tac ZF_cs 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    35
by (REPEAT (ares_tac [exI, conjI] 1));
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    36
by (etac ordertype_Int 2);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    37
by (fast_tac ZF_cs 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    38
val Ord_lepoll_imp_eq_ordertype = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    39
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    40
goal thy "!!X. ALL a. Ord(a) --> a lepoll X ==>  \
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    41
\	ALL a. Ord(a) -->  \
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    42
\	a:{a. Z:Pow(X)*Pow(X*X), EX Y R. Z=<Y,R> & ordertype(Y,R)=a}";
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    43
by (REPEAT (resolve_tac [allI,impI] 1));
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    44
by (REPEAT (eresolve_tac [allE, impE] 1));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents: 1123
diff changeset
    45
by (assume_tac 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    46
by (dtac Ord_lepoll_imp_eq_ordertype 1 THEN (assume_tac 1));
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    47
by (fast_tac (ZF_cs addSIs [ReplaceI] addEs [sym]) 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    48
val Ords_lepoll_set_lemma = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    49
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    50
goal thy "!!X. ALL a. Ord(a) --> a lepoll X ==> P";
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    51
by (eresolve_tac [Ords_lepoll_set_lemma RS Ords_in_set] 1);
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    52
val Ords_lepoll_set = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    53
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    54
goal thy "EX a. Ord(a) & ~a lepoll X";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    55
by (rtac swap 1);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    56
by (fast_tac ZF_cs 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    57
by (rtac Ords_lepoll_set 1);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    58
by (fast_tac ZF_cs 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    59
val ex_Ord_not_lepoll = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    60
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    61
goalw thy [Hartog_def] "~ Hartog(A) lepoll A";
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    62
by (resolve_tac [ex_Ord_not_lepoll RS exE] 1);
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    63
by (rtac LeastI 1);
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    64
by (REPEAT (fast_tac ZF_cs 1));
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    65
val HartogI = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    66
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    67
val HartogE = HartogI RS notE;
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    68
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    69
goalw thy [Hartog_def] "Ord(Hartog(A))";
1208
bc3093616ba4 Ran expandshort and corrected spelling of Grabczewski
paulson
parents: 1200
diff changeset
    70
by (rtac Ord_Least 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    71
val Ord_Hartog = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    72
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    73
goalw thy [Hartog_def] "!!i. [| i < Hartog(A); ~ i lepoll A |] ==> P";
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    74
by (fast_tac (ZF_cs addEs [less_LeastE]) 1);
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    75
val less_HartogE1 = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    76
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    77
goal thy "!!i. [| i < Hartog(A); i eqpoll Hartog(A) |] ==> P";
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    78
by (fast_tac (ZF_cs addEs [less_HartogE1, eqpoll_sym RS eqpoll_imp_lepoll
1123
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    79
		RS lepoll_trans RS HartogE]) 1);
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    80
val less_HartogE = result();
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    81
5dfdc1464966 Krzysztof Grabczewski's (nearly) complete AC proofs
lcp
parents:
diff changeset
    82
goal thy "Card(Hartog(A))";
1200
d4551b1a6da7 Many small changes to make proofs run faster
lcp
parents: 1196
diff changeset
    83
by (fast_tac (ZF_cs addSIs [CardI, Ord_Hartog] addEs [less_HartogE]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents: 1123
diff changeset
    84
val Card_Hartog = result();