src/ZF/AC/DC_lemmas.ML
author paulson
Thu, 10 Sep 1998 17:42:44 +0200
changeset 5470 855654b691db
parent 5241 e5129172cb2b
child 7499 23e090051cb8
permissions -rw-r--r--
eliminated equals0E
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     1
(*  Title:      ZF/AC/DC_lemmas.ML
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     2
    ID:         $Id$
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
     3
    Author:     Krzysztof Grabczewski
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     4
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     5
More general lemmas used in the proofs concerning DC
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     6
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     7
*)
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     8
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
     9
val [prem] = goalw thy [lepoll_def]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    10
        "Ord(a) ==> {P(b). b:a} lepoll a";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    11
by (res_inst_tac [("x","lam z:RepFun(a,P). LEAST i. z=P(i)")] exI 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    12
by (res_inst_tac [("d","%z. P(z)")] (sym RSN (2, lam_injective)) 1);
5241
e5129172cb2b Renamed equals0D to equals0E; tidied
paulson
parents: 5147
diff changeset
    13
by (fast_tac (claset() addSIs [Least_in_Ord, prem]) 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    14
by (REPEAT (eresolve_tac [RepFunE, LeastI, prem RS Ord_in_Ord] 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    15
qed "RepFun_lepoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    16
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    17
Goalw [lesspoll_def] "n:nat ==> n lesspoll nat";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    18
by (rtac conjI 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    19
by (eresolve_tac [Ord_nat RSN (2, OrdmemD) RS subset_imp_lepoll] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    20
by (rtac notI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    21
by (etac eqpollE 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    22
by (rtac succ_lepoll_natE 1 THEN (assume_tac 2));
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    23
by (eresolve_tac [nat_succI RS (Ord_nat RSN (2, OrdmemD) RS
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    24
        subset_imp_lepoll) RS lepoll_trans] 1
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    25
        THEN (assume_tac 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    26
qed "n_lesspoll_nat";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    27
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
    28
Goalw [lepoll_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
    29
        "[| f:X->Y; Ord(X) |] ==> f``X lepoll X";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    30
by (res_inst_tac [("x","lam x:f``X. LEAST y. f`y = x")] exI 1);
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    31
by (res_inst_tac [("d","%z. f`z")] lam_injective 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    32
by (fast_tac (claset() addSIs [Least_in_Ord, apply_equality]) 1);
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    33
by (fast_tac (claset() addSEs [Ord_in_Ord] addSIs [LeastI, apply_equality]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    34
qed "image_Ord_lepoll";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    35
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    36
val [major, minor] = goal thy
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    37
        "[| (!!g. g:X ==> EX u. <g,u>:R); R<=X*X  \
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    38
\       |] ==> range(R) <= domain(R)";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    39
by (rtac subsetI 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    40
by (etac rangeE 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    41
by (dresolve_tac [minor RS subsetD RS SigmaD2 RS major] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1924
diff changeset
    42
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    43
qed "range_subset_domain";
1196
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
val prems = goal thy "!!k. k:n ==> k~=n";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    46
by (fast_tac (claset() addSEs [mem_irrefl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    47
qed "mem_not_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    48
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    49
Goalw [succ_def] "g:n->X ==> cons(<n,x>, g) : succ(n) -> cons(x, X)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    50
by (fast_tac (claset() addSIs [fun_extend] addSEs [mem_irrefl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    51
qed "cons_fun_type";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    52
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    53
Goal "[| g:n->X; x:X |] ==> cons(<n,x>, g) : succ(n) -> X";
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1924
diff changeset
    54
by (etac (cons_absorb RS subst) 1 THEN etac cons_fun_type 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    55
qed "cons_fun_type2";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    56
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    57
Goal "n: nat ==> cons(<n,x>, g)``n = g``n";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    58
by (fast_tac (claset() addSEs [mem_irrefl]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    59
qed "cons_image_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    60
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    61
Goal "g:n->X ==> cons(<n,x>, g)`n = x";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    62
by (fast_tac (claset() addSIs [apply_equality] addSEs [cons_fun_type]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    63
qed "cons_val_n";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    64
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    65
Goal "k : n ==> cons(<n,x>, g)``k = g``k";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    66
by (fast_tac (claset() addEs [mem_asym]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    67
qed "cons_image_k";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    68
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    69
Goal "[| k:n; g:n->X |] ==> cons(<n,x>, g)`k = g`k";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    70
by (fast_tac (claset() addSIs [apply_equality, consI2] addSEs [cons_fun_type, apply_Pair]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    71
qed "cons_val_k";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    72
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    73
Goal "domain(f)=x ==> domain(cons(<x,y>, f)) = succ(x)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    74
by (asm_full_simp_tac (simpset() addsimps [domain_cons, succ_def]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    75
qed "domain_cons_eq_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    76
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    77
Goalw [restrict_def] "g:n->X ==> restrict(cons(<n,x>, g), n)=g";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    78
by (rtac fun_extension 1);
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    79
by (rtac lam_type 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    80
by (eresolve_tac [cons_fun_type RS apply_type] 1);
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    81
by (etac succI2 1);
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    82
by (assume_tac 1);
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    83
by (asm_full_simp_tac (simpset() addsimps [cons_val_k]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    84
qed "restrict_cons_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    85
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    86
Goal "[| Ord(k); i:k |] ==> succ(i) : succ(k)";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    87
by (resolve_tac [Ord_linear RS disjE] 1 THEN (assume_tac 3));
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
    88
by (REPEAT (fast_tac (claset() addSIs [Ord_succ]
1461
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    89
        addEs [Ord_in_Ord, mem_irrefl, mem_asym]
6bcb44e4d6e5 expanded tabs
clasohm
parents: 1207
diff changeset
    90
        addSDs [succ_inject]) 1));
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    91
qed "succ_in_succ";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    92
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4091
diff changeset
    93
Goalw [restrict_def]
5147
825877190618 More tidying and removal of "\!\!... from Goal commands
paulson
parents: 5137
diff changeset
    94
        "[| restrict(f, domain(g)) = g; x: domain(g) |] ==> f`x = g`x";
1207
3f460842e919 Ran expandshort and changed spelling of Grabczewski
lcp
parents: 1196
diff changeset
    95
by (etac subst 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1924
diff changeset
    96
by (Asm_full_simp_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
    97
qed "restrict_eq_imp_val_eq";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
    98
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
    99
Goal "[| domain(f)=A; f:B->C |] ==> f:A->C";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   100
by (forward_tac [domain_of_fun] 1);
2469
b50b8c0eec01 Implicit simpsets and clasets for FOL and ZF
paulson
parents: 1924
diff changeset
   101
by (Fast_tac 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   102
qed "domain_eq_imp_fun_type";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   103
5137
60205b0de9b9 Huge tidy-up: removal of leading \!\!
paulson
parents: 5068
diff changeset
   104
Goal "[| R <= A * B; R ~= 0 |] ==> EX x. x:domain(R)";
4091
771b1f6422a8 isatool fixclasimp;
wenzelm
parents: 3731
diff changeset
   105
by (fast_tac (claset() addSEs [not_emptyE]) 1);
3731
71366483323b result() -> qed; Step_tac -> Safe_tac
paulson
parents: 2496
diff changeset
   106
qed "ex_in_domain";
1196
d43c1f7a53fe Numerous small improvements by KG and LCP
lcp
parents:
diff changeset
   107