src/ZF/OrderType.ML
changeset 782 200a16083201
parent 771 067767b0b35e
child 788 8acbe6f3de2b
equal deleted inserted replaced
781:9ab8873bf9b3 782:200a16083201
   222   The smaller ordinal is an initial segment of the larger *)
   222   The smaller ordinal is an initial segment of the larger *)
   223 goalw OrderType.thy [pred_def, lt_def]
   223 goalw OrderType.thy [pred_def, lt_def]
   224     "!!i j. j<i ==> j = pred(i, j, Memrel(i))";
   224     "!!i j. j<i ==> j = pred(i, j, Memrel(i))";
   225 by (asm_simp_tac (ZF_ss addsimps [Memrel_iff]) 1);
   225 by (asm_simp_tac (ZF_ss addsimps [Memrel_iff]) 1);
   226 by (fast_tac (eq_cs addEs [Ord_trans]) 1);
   226 by (fast_tac (eq_cs addEs [Ord_trans]) 1);
   227 val lt_eq_pred = result();
   227 qed "lt_eq_pred";
   228 
   228 
   229 goal OrderType.thy
   229 goal OrderType.thy
   230     "!!i. [| j<i;  f: ord_iso(i,Memrel(i),j,Memrel(j))	\
   230     "!!i. [| j<i;  f: ord_iso(i,Memrel(i),j,Memrel(j))	\
   231 \         |] ==> R";
   231 \         |] ==> R";
   232 by (forward_tac [lt_eq_pred] 1);
   232 by (forward_tac [lt_eq_pred] 1);
   237 by (asm_full_simp_tac (ZF_ss addsimps [ord_iso_def]) 1);
   237 by (asm_full_simp_tac (ZF_ss addsimps [ord_iso_def]) 1);
   238 (*Combining the two simplifications causes looping*)
   238 (*Combining the two simplifications causes looping*)
   239 by (asm_simp_tac (ZF_ss addsimps [Memrel_iff]) 1);
   239 by (asm_simp_tac (ZF_ss addsimps [Memrel_iff]) 1);
   240 by (fast_tac (ZF_cs addSEs [bij_is_fun RS apply_type]  
   240 by (fast_tac (ZF_cs addSEs [bij_is_fun RS apply_type]  
   241                     addEs  [Ord_trans]) 1);
   241                     addEs  [Ord_trans]) 1);
   242 val Ord_iso_implies_eq_lemma = result();
   242 qed "Ord_iso_implies_eq_lemma";
   243 
   243 
   244 (*Kunen's Theorem 7.3 (ii), page 16.  Isomorphic ordinals are equal*)
   244 (*Kunen's Theorem 7.3 (ii), page 16.  Isomorphic ordinals are equal*)
   245 goal OrderType.thy
   245 goal OrderType.thy
   246     "!!i. [| Ord(i);  Ord(j);  f:  ord_iso(i,Memrel(i),j,Memrel(j))	\
   246     "!!i. [| Ord(i);  Ord(j);  f:  ord_iso(i,Memrel(i),j,Memrel(j))	\
   247 \         |] ==> i=j";
   247 \         |] ==> i=j";
   248 by (res_inst_tac [("i","i"),("j","j")] Ord_linear_lt 1);
   248 by (res_inst_tac [("i","i"),("j","j")] Ord_linear_lt 1);
   249 by (REPEAT (eresolve_tac [asm_rl, ord_iso_sym, Ord_iso_implies_eq_lemma] 1));
   249 by (REPEAT (eresolve_tac [asm_rl, ord_iso_sym, Ord_iso_implies_eq_lemma] 1));
   250 val Ord_iso_implies_eq = result();
   250 qed "Ord_iso_implies_eq";