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"; |