| 
1461
 | 
     1  | 
(*  Title:      ZF/AC/HH.ML
  | 
| 
1123
 | 
     2  | 
    ID:         $Id$
  | 
| 
1461
 | 
     3  | 
    Author:     Krzysztof Grabczewski
  | 
| 
1123
 | 
     4  | 
  | 
| 
 | 
     5  | 
Some properties of the recursive definition of HH used in the proofs of
  | 
| 
 | 
     6  | 
  AC17 ==> AC1
  | 
| 
 | 
     7  | 
  AC1 ==> WO2
  | 
| 
 | 
     8  | 
  AC15 ==> WO6
  | 
| 
 | 
     9  | 
*)
  | 
| 
 | 
    10  | 
  | 
| 
 | 
    11  | 
open HH;
  | 
| 
 | 
    12  | 
  | 
| 
 | 
    13  | 
(* ********************************************************************** *)
  | 
| 
1461
 | 
    14  | 
(* Lemmas useful in each of the three proofs                              *)
  | 
| 
1123
 | 
    15  | 
(* ********************************************************************** *)
  | 
| 
 | 
    16  | 
  | 
| 
 | 
    17  | 
goal thy "HH(f,x,a) =  \
  | 
| 
1461
 | 
    18  | 
\       (let z = x - (UN b:a. HH(f,x,b))  \
  | 
| 
 | 
    19  | 
\       in  if(f`z:Pow(z)-{0}, f`z, {x}))";
 | 
| 
1123
 | 
    20  | 
by (resolve_tac [HH_def RS def_transrec RS trans] 1);
  | 
| 
2469
 | 
    21  | 
by (Simp_tac 1);
  | 
| 
3731
 | 
    22  | 
qed "HH_def_satisfies_eq";
  | 
| 
1123
 | 
    23  | 
  | 
| 
 | 
    24  | 
goal thy "HH(f,x,a) : Pow(x)-{0} | HH(f,x,a)={x}";
 | 
| 
 | 
    25  | 
by (resolve_tac [HH_def_satisfies_eq RS ssubst] 1);
  | 
| 
4091
 | 
    26  | 
by (simp_tac (simpset() addsimps [Let_def, Diff_subset RS PowI] 
  | 
| 
1200
 | 
    27  | 
                    setloop split_tac [expand_if]) 1);
  | 
| 
2469
 | 
    28  | 
by (Fast_tac 1);
  | 
| 
3731
 | 
    29  | 
qed "HH_values";
  | 
| 
1123
 | 
    30  | 
  | 
| 
 | 
    31  | 
goal thy "!!A. B<=A ==> X-(UN a:A. P(a)) = X-(UN a:A-B. P(a))-(UN b:B. P(b))";
  | 
| 
2496
 | 
    32  | 
by (Fast_tac 1);
  | 
| 
3731
 | 
    33  | 
qed "subset_imp_Diff_eq";
  | 
| 
1123
 | 
    34  | 
  | 
| 
 | 
    35  | 
goal thy "!!c. [| c:a-b; b<a |] ==> c=b | b<c & c<a";
  | 
| 
1207
 | 
    36  | 
by (etac ltE 1);
  | 
| 
3731
 | 
    37  | 
by (dtac Ord_linear 1);
  | 
| 
4091
 | 
    38  | 
by (fast_tac (claset() addSIs [ltI] addIs [Ord_in_Ord]) 2);
  | 
| 
 | 
    39  | 
by (fast_tac (claset() addEs [Ord_in_Ord]) 1);
  | 
| 
3731
 | 
    40  | 
qed "Ord_DiffE";
  | 
| 
1123
 | 
    41  | 
  | 
| 
 | 
    42  | 
val prems = goal thy "(!!y. y:A ==> P(y) = {x}) ==> x - (UN y:A. P(y)) = x";
 | 
| 
4091
 | 
    43  | 
by (asm_full_simp_tac (simpset() addsimps prems) 1);
  | 
| 
 | 
    44  | 
by (fast_tac (claset() addSDs [prem] addSEs [mem_irrefl]) 1);
  | 
| 
3731
 | 
    45  | 
qed "Diff_UN_eq_self";
  | 
| 
1123
 | 
    46  | 
  | 
| 
 | 
    47  | 
goal thy "!!a. x - (UN b:a. HH(f,x,b)) = x - (UN b:a1. HH(f,x,b))  \
  | 
| 
1461
 | 
    48  | 
\               ==> HH(f,x,a) = HH(f,x,a1)";
  | 
| 
1123
 | 
    49  | 
by (resolve_tac [HH_def_satisfies_eq RS
  | 
| 
1461
 | 
    50  | 
                (HH_def_satisfies_eq RS sym RSN (3, trans RS trans))] 1);
  | 
| 
1207
 | 
    51  | 
by (etac subst_context 1);
  | 
| 
3731
 | 
    52  | 
qed "HH_eq";
  | 
| 
1123
 | 
    53  | 
  | 
| 
 | 
    54  | 
goal thy "!!a. [| HH(f,x,b)={x}; b<a |] ==> HH(f,x,a)={x}";
 | 
| 
 | 
    55  | 
by (res_inst_tac [("P","b<a")] impE 1 THEN REPEAT (assume_tac 2));
 | 
| 
 | 
    56  | 
by (eresolve_tac [lt_Ord2 RS trans_induct] 1);
  | 
| 
1207
 | 
    57  | 
by (rtac impI 1);
  | 
| 
1123
 | 
    58  | 
by (resolve_tac [HH_eq RS trans] 1 THEN (assume_tac 2));
  | 
| 
 | 
    59  | 
by (resolve_tac [leI RS le_imp_subset RS subset_imp_Diff_eq RS ssubst] 1
  | 
| 
1461
 | 
    60  | 
        THEN (assume_tac 1));
  | 
| 
1123
 | 
    61  | 
by (res_inst_tac [("t","%z. z-?X")] subst_context 1);
 | 
| 
1207
 | 
    62  | 
by (rtac Diff_UN_eq_self 1);
  | 
| 
 | 
    63  | 
by (dtac Ord_DiffE 1 THEN (assume_tac 1));
  | 
| 
4091
 | 
    64  | 
by (fast_tac (claset() addEs [ltE]) 1);
  | 
| 
3731
 | 
    65  | 
qed "HH_is_x_gt_too";
  | 
| 
1123
 | 
    66  | 
  | 
| 
 | 
    67  | 
goal thy "!!a. [| HH(f,x,a) : Pow(x)-{0}; b<a |] ==> HH(f,x,b) : Pow(x)-{0}";
 | 
| 
 | 
    68  | 
by (resolve_tac [HH_values RS disjE] 1 THEN (assume_tac 1));
  | 
| 
1207
 | 
    69  | 
by (dtac HH_is_x_gt_too 1 THEN (assume_tac 1));
  | 
| 
 | 
    70  | 
by (dtac subst 1 THEN (assume_tac 1));
  | 
| 
4091
 | 
    71  | 
by (fast_tac (claset() addSEs [mem_irrefl]) 1);
  | 
| 
3731
 | 
    72  | 
qed "HH_subset_x_lt_too";
  | 
| 
1123
 | 
    73  | 
  | 
| 
 | 
    74  | 
goal thy "!!a. HH(f,x,a) : Pow(x)-{0}   \
 | 
| 
1461
 | 
    75  | 
\               ==> HH(f,x,a) : Pow(x - (UN b:a. HH(f,x,b)))-{0}";
 | 
| 
1123
 | 
    76  | 
by (dresolve_tac [HH_def_satisfies_eq RS subst] 1);
  | 
| 
 | 
    77  | 
by (resolve_tac [HH_def_satisfies_eq RS ssubst] 1);
  | 
| 
4091
 | 
    78  | 
by (asm_full_simp_tac (simpset() addsimps [Let_def, Diff_subset RS PowI]) 1);
  | 
| 
1123
 | 
    79  | 
by (dresolve_tac [expand_if RS iffD1] 1);
  | 
| 
4091
 | 
    80  | 
by (simp_tac (simpset() setloop split_tac [expand_if] ) 1);
  | 
| 
1200
 | 
    81  | 
by (fast_tac (subset_cs addSEs [mem_irrefl]) 1);
  | 
| 
3731
 | 
    82  | 
qed "HH_subset_x_imp_subset_Diff_UN";
  | 
| 
1123
 | 
    83  | 
  | 
| 
 | 
    84  | 
goal thy "!!x. [| HH(f,x,v)=HH(f,x,w); HH(f,x,v): Pow(x)-{0}; v:w |] ==> P";
 | 
| 
 | 
    85  | 
by (forw_inst_tac [("P","%y. y: Pow(x)-{0}")] subst 1 THEN (assume_tac 1));
 | 
| 
 | 
    86  | 
by (dres_inst_tac [("a","w")] HH_subset_x_imp_subset_Diff_UN 1);
 | 
| 
1207
 | 
    87  | 
by (dtac subst_elem 1 THEN (assume_tac 1));
  | 
| 
4091
 | 
    88  | 
by (fast_tac (claset() addSIs [singleton_iff RS iffD2, equals0I]) 1);
  | 
| 
3731
 | 
    89  | 
qed "HH_eq_arg_lt";
  | 
| 
1123
 | 
    90  | 
  | 
| 
 | 
    91  | 
goal thy "!!x. [| HH(f,x,v)=HH(f,x,w); HH(f,x,w): Pow(x)-{0};  \
 | 
| 
1461
 | 
    92  | 
\               Ord(v); Ord(w) |] ==> v=w";
  | 
| 
1123
 | 
    93  | 
by (res_inst_tac [("j","w")] Ord_linear_lt 1 THEN TRYALL assume_tac);
 | 
| 
 | 
    94  | 
by (resolve_tac [sym RS (ltD RSN (3, HH_eq_arg_lt))] 2
  | 
| 
1461
 | 
    95  | 
        THEN REPEAT (assume_tac 2));
  | 
| 
1207
 | 
    96  | 
by (dtac subst_elem 1 THEN (assume_tac 1));
  | 
| 
1123
 | 
    97  | 
by (fast_tac (FOL_cs addDs [ltD] addSEs [HH_eq_arg_lt]) 1);
  | 
| 
3731
 | 
    98  | 
qed "HH_eq_imp_arg_eq";
  | 
| 
1123
 | 
    99  | 
  | 
| 
 | 
   100  | 
goalw thy [lepoll_def, inj_def]
  | 
| 
1461
 | 
   101  | 
        "!!i. [| HH(f, x, i) : Pow(x)-{0}; Ord(i) |] ==> i lepoll Pow(x)-{0}";
 | 
| 
1123
 | 
   102  | 
by (res_inst_tac [("x","lam j:i. HH(f, x, j)")] exI 1);
 | 
| 
2469
 | 
   103  | 
by (Asm_simp_tac 1);
  | 
| 
1123
 | 
   104  | 
by (fast_tac (FOL_cs addSEs [HH_eq_imp_arg_eq, Ord_in_Ord, HH_subset_x_lt_too]
  | 
| 
1461
 | 
   105  | 
                addSIs [lam_type, ballI, ltI] addIs [bexI]) 1);
  | 
| 
3731
 | 
   106  | 
qed "HH_subset_x_imp_lepoll";
  | 
| 
1123
 | 
   107  | 
  | 
| 
 | 
   108  | 
goal thy "HH(f, x, Hartog(Pow(x)-{0})) = {x}";
 | 
| 
 | 
   109  | 
by (resolve_tac [HH_values RS disjE] 1 THEN (assume_tac 2));
  | 
| 
 | 
   110  | 
by (fast_tac (FOL_cs addSDs [HH_subset_x_imp_lepoll]
  | 
| 
1461
 | 
   111  | 
                addSIs [Ord_Hartog] addSEs [HartogE]) 1);
  | 
| 
3731
 | 
   112  | 
qed "HH_Hartog_is_x";
  | 
| 
1123
 | 
   113  | 
  | 
| 
 | 
   114  | 
goal thy "HH(f, x, LEAST i. HH(f, x, i) = {x}) = {x}";
 | 
| 
4091
 | 
   115  | 
by (fast_tac (claset() addSIs [Ord_Hartog, HH_Hartog_is_x, LeastI]) 1);
  | 
| 
3731
 | 
   116  | 
qed "HH_Least_eq_x";
  | 
| 
1123
 | 
   117  | 
  | 
| 
 | 
   118  | 
goal thy "!!a. a:(LEAST i. HH(f,x,i)={x}) ==> HH(f,x,a) : Pow(x)-{0}";
 | 
| 
 | 
   119  | 
by (resolve_tac [HH_values RS disjE] 1 THEN (assume_tac 1));
  | 
| 
1207
 | 
   120  | 
by (rtac less_LeastE 1);
  | 
| 
1123
 | 
   121  | 
by (eresolve_tac [Ord_Least RSN (2, ltI)] 2);
  | 
| 
 | 
   122  | 
by (assume_tac 1);
  | 
| 
3731
 | 
   123  | 
qed "less_Least_subset_x";
  | 
| 
1123
 | 
   124  | 
  | 
| 
 | 
   125  | 
(* ********************************************************************** *)
  | 
| 
1461
 | 
   126  | 
(* Lemmas used in the proofs of AC1 ==> WO2 and AC17 ==> AC1              *)
  | 
| 
1123
 | 
   127  | 
(* ********************************************************************** *)
  | 
| 
 | 
   128  | 
  | 
| 
 | 
   129  | 
goalw thy [inj_def]
  | 
| 
1461
 | 
   130  | 
        "(lam a:(LEAST i. HH(f,x,i)={x}). HH(f,x,a)) :  \
 | 
| 
 | 
   131  | 
\               inj(LEAST i. HH(f,x,i)={x}, Pow(x)-{0})";
 | 
| 
2469
 | 
   132  | 
by (Asm_full_simp_tac 1);
  | 
| 
4091
 | 
   133  | 
by (fast_tac (claset()  addSIs [lam_type] addDs [less_Least_subset_x]
  | 
| 
1461
 | 
   134  | 
                addSEs [HH_eq_imp_arg_eq, Ord_Least RS Ord_in_Ord]) 1);
  | 
| 
3731
 | 
   135  | 
qed "lam_Least_HH_inj_Pow";
  | 
| 
1123
 | 
   136  | 
  | 
| 
 | 
   137  | 
goal thy "!!x. ALL a:(LEAST i. HH(f,x,i)={x}). EX z:x. HH(f,x,a) = {z}  \
 | 
| 
1461
 | 
   138  | 
\               ==> (lam a:(LEAST i. HH(f,x,i)={x}). HH(f,x,a))  \
 | 
| 
 | 
   139  | 
\                       : inj(LEAST i. HH(f,x,i)={x}, {{y}. y:x})";
 | 
| 
1123
 | 
   140  | 
by (resolve_tac [lam_Least_HH_inj_Pow RS inj_strengthen_type] 1);
  | 
| 
2469
 | 
   141  | 
by (Asm_full_simp_tac 1);
  | 
| 
3731
 | 
   142  | 
qed "lam_Least_HH_inj";
  | 
| 
1123
 | 
   143  | 
  | 
| 
 | 
   144  | 
goalw thy [surj_def]
  | 
| 
1461
 | 
   145  | 
        "!!x. [| x - (UN a:A. F(a)) = 0;  \
  | 
| 
 | 
   146  | 
\               ALL a:A. EX z:x. F(a) = {z} |]  \
 | 
| 
 | 
   147  | 
\               ==> (lam a:A. F(a)) : surj(A, {{y}. y:x})";
 | 
| 
4091
 | 
   148  | 
by (asm_full_simp_tac (simpset() addsimps [lam_type, Diff_eq_0_iff]) 1);
  | 
| 
3731
 | 
   149  | 
by Safe_tac;
  | 
| 
2469
 | 
   150  | 
by (set_mp_tac 1);
  | 
| 
4091
 | 
   151  | 
by (deepen_tac (claset() addSIs [bexI] addSEs [equalityE]) 4 1);
  | 
| 
3731
 | 
   152  | 
qed "lam_surj_sing";
  | 
| 
1123
 | 
   153  | 
  | 
| 
 | 
   154  | 
goal thy "!!x. y:Pow(x)-{0} ==> x ~= 0";
 | 
| 
4091
 | 
   155  | 
by (fast_tac (claset() addSIs [equals0I, singletonI RS subst_elem]
  | 
| 
1461
 | 
   156  | 
                addSDs [equals0D]) 1);
  | 
| 
3731
 | 
   157  | 
qed "not_emptyI2";
  | 
| 
1123
 | 
   158  | 
  | 
| 
 | 
   159  | 
goal thy "!!f. f`(x - (UN j:i. HH(f,x,j))): Pow(x - (UN j:i. HH(f,x,j)))-{0}  \
 | 
| 
1461
 | 
   160  | 
\       ==> HH(f, x, i) : Pow(x) - {0}";
 | 
| 
1123
 | 
   161  | 
by (resolve_tac [HH_def_satisfies_eq RS ssubst] 1);
  | 
| 
4091
 | 
   162  | 
by (asm_full_simp_tac (simpset() addsimps [Let_def, Diff_subset RS PowI,
  | 
| 
1461
 | 
   163  | 
                not_emptyI2 RS if_P]) 1);
  | 
| 
2469
 | 
   164  | 
by (Fast_tac 1);
  | 
| 
3731
 | 
   165  | 
qed "f_subset_imp_HH_subset";
  | 
| 
1123
 | 
   166  | 
  | 
| 
 | 
   167  | 
val [prem] = goal thy "(!!z. z:Pow(x)-{0} ==> f`z : Pow(z)-{0}) ==>  \
 | 
| 
1461
 | 
   168  | 
\       x - (UN j: (LEAST i. HH(f,x,i)={x}). HH(f,x,j)) = 0";
 | 
| 
1123
 | 
   169  | 
by (excluded_middle_tac "?P : {0}" 1);
 | 
| 
2469
 | 
   170  | 
by (Fast_tac 2);
  | 
| 
1123
 | 
   171  | 
by (dresolve_tac [Diff_subset RS PowI RS DiffI RS prem RS
  | 
| 
1461
 | 
   172  | 
                f_subset_imp_HH_subset] 1);
  | 
| 
4091
 | 
   173  | 
by (fast_tac (claset() addSDs [HH_Least_eq_x RS sym RSN (2, subst_elem)]
  | 
| 
1461
 | 
   174  | 
                addSEs [mem_irrefl]) 1);
  | 
| 
3731
 | 
   175  | 
qed "f_subsets_imp_UN_HH_eq_x";
  | 
| 
1123
 | 
   176  | 
  | 
| 
 | 
   177  | 
goal thy "HH(f,x,i)=f`(x - (UN j:i. HH(f,x,j))) | HH(f,x,i)={x}";
 | 
| 
 | 
   178  | 
by (resolve_tac [HH_def_satisfies_eq RS ssubst] 1);
  | 
| 
4091
 | 
   179  | 
by (simp_tac (simpset() addsimps [Let_def, Diff_subset RS PowI]
  | 
| 
1461
 | 
   180  | 
              setloop split_tac [expand_if]) 1);
  | 
| 
3731
 | 
   181  | 
qed "HH_values2";
  | 
| 
1123
 | 
   182  | 
  | 
| 
1200
 | 
   183  | 
goal thy
  | 
| 
 | 
   184  | 
     "!!f. HH(f,x,i): Pow(x)-{0} ==> HH(f,x,i)=f`(x - (UN j:i. HH(f,x,j)))";
 | 
| 
1123
 | 
   185  | 
by (resolve_tac [HH_values2 RS disjE] 1 THEN (assume_tac 1));
  | 
| 
4091
 | 
   186  | 
by (fast_tac (claset() addSEs [equalityE, mem_irrefl]
  | 
| 
1461
 | 
   187  | 
        addSDs [singleton_subsetD]) 1);
  | 
| 
3731
 | 
   188  | 
qed "HH_subset_imp_eq";
  | 
| 
1123
 | 
   189  | 
  | 
| 
2493
 | 
   190  | 
goal thy "!!f. [| f : (Pow(x)-{0}) -> {{z}. z:x};  \
 | 
| 
1461
 | 
   191  | 
\       a:(LEAST i. HH(f,x,i)={x}) |] ==> EX z:x. HH(f,x,a) = {z}";
 | 
| 
1207
 | 
   192  | 
by (dtac less_Least_subset_x 1);
  | 
| 
1123
 | 
   193  | 
by (forward_tac [HH_subset_imp_eq] 1);
  | 
| 
1207
 | 
   194  | 
by (dtac apply_type 1);
  | 
| 
1123
 | 
   195  | 
by (resolve_tac [Diff_subset RS PowI RS DiffI] 1);
  | 
| 
2493
 | 
   196  | 
by (fast_tac 
  | 
| 
4091
 | 
   197  | 
    (claset() addSDs [HH_subset_x_imp_subset_Diff_UN RS not_emptyI2]) 1);
  | 
| 
 | 
   198  | 
by (fast_tac (claset() addss (simpset())) 1);
  | 
| 
3731
 | 
   199  | 
qed "f_sing_imp_HH_sing";
  | 
| 
1123
 | 
   200  | 
  | 
| 
 | 
   201  | 
goalw thy [bij_def] 
  | 
| 
1461
 | 
   202  | 
        "!!f. [| x - (UN j: (LEAST i. HH(f,x,i)={x}). HH(f,x,j)) = 0;  \
 | 
| 
2493
 | 
   203  | 
\       f : (Pow(x)-{0}) -> {{z}. z:x} |]  \
 | 
| 
1461
 | 
   204  | 
\       ==> (lam a:(LEAST i. HH(f,x,i)={x}). HH(f,x,a))  \
 | 
| 
 | 
   205  | 
\                       : bij(LEAST i. HH(f,x,i)={x}, {{y}. y:x})";
 | 
| 
4091
 | 
   206  | 
by (fast_tac (claset() addSIs [lam_Least_HH_inj, lam_surj_sing,
  | 
| 
2493
 | 
   207  | 
                              f_sing_imp_HH_sing]) 1);
  | 
| 
3731
 | 
   208  | 
qed "f_sing_lam_bij";
  | 
| 
1123
 | 
   209  | 
  | 
| 
 | 
   210  | 
goal thy "!!f. f: (PROD X: Pow(x)-{0}. F(X))  \
 | 
| 
1461
 | 
   211  | 
\       ==> (lam X:Pow(x)-{0}. {f`X}) : (PROD X: Pow(x)-{0}. {{z}. z:F(X)})";
 | 
| 
1123
 | 
   212  | 
by (fast_tac (FOL_cs addSIs [lam_type, RepFun_eqI, singleton_eq_iff RS iffD2]
  | 
| 
2493
 | 
   213  | 
                     addDs [apply_type]) 1);
  | 
| 
3731
 | 
   214  | 
qed "lam_singI";
  | 
| 
1123
 | 
   215  | 
  | 
| 
2493
 | 
   216  | 
val bij_Least_HH_x = 
  | 
| 
 | 
   217  | 
    (lam_singI RSN (2, [f_sing_lam_bij, lam_sing_bij RS bij_converse_bij]
  | 
| 
 | 
   218  | 
                    MRS comp_bij)) |> standard;
  |