| author | wenzelm | 
| Thu, 04 Jan 2007 19:27:08 +0100 | |
| changeset 22002 | 5c60e46a07c1 | 
| parent 16417 | 9bc16273c2d4 | 
| child 24893 | b8ef7afe3a6b | 
| permissions | -rw-r--r-- | 
| 1478 | 1 | (* Title: ZF/Order.thy | 
| 435 | 2 | ID: $Id$ | 
| 1478 | 3 | Author: Lawrence C Paulson, Cambridge University Computer Laboratory | 
| 435 | 4 | Copyright 1994 University of Cambridge | 
| 5 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 6 | Results from the book "Set Theory: an Introduction to Independence Proofs" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 7 | by Kenneth Kunen. Chapter 1, section 6. | 
| 435 | 8 | *) | 
| 9 | ||
| 13356 | 10 | header{*Partial and Total Orderings: Basic Definitions and Properties*}
 | 
| 11 | ||
| 16417 | 12 | theory Order imports WF Perm begin | 
| 786 | 13 | |
| 2469 | 14 | constdefs | 
| 15 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 16 | part_ord :: "[i,i]=>o" (*Strict partial ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 17 | "part_ord(A,r) == irrefl(A,r) & trans[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 18 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 19 | linear :: "[i,i]=>o" (*Strict total ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 20 | "linear(A,r) == (ALL x:A. ALL y:A. <x,y>:r | x=y | <y,x>:r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 21 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 22 | tot_ord :: "[i,i]=>o" (*Strict total ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 23 | "tot_ord(A,r) == part_ord(A,r) & linear(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 24 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 25 | well_ord :: "[i,i]=>o" (*Well-ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 26 | "well_ord(A,r) == tot_ord(A,r) & wf[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 27 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 28 | mono_map :: "[i,i,i,i]=>i" (*Order-preserving maps*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 29 | "mono_map(A,r,B,s) == | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 30 | 	      {f: A->B. ALL x:A. ALL y:A. <x,y>:r --> <f`x,f`y>:s}"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 31 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 32 | ord_iso :: "[i,i,i,i]=>i" (*Order isomorphisms*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 33 | "ord_iso(A,r,B,s) == | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 34 | 	      {f: bij(A,B). ALL x:A. ALL y:A. <x,y>:r <-> <f`x,f`y>:s}"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 35 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 36 | pred :: "[i,i,i]=>i" (*Set of predecessors*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 37 |    "pred(A,x,r) == {y:A. <y,x>:r}"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 38 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 39 | ord_iso_map :: "[i,i,i,i]=>i" (*Construction for linearity theorem*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 40 | "ord_iso_map(A,r,B,s) == | 
| 13615 
449a70d88b38
Numerous cosmetic changes, prompted by the new simplifier
 paulson parents: 
13611diff
changeset | 41 |      \<Union>x\<in>A. \<Union>y\<in>B. \<Union>f \<in> ord_iso(pred(A,x,r), r, pred(B,y,s), s). {<x,y>}"
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 42 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 43 | first :: "[i, i, i] => o" | 
| 2469 | 44 | "first(u, X, R) == u:X & (ALL v:X. v~=u --> <u,v> : R)" | 
| 45 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 46 | |
| 9683 | 47 | syntax (xsymbols) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 48 |     ord_iso :: "[i,i,i,i]=>i"      ("(\<langle>_, _\<rangle> \<cong>/ \<langle>_, _\<rangle>)" 51)
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 49 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 50 | |
| 13356 | 51 | subsection{*Immediate Consequences of the Definitions*}
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 52 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 53 | lemma part_ord_Imp_asym: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 54 | "part_ord(A,r) ==> asym(r Int A*A)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 55 | by (unfold part_ord_def irrefl_def trans_on_def asym_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 56 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 57 | lemma linearE: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 58 | "[| linear(A,r); x:A; y:A; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 59 | <x,y>:r ==> P; x=y ==> P; <y,x>:r ==> P |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 60 | ==> P" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 61 | by (simp add: linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 62 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 63 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 64 | (** General properties of well_ord **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 65 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 66 | lemma well_ordI: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 67 | "[| wf[A](r); linear(A,r) |] ==> well_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 68 | apply (simp add: irrefl_def part_ord_def tot_ord_def | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 69 | trans_on_def well_ord_def wf_on_not_refl) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 70 | apply (fast elim: linearE wf_on_asym wf_on_chain3) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 71 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 72 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 73 | lemma well_ord_is_wf: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 74 | "well_ord(A,r) ==> wf[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 75 | by (unfold well_ord_def, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 76 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 77 | lemma well_ord_is_trans_on: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 78 | "well_ord(A,r) ==> trans[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 79 | by (unfold well_ord_def tot_ord_def part_ord_def, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 80 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 81 | lemma well_ord_is_linear: "well_ord(A,r) ==> linear(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 82 | by (unfold well_ord_def tot_ord_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 83 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 84 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 85 | (** Derived rules for pred(A,x,r) **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 86 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 87 | lemma pred_iff: "y : pred(A,x,r) <-> <y,x>:r & y:A" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 88 | by (unfold pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 89 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 90 | lemmas predI = conjI [THEN pred_iff [THEN iffD2]] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 91 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 92 | lemma predE: "[| y: pred(A,x,r); [| y:A; <y,x>:r |] ==> P |] ==> P" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 93 | by (simp add: pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 94 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 95 | lemma pred_subset_under: "pred(A,x,r) <= r -`` {x}"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 96 | by (simp add: pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 97 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 98 | lemma pred_subset: "pred(A,x,r) <= A" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 99 | by (simp add: pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 100 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 101 | lemma pred_pred_eq: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 102 | "pred(pred(A,x,r), y, r) = pred(A,x,r) Int pred(A,y,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 103 | by (simp add: pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 104 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 105 | lemma trans_pred_pred_eq: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 106 | "[| trans[A](r); <y,x>:r; x:A; y:A |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 107 | ==> pred(pred(A,x,r), y, r) = pred(A,y,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 108 | by (unfold trans_on_def pred_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 109 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 110 | |
| 13356 | 111 | subsection{*Restricting an Ordering's Domain*}
 | 
| 112 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 113 | (** The ordering's properties hold over all subsets of its domain | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 114 | [including initial segments of the form pred(A,x,r) **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 115 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 116 | (*Note: a relation s such that s<=r need not be a partial ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 117 | lemma part_ord_subset: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 118 | "[| part_ord(A,r); B<=A |] ==> part_ord(B,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 119 | by (unfold part_ord_def irrefl_def trans_on_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 120 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 121 | lemma linear_subset: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 122 | "[| linear(A,r); B<=A |] ==> linear(B,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 123 | by (unfold linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 124 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 125 | lemma tot_ord_subset: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 126 | "[| tot_ord(A,r); B<=A |] ==> tot_ord(B,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 127 | apply (unfold tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 128 | apply (fast elim!: part_ord_subset linear_subset) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 129 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 130 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 131 | lemma well_ord_subset: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 132 | "[| well_ord(A,r); B<=A |] ==> well_ord(B,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 133 | apply (unfold well_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 134 | apply (fast elim!: tot_ord_subset wf_on_subset_A) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 135 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 136 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 137 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 138 | (** Relations restricted to a smaller domain, by Krzysztof Grabczewski **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 139 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 140 | lemma irrefl_Int_iff: "irrefl(A,r Int A*A) <-> irrefl(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 141 | by (unfold irrefl_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 142 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 143 | lemma trans_on_Int_iff: "trans[A](r Int A*A) <-> trans[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 144 | by (unfold trans_on_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 145 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 146 | lemma part_ord_Int_iff: "part_ord(A,r Int A*A) <-> part_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 147 | apply (unfold part_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 148 | apply (simp add: irrefl_Int_iff trans_on_Int_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 149 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 150 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 151 | lemma linear_Int_iff: "linear(A,r Int A*A) <-> linear(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 152 | by (unfold linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 153 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 154 | lemma tot_ord_Int_iff: "tot_ord(A,r Int A*A) <-> tot_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 155 | apply (unfold tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 156 | apply (simp add: part_ord_Int_iff linear_Int_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 157 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 158 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 159 | lemma wf_on_Int_iff: "wf[A](r Int A*A) <-> wf[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 160 | apply (unfold wf_on_def wf_def, fast) (*10 times faster than Blast_tac!*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 161 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 162 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 163 | lemma well_ord_Int_iff: "well_ord(A,r Int A*A) <-> well_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 164 | apply (unfold well_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 165 | apply (simp add: tot_ord_Int_iff wf_on_Int_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 166 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 167 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 168 | |
| 13356 | 169 | subsection{*Empty and Unit Domains*}
 | 
| 170 | ||
| 13701 | 171 | (*The empty relation is well-founded*) | 
| 172 | lemma wf_on_any_0: "wf[A](0)" | |
| 173 | by (simp add: wf_on_def wf_def, fast) | |
| 174 | ||
| 175 | subsubsection{*Relations over the Empty Set*}
 | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 176 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 177 | lemma irrefl_0: "irrefl(0,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 178 | by (unfold irrefl_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 179 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 180 | lemma trans_on_0: "trans[0](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 181 | by (unfold trans_on_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 182 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 183 | lemma part_ord_0: "part_ord(0,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 184 | apply (unfold part_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 185 | apply (simp add: irrefl_0 trans_on_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 186 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 187 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 188 | lemma linear_0: "linear(0,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 189 | by (unfold linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 190 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 191 | lemma tot_ord_0: "tot_ord(0,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 192 | apply (unfold tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 193 | apply (simp add: part_ord_0 linear_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 194 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 195 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 196 | lemma wf_on_0: "wf[0](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 197 | by (unfold wf_on_def wf_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 198 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 199 | lemma well_ord_0: "well_ord(0,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 200 | apply (unfold well_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 201 | apply (simp add: tot_ord_0 wf_on_0) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 202 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 203 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 204 | |
| 13701 | 205 | subsubsection{*The Empty Relation Well-Orders the Unit Set*}
 | 
| 206 | ||
| 207 | text{*by Grabczewski*}
 | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 208 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 209 | lemma tot_ord_unit: "tot_ord({a},0)"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 210 | by (simp add: irrefl_def trans_on_def part_ord_def linear_def tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 211 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 212 | lemma well_ord_unit: "well_ord({a},0)"
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 213 | apply (unfold well_ord_def) | 
| 13701 | 214 | apply (simp add: tot_ord_unit wf_on_any_0) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 215 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 216 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 217 | |
| 13356 | 218 | subsection{*Order-Isomorphisms*}
 | 
| 219 | ||
| 220 | text{*Suppes calls them "similarities"*}
 | |
| 221 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 222 | (** Order-preserving (monotone) maps **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 223 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 224 | lemma mono_map_is_fun: "f: mono_map(A,r,B,s) ==> f: A->B" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 225 | by (simp add: mono_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 226 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 227 | lemma mono_map_is_inj: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 228 | "[| linear(A,r); wf[B](s); f: mono_map(A,r,B,s) |] ==> f: inj(A,B)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 229 | apply (unfold mono_map_def inj_def, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 230 | apply (erule_tac x=w and y=x in linearE, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 231 | apply (force intro: apply_type dest: wf_on_not_refl)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 232 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 233 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 234 | lemma ord_isoI: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 235 | "[| f: bij(A, B); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 236 | !!x y. [| x:A; y:A |] ==> <x, y> : r <-> <f`x, f`y> : s |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 237 | ==> f: ord_iso(A,r,B,s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 238 | by (simp add: ord_iso_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 239 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 240 | lemma ord_iso_is_mono_map: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 241 | "f: ord_iso(A,r,B,s) ==> f: mono_map(A,r,B,s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 242 | apply (simp add: ord_iso_def mono_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 243 | apply (blast dest!: bij_is_fun) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 244 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 245 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 246 | lemma ord_iso_is_bij: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 247 | "f: ord_iso(A,r,B,s) ==> f: bij(A,B)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 248 | by (simp add: ord_iso_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 249 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 250 | (*Needed? But ord_iso_converse is!*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 251 | lemma ord_iso_apply: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 252 | "[| f: ord_iso(A,r,B,s); <x,y>: r; x:A; y:A |] ==> <f`x, f`y> : s" | 
| 13611 | 253 | by (simp add: ord_iso_def) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 254 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 255 | lemma ord_iso_converse: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 256 | "[| f: ord_iso(A,r,B,s); <x,y>: s; x:B; y:B |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 257 | ==> <converse(f) ` x, converse(f) ` y> : r" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 258 | apply (simp add: ord_iso_def, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 259 | apply (erule bspec [THEN bspec, THEN iffD2]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 260 | apply (erule asm_rl bij_converse_bij [THEN bij_is_fun, THEN apply_type])+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 261 | apply (auto simp add: right_inverse_bij) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 262 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 263 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 264 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 265 | (** Symmetry and Transitivity Rules **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 266 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 267 | (*Reflexivity of similarity*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 268 | lemma ord_iso_refl: "id(A): ord_iso(A,r,A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 269 | by (rule id_bij [THEN ord_isoI], simp) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 270 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 271 | (*Symmetry of similarity*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 272 | lemma ord_iso_sym: "f: ord_iso(A,r,B,s) ==> converse(f): ord_iso(B,s,A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 273 | apply (simp add: ord_iso_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 274 | apply (auto simp add: right_inverse_bij bij_converse_bij | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 275 | bij_is_fun [THEN apply_funtype]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 276 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 277 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 278 | (*Transitivity of similarity*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 279 | lemma mono_map_trans: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 280 | "[| g: mono_map(A,r,B,s); f: mono_map(B,s,C,t) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 281 | ==> (f O g): mono_map(A,r,C,t)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 282 | apply (unfold mono_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 283 | apply (auto simp add: comp_fun) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 284 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 285 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 286 | (*Transitivity of similarity: the order-isomorphism relation*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 287 | lemma ord_iso_trans: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 288 | "[| g: ord_iso(A,r,B,s); f: ord_iso(B,s,C,t) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 289 | ==> (f O g): ord_iso(A,r,C,t)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 290 | apply (unfold ord_iso_def, clarify) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 291 | apply (frule bij_is_fun [of f]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 292 | apply (frule bij_is_fun [of g]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 293 | apply (auto simp add: comp_bij) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 294 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 295 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 296 | (** Two monotone maps can make an order-isomorphism **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 297 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 298 | lemma mono_ord_isoI: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 299 | "[| f: mono_map(A,r,B,s); g: mono_map(B,s,A,r); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 300 | f O g = id(B); g O f = id(A) |] ==> f: ord_iso(A,r,B,s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 301 | apply (simp add: ord_iso_def mono_map_def, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 302 | apply (intro fg_imp_bijective, auto) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 303 | apply (subgoal_tac "<g` (f`x), g` (f`y) > : r") | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 304 | apply (simp add: comp_eq_id_iff [THEN iffD1]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 305 | apply (blast intro: apply_funtype) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 306 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 307 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 308 | lemma well_ord_mono_ord_isoI: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 309 | "[| well_ord(A,r); well_ord(B,s); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 310 | f: mono_map(A,r,B,s); converse(f): mono_map(B,s,A,r) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 311 | ==> f: ord_iso(A,r,B,s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 312 | apply (intro mono_ord_isoI, auto) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 313 | apply (frule mono_map_is_fun [THEN fun_is_rel]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 314 | apply (erule converse_converse [THEN subst], rule left_comp_inverse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 315 | apply (blast intro: left_comp_inverse mono_map_is_inj well_ord_is_linear | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 316 | well_ord_is_wf)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 317 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 318 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 319 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 320 | (** Order-isomorphisms preserve the ordering's properties **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 321 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 322 | lemma part_ord_ord_iso: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 323 | "[| part_ord(B,s); f: ord_iso(A,r,B,s) |] ==> part_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 324 | apply (simp add: part_ord_def irrefl_def trans_on_def ord_iso_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 325 | apply (fast intro: bij_is_fun [THEN apply_type]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 326 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 327 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 328 | lemma linear_ord_iso: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 329 | "[| linear(B,s); f: ord_iso(A,r,B,s) |] ==> linear(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 330 | apply (simp add: linear_def ord_iso_def, safe) | 
| 13339 
0f89104dd377
Fixed quantified variable name preservation for ball and bex (bounded quants)
 paulson parents: 
13212diff
changeset | 331 | apply (drule_tac x1 = "f`x" and x = "f`y" in bspec [THEN bspec]) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 332 | apply (safe elim!: bij_is_fun [THEN apply_type]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 333 | apply (drule_tac t = "op ` (converse (f))" in subst_context) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 334 | apply (simp add: left_inverse_bij) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 335 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 336 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 337 | lemma wf_on_ord_iso: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 338 | "[| wf[B](s); f: ord_iso(A,r,B,s) |] ==> wf[A](r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 339 | apply (simp add: wf_on_def wf_def ord_iso_def, safe) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 340 | apply (drule_tac x = "{f`z. z:Z Int A}" in spec)
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 341 | apply (safe intro!: equalityI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 342 | apply (blast dest!: equalityD1 intro: bij_is_fun [THEN apply_type])+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 343 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 344 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 345 | lemma well_ord_ord_iso: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 346 | "[| well_ord(B,s); f: ord_iso(A,r,B,s) |] ==> well_ord(A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 347 | apply (unfold well_ord_def tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 348 | apply (fast elim!: part_ord_ord_iso linear_ord_iso wf_on_ord_iso) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 349 | done | 
| 9683 | 350 | |
| 351 | ||
| 13356 | 352 | subsection{*Main results of Kunen, Chapter 1 section 6*}
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 353 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 354 | (*Inductive argument for Kunen's Lemma 6.1, etc. | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 355 | Simple proof from Halmos, page 72*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 356 | lemma well_ord_iso_subset_lemma: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 357 | "[| well_ord(A,r); f: ord_iso(A,r, A',r); A'<= A; y: A |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 358 | ==> ~ <f`y, y>: r" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 359 | apply (simp add: well_ord_def ord_iso_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 360 | apply (elim conjE CollectE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 361 | apply (rule_tac a=y in wf_on_induct, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 362 | apply (blast dest: bij_is_fun [THEN apply_type]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 363 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 364 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 365 | (*Kunen's Lemma 6.1: there's no order-isomorphism to an initial segment | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 366 | of a well-ordering*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 367 | lemma well_ord_iso_predE: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 368 | "[| well_ord(A,r); f : ord_iso(A, r, pred(A,x,r), r); x:A |] ==> P" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 369 | apply (insert well_ord_iso_subset_lemma [of A r f "pred(A,x,r)" x]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 370 | apply (simp add: pred_subset) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 371 | (*Now we know f`x < x *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 372 | apply (drule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 373 | (*Now we also know f`x : pred(A,x,r); contradiction! *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 374 | apply (simp add: well_ord_def pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 375 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 376 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 377 | (*Simple consequence of Lemma 6.1*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 378 | lemma well_ord_iso_pred_eq: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 379 | "[| well_ord(A,r); f : ord_iso(pred(A,a,r), r, pred(A,c,r), r); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 380 | a:A; c:A |] ==> a=c" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 381 | apply (frule well_ord_is_trans_on) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 382 | apply (frule well_ord_is_linear) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 383 | apply (erule_tac x=a and y=c in linearE, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 384 | apply (drule ord_iso_sym) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 385 | (*two symmetric cases*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 386 | apply (auto elim!: well_ord_subset [OF _ pred_subset, THEN well_ord_iso_predE] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 387 | intro!: predI | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 388 | simp add: trans_pred_pred_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 389 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 390 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 391 | (*Does not assume r is a wellordering!*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 392 | lemma ord_iso_image_pred: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 393 | "[|f : ord_iso(A,r,B,s); a:A|] ==> f `` pred(A,a,r) = pred(B, f`a, s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 394 | apply (unfold ord_iso_def pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 395 | apply (erule CollectE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 396 | apply (simp (no_asm_simp) add: image_fun [OF bij_is_fun Collect_subset]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 397 | apply (rule equalityI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 398 | apply (safe elim!: bij_is_fun [THEN apply_type]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 399 | apply (rule RepFun_eqI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 400 | apply (blast intro!: right_inverse_bij [symmetric]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 401 | apply (auto simp add: right_inverse_bij bij_is_fun [THEN apply_funtype]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 402 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 403 | |
| 13212 | 404 | lemma ord_iso_restrict_image: | 
| 405 | "[| f : ord_iso(A,r,B,s); C<=A |] | |
| 406 | ==> restrict(f,C) : ord_iso(C, r, f``C, s)" | |
| 407 | apply (simp add: ord_iso_def) | |
| 408 | apply (blast intro: bij_is_inj restrict_bij) | |
| 409 | done | |
| 410 | ||
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 411 | (*But in use, A and B may themselves be initial segments. Then use | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 412 | trans_pred_pred_eq to simplify the pred(pred...) terms. See just below.*) | 
| 13212 | 413 | lemma ord_iso_restrict_pred: | 
| 414 | "[| f : ord_iso(A,r,B,s); a:A |] | |
| 415 | ==> restrict(f, pred(A,a,r)) : ord_iso(pred(A,a,r), r, pred(B, f`a, s), s)" | |
| 416 | apply (simp add: ord_iso_image_pred [symmetric]) | |
| 417 | apply (blast intro: ord_iso_restrict_image elim: predE) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 418 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 419 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 420 | (*Tricky; a lot of forward proof!*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 421 | lemma well_ord_iso_preserving: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 422 | "[| well_ord(A,r); well_ord(B,s); <a,c>: r; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 423 | f : ord_iso(pred(A,a,r), r, pred(B,b,s), s); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 424 | g : ord_iso(pred(A,c,r), r, pred(B,d,s), s); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 425 | a:A; c:A; b:B; d:B |] ==> <b,d>: s" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 426 | apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], (erule asm_rl predI predE)+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 427 | apply (subgoal_tac "b = g`a") | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 428 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 429 | apply (rule well_ord_iso_pred_eq, auto) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 430 | apply (frule ord_iso_restrict_pred, (erule asm_rl predI)+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 431 | apply (simp add: well_ord_is_trans_on trans_pred_pred_eq) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 432 | apply (erule ord_iso_sym [THEN ord_iso_trans], assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 433 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 434 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 435 | (*See Halmos, page 72*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 436 | lemma well_ord_iso_unique_lemma: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 437 | "[| well_ord(A,r); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 438 | f: ord_iso(A,r, B,s); g: ord_iso(A,r, B,s); y: A |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 439 | ==> ~ <g`y, f`y> : s" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 440 | apply (frule well_ord_iso_subset_lemma) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 441 | apply (rule_tac f = "converse (f) " and g = g in ord_iso_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 442 | apply auto | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 443 | apply (blast intro: ord_iso_sym) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 444 | apply (frule ord_iso_is_bij [of f]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 445 | apply (frule ord_iso_is_bij [of g]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 446 | apply (frule ord_iso_converse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 447 | apply (blast intro!: bij_converse_bij | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 448 | intro: bij_is_fun apply_funtype)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 449 | apply (erule notE) | 
| 13176 
312bd350579b
conversion of Perm to Isar.  Strengthening of comp_fun_apply
 paulson parents: 
13140diff
changeset | 450 | apply (simp add: left_inverse_bij bij_is_fun comp_fun_apply [of _ A B]) | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 451 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 452 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 453 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 454 | (*Kunen's Lemma 6.2: Order-isomorphisms between well-orderings are unique*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 455 | lemma well_ord_iso_unique: "[| well_ord(A,r); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 456 | f: ord_iso(A,r, B,s); g: ord_iso(A,r, B,s) |] ==> f = g" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 457 | apply (rule fun_extension) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 458 | apply (erule ord_iso_is_bij [THEN bij_is_fun])+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 459 | apply (subgoal_tac "f`x : B & g`x : B & linear(B,s)") | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 460 | apply (simp add: linear_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 461 | apply (blast dest: well_ord_iso_unique_lemma) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 462 | apply (blast intro: ord_iso_is_bij bij_is_fun apply_funtype | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 463 | well_ord_is_linear well_ord_ord_iso ord_iso_sym) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 464 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 465 | |
| 13356 | 466 | subsection{*Towards Kunen's Theorem 6.3: Linearity of the Similarity Relation*}
 | 
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 467 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 468 | lemma ord_iso_map_subset: "ord_iso_map(A,r,B,s) <= A*B" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 469 | by (unfold ord_iso_map_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 470 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 471 | lemma domain_ord_iso_map: "domain(ord_iso_map(A,r,B,s)) <= A" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 472 | by (unfold ord_iso_map_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 473 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 474 | lemma range_ord_iso_map: "range(ord_iso_map(A,r,B,s)) <= B" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 475 | by (unfold ord_iso_map_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 476 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 477 | lemma converse_ord_iso_map: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 478 | "converse(ord_iso_map(A,r,B,s)) = ord_iso_map(B,s,A,r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 479 | apply (unfold ord_iso_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 480 | apply (blast intro: ord_iso_sym) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 481 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 482 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 483 | lemma function_ord_iso_map: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 484 | "well_ord(B,s) ==> function(ord_iso_map(A,r,B,s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 485 | apply (unfold ord_iso_map_def function_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 486 | apply (blast intro: well_ord_iso_pred_eq ord_iso_sym ord_iso_trans) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 487 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 488 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 489 | lemma ord_iso_map_fun: "well_ord(B,s) ==> ord_iso_map(A,r,B,s) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 490 | : domain(ord_iso_map(A,r,B,s)) -> range(ord_iso_map(A,r,B,s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 491 | by (simp add: Pi_iff function_ord_iso_map | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 492 | ord_iso_map_subset [THEN domain_times_range]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 493 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 494 | lemma ord_iso_map_mono_map: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 495 | "[| well_ord(A,r); well_ord(B,s) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 496 | ==> ord_iso_map(A,r,B,s) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 497 | : mono_map(domain(ord_iso_map(A,r,B,s)), r, | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 498 | range(ord_iso_map(A,r,B,s)), s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 499 | apply (unfold mono_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 500 | apply (simp (no_asm_simp) add: ord_iso_map_fun) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 501 | apply safe | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 502 | apply (subgoal_tac "x:A & ya:A & y:B & yb:B") | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 503 | apply (simp add: apply_equality [OF _ ord_iso_map_fun]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 504 | apply (unfold ord_iso_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 505 | apply (blast intro: well_ord_iso_preserving, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 506 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 507 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 508 | lemma ord_iso_map_ord_iso: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 509 | "[| well_ord(A,r); well_ord(B,s) |] ==> ord_iso_map(A,r,B,s) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 510 | : ord_iso(domain(ord_iso_map(A,r,B,s)), r, | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 511 | range(ord_iso_map(A,r,B,s)), s)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 512 | apply (rule well_ord_mono_ord_isoI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 513 | prefer 4 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 514 | apply (rule converse_ord_iso_map [THEN subst]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 515 | apply (simp add: ord_iso_map_mono_map | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 516 | ord_iso_map_subset [THEN converse_converse]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 517 | apply (blast intro!: domain_ord_iso_map range_ord_iso_map | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 518 | intro: well_ord_subset ord_iso_map_mono_map)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 519 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 520 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 521 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 522 | (*One way of saying that domain(ord_iso_map(A,r,B,s)) is downwards-closed*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 523 | lemma domain_ord_iso_map_subset: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 524 | "[| well_ord(A,r); well_ord(B,s); | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 525 | a: A; a ~: domain(ord_iso_map(A,r,B,s)) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 526 | ==> domain(ord_iso_map(A,r,B,s)) <= pred(A, a, r)" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 527 | apply (unfold ord_iso_map_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 528 | apply (safe intro!: predI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 529 | (*Case analysis on xa vs a in r *) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 530 | apply (simp (no_asm_simp)) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 531 | apply (frule_tac A = A in well_ord_is_linear) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 532 | apply (rename_tac b y f) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 533 | apply (erule_tac x=b and y=a in linearE, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 534 | (*Trivial case: b=a*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 535 | apply clarify | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 536 | apply blast | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 537 | (*Harder case: <a, xa>: r*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 538 | apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 539 | (erule asm_rl predI predE)+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 540 | apply (frule ord_iso_restrict_pred) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 541 | apply (simp add: pred_iff) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 542 | apply (simp split: split_if_asm | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 543 | add: well_ord_is_trans_on trans_pred_pred_eq domain_UN domain_Union, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 544 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 545 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 546 | (*For the 4-way case analysis in the main result*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 547 | lemma domain_ord_iso_map_cases: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 548 | "[| well_ord(A,r); well_ord(B,s) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 549 | ==> domain(ord_iso_map(A,r,B,s)) = A | | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 550 | (EX x:A. domain(ord_iso_map(A,r,B,s)) = pred(A,x,r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 551 | apply (frule well_ord_is_wf) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 552 | apply (unfold wf_on_def wf_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 553 | apply (drule_tac x = "A-domain (ord_iso_map (A,r,B,s))" in spec) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 554 | apply safe | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 555 | (*The first case: the domain equals A*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 556 | apply (rule domain_ord_iso_map [THEN equalityI]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 557 | apply (erule Diff_eq_0_iff [THEN iffD1]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 558 | (*The other case: the domain equals an initial segment*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 559 | apply (blast del: domainI subsetI | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 560 | elim!: predE | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 561 | intro!: domain_ord_iso_map_subset | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 562 | intro: subsetI)+ | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 563 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 564 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 565 | (*As above, by duality*) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 566 | lemma range_ord_iso_map_cases: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 567 | "[| well_ord(A,r); well_ord(B,s) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 568 | ==> range(ord_iso_map(A,r,B,s)) = B | | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 569 | (EX y:B. range(ord_iso_map(A,r,B,s)) = pred(B,y,s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 570 | apply (rule converse_ord_iso_map [THEN subst]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 571 | apply (simp add: domain_ord_iso_map_cases) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 572 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 573 | |
| 13356 | 574 | text{*Kunen's Theorem 6.3: Fundamental Theorem for Well-Ordered Sets*}
 | 
| 575 | theorem well_ord_trichotomy: | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 576 | "[| well_ord(A,r); well_ord(B,s) |] | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 577 | ==> ord_iso_map(A,r,B,s) : ord_iso(A, r, B, s) | | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 578 | (EX x:A. ord_iso_map(A,r,B,s) : ord_iso(pred(A,x,r), r, B, s)) | | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 579 | (EX y:B. ord_iso_map(A,r,B,s) : ord_iso(A, r, pred(B,y,s), s))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 580 | apply (frule_tac B = B in domain_ord_iso_map_cases, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 581 | apply (frule_tac B = B in range_ord_iso_map_cases, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 582 | apply (drule ord_iso_map_ord_iso, assumption) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 583 | apply (elim disjE bexE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 584 | apply (simp_all add: bexI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 585 | apply (rule wf_on_not_refl [THEN notE]) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 586 | apply (erule well_ord_is_wf) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 587 | apply assumption | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 588 | apply (subgoal_tac "<x,y>: ord_iso_map (A,r,B,s) ") | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 589 | apply (drule rangeI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 590 | apply (simp add: pred_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 591 | apply (unfold ord_iso_map_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 592 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 593 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 594 | |
| 13356 | 595 | subsection{*Miscellaneous Results by Krzysztof Grabczewski*}
 | 
| 596 | ||
| 597 | (** Properties of converse(r) **) | |
| 13140 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 598 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 599 | lemma irrefl_converse: "irrefl(A,r) ==> irrefl(A,converse(r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 600 | by (unfold irrefl_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 601 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 602 | lemma trans_on_converse: "trans[A](r) ==> trans[A](converse(r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 603 | by (unfold trans_on_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 604 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 605 | lemma part_ord_converse: "part_ord(A,r) ==> part_ord(A,converse(r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 606 | apply (unfold part_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 607 | apply (blast intro!: irrefl_converse trans_on_converse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 608 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 609 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 610 | lemma linear_converse: "linear(A,r) ==> linear(A,converse(r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 611 | by (unfold linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 612 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 613 | lemma tot_ord_converse: "tot_ord(A,r) ==> tot_ord(A,converse(r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 614 | apply (unfold tot_ord_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 615 | apply (blast intro!: part_ord_converse linear_converse) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 616 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 617 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 618 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 619 | (** By Krzysztof Grabczewski. | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 620 | Lemmas involving the first element of a well ordered set **) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 621 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 622 | lemma first_is_elem: "first(b,B,r) ==> b:B" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 623 | by (unfold first_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 624 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 625 | lemma well_ord_imp_ex1_first: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 626 | "[| well_ord(A,r); B<=A; B~=0 |] ==> (EX! b. first(b,B,r))" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 627 | apply (unfold well_ord_def wf_on_def wf_def first_def) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 628 | apply (elim conjE allE disjE, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 629 | apply (erule bexE) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 630 | apply (rule_tac a = x in ex1I, auto) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 631 | apply (unfold tot_ord_def linear_def, blast) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 632 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 633 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 634 | lemma the_first_in: | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 635 | "[| well_ord(A,r); B<=A; B~=0 |] ==> (THE b. first(b,B,r)) : B" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 636 | apply (drule well_ord_imp_ex1_first, assumption+) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 637 | apply (rule first_is_elem) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 638 | apply (erule theI) | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 639 | done | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 640 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 641 | ML {*
 | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 642 | val pred_def = thm "pred_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 643 | val linear_def = thm "linear_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 644 | val part_ord_def = thm "part_ord_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 645 | val tot_ord_def = thm "tot_ord_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 646 | val well_ord_def = thm "well_ord_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 647 | val ord_iso_def = thm "ord_iso_def" | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 648 | val mono_map_def = thm "mono_map_def"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 649 | |
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 650 | val part_ord_Imp_asym = thm "part_ord_Imp_asym"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 651 | val linearE = thm "linearE"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 652 | val well_ordI = thm "well_ordI"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 653 | val well_ord_is_wf = thm "well_ord_is_wf"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 654 | val well_ord_is_trans_on = thm "well_ord_is_trans_on"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 655 | val well_ord_is_linear = thm "well_ord_is_linear"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 656 | val pred_iff = thm "pred_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 657 | val predI = thm "predI"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 658 | val predE = thm "predE"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 659 | val pred_subset_under = thm "pred_subset_under"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 660 | val pred_subset = thm "pred_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 661 | val pred_pred_eq = thm "pred_pred_eq"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 662 | val trans_pred_pred_eq = thm "trans_pred_pred_eq"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 663 | val part_ord_subset = thm "part_ord_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 664 | val linear_subset = thm "linear_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 665 | val tot_ord_subset = thm "tot_ord_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 666 | val well_ord_subset = thm "well_ord_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 667 | val irrefl_Int_iff = thm "irrefl_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 668 | val trans_on_Int_iff = thm "trans_on_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 669 | val part_ord_Int_iff = thm "part_ord_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 670 | val linear_Int_iff = thm "linear_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 671 | val tot_ord_Int_iff = thm "tot_ord_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 672 | val wf_on_Int_iff = thm "wf_on_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 673 | val well_ord_Int_iff = thm "well_ord_Int_iff"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 674 | val irrefl_0 = thm "irrefl_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 675 | val trans_on_0 = thm "trans_on_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 676 | val part_ord_0 = thm "part_ord_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 677 | val linear_0 = thm "linear_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 678 | val tot_ord_0 = thm "tot_ord_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 679 | val wf_on_0 = thm "wf_on_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 680 | val well_ord_0 = thm "well_ord_0"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 681 | val tot_ord_unit = thm "tot_ord_unit"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 682 | val well_ord_unit = thm "well_ord_unit"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 683 | val mono_map_is_fun = thm "mono_map_is_fun"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 684 | val mono_map_is_inj = thm "mono_map_is_inj"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 685 | val ord_isoI = thm "ord_isoI"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 686 | val ord_iso_is_mono_map = thm "ord_iso_is_mono_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 687 | val ord_iso_is_bij = thm "ord_iso_is_bij"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 688 | val ord_iso_apply = thm "ord_iso_apply"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 689 | val ord_iso_converse = thm "ord_iso_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 690 | val ord_iso_refl = thm "ord_iso_refl"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 691 | val ord_iso_sym = thm "ord_iso_sym"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 692 | val mono_map_trans = thm "mono_map_trans"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 693 | val ord_iso_trans = thm "ord_iso_trans"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 694 | val mono_ord_isoI = thm "mono_ord_isoI"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 695 | val well_ord_mono_ord_isoI = thm "well_ord_mono_ord_isoI"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 696 | val part_ord_ord_iso = thm "part_ord_ord_iso"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 697 | val linear_ord_iso = thm "linear_ord_iso"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 698 | val wf_on_ord_iso = thm "wf_on_ord_iso"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 699 | val well_ord_ord_iso = thm "well_ord_ord_iso"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 700 | val well_ord_iso_predE = thm "well_ord_iso_predE"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 701 | val well_ord_iso_pred_eq = thm "well_ord_iso_pred_eq"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 702 | val ord_iso_image_pred = thm "ord_iso_image_pred"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 703 | val ord_iso_restrict_pred = thm "ord_iso_restrict_pred"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 704 | val well_ord_iso_preserving = thm "well_ord_iso_preserving"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 705 | val well_ord_iso_unique = thm "well_ord_iso_unique"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 706 | val ord_iso_map_subset = thm "ord_iso_map_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 707 | val domain_ord_iso_map = thm "domain_ord_iso_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 708 | val range_ord_iso_map = thm "range_ord_iso_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 709 | val converse_ord_iso_map = thm "converse_ord_iso_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 710 | val function_ord_iso_map = thm "function_ord_iso_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 711 | val ord_iso_map_fun = thm "ord_iso_map_fun"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 712 | val ord_iso_map_mono_map = thm "ord_iso_map_mono_map"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 713 | val ord_iso_map_ord_iso = thm "ord_iso_map_ord_iso"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 714 | val domain_ord_iso_map_subset = thm "domain_ord_iso_map_subset"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 715 | val domain_ord_iso_map_cases = thm "domain_ord_iso_map_cases"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 716 | val range_ord_iso_map_cases = thm "range_ord_iso_map_cases"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 717 | val well_ord_trichotomy = thm "well_ord_trichotomy"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 718 | val irrefl_converse = thm "irrefl_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 719 | val trans_on_converse = thm "trans_on_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 720 | val part_ord_converse = thm "part_ord_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 721 | val linear_converse = thm "linear_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 722 | val tot_ord_converse = thm "tot_ord_converse"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 723 | val first_is_elem = thm "first_is_elem"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 724 | val well_ord_imp_ex1_first = thm "well_ord_imp_ex1_first"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 725 | val the_first_in = thm "the_first_in"; | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 726 | *} | 
| 
6d97dbb189a9
converted Order.ML OrderType.ML OrderArith.ML to Isar format
 paulson parents: 
13119diff
changeset | 727 | |
| 435 | 728 | end |