1 (* Title: ZF/Order.thy |
1 (* Title: ZF/Order.thy |
2 ID: $Id$ |
2 ID: $Id$ |
3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
4 Copyright 1994 University of Cambridge |
4 Copyright 1994 University of Cambridge |
5 |
5 |
6 Orders in Zermelo-Fraenkel Set Theory |
|
7 |
|
8 Results from the book "Set Theory: an Introduction to Independence Proofs" |
6 Results from the book "Set Theory: an Introduction to Independence Proofs" |
9 by Kenneth Kunen. Chapter 1, section 6. |
7 by Kenneth Kunen. Chapter 1, section 6. |
10 *) |
8 *) |
11 |
9 |
|
10 header{*Partial and Total Orderings: Basic Definitions and Properties*} |
|
11 |
12 theory Order = WF + Perm: |
12 theory Order = WF + Perm: |
13 |
13 |
14 constdefs |
14 constdefs |
15 |
15 |
16 part_ord :: "[i,i]=>o" (*Strict partial ordering*) |
16 part_ord :: "[i,i]=>o" (*Strict partial ordering*) |
46 |
46 |
47 syntax (xsymbols) |
47 syntax (xsymbols) |
48 ord_iso :: "[i,i,i,i]=>i" ("(\<langle>_, _\<rangle> \<cong>/ \<langle>_, _\<rangle>)" 51) |
48 ord_iso :: "[i,i,i,i]=>i" ("(\<langle>_, _\<rangle> \<cong>/ \<langle>_, _\<rangle>)" 51) |
49 |
49 |
50 |
50 |
51 (** Basic properties of the definitions **) |
51 subsection{*Immediate Consequences of the Definitions*} |
52 |
52 |
53 (*needed?*) |
|
54 lemma part_ord_Imp_asym: |
53 lemma part_ord_Imp_asym: |
55 "part_ord(A,r) ==> asym(r Int A*A)" |
54 "part_ord(A,r) ==> asym(r Int A*A)" |
56 by (unfold part_ord_def irrefl_def trans_on_def asym_def, blast) |
55 by (unfold part_ord_def irrefl_def trans_on_def asym_def, blast) |
57 |
56 |
58 lemma linearE: |
57 lemma linearE: |
107 "[| trans[A](r); <y,x>:r; x:A; y:A |] |
106 "[| trans[A](r); <y,x>:r; x:A; y:A |] |
108 ==> pred(pred(A,x,r), y, r) = pred(A,y,r)" |
107 ==> pred(pred(A,x,r), y, r) = pred(A,y,r)" |
109 by (unfold trans_on_def pred_def, blast) |
108 by (unfold trans_on_def pred_def, blast) |
110 |
109 |
111 |
110 |
|
111 subsection{*Restricting an Ordering's Domain*} |
|
112 |
112 (** The ordering's properties hold over all subsets of its domain |
113 (** The ordering's properties hold over all subsets of its domain |
113 [including initial segments of the form pred(A,x,r) **) |
114 [including initial segments of the form pred(A,x,r) **) |
114 |
115 |
115 (*Note: a relation s such that s<=r need not be a partial ordering*) |
116 (*Note: a relation s such that s<=r need not be a partial ordering*) |
116 lemma part_ord_subset: |
117 lemma part_ord_subset: |
163 apply (unfold well_ord_def) |
164 apply (unfold well_ord_def) |
164 apply (simp add: tot_ord_Int_iff wf_on_Int_iff) |
165 apply (simp add: tot_ord_Int_iff wf_on_Int_iff) |
165 done |
166 done |
166 |
167 |
167 |
168 |
|
169 subsection{*Empty and Unit Domains*} |
|
170 |
168 (** Relations over the Empty Set **) |
171 (** Relations over the Empty Set **) |
169 |
172 |
170 lemma irrefl_0: "irrefl(0,r)" |
173 lemma irrefl_0: "irrefl(0,r)" |
171 by (unfold irrefl_def, blast) |
174 by (unfold irrefl_def, blast) |
172 |
175 |
206 lemma well_ord_unit: "well_ord({a},0)" |
209 lemma well_ord_unit: "well_ord({a},0)" |
207 apply (unfold well_ord_def) |
210 apply (unfold well_ord_def) |
208 apply (simp add: tot_ord_unit wf_on_unit) |
211 apply (simp add: tot_ord_unit wf_on_unit) |
209 done |
212 done |
210 |
213 |
|
214 |
|
215 subsection{*Order-Isomorphisms*} |
|
216 |
|
217 text{*Suppes calls them "similarities"*} |
211 |
218 |
212 (** Order-preserving (monotone) maps **) |
219 (** Order-preserving (monotone) maps **) |
213 |
220 |
214 lemma mono_map_is_fun: "f: mono_map(A,r,B,s) ==> f: A->B" |
221 lemma mono_map_is_fun: "f: mono_map(A,r,B,s) ==> f: A->B" |
215 by (simp add: mono_map_def) |
222 by (simp add: mono_map_def) |
218 "[| linear(A,r); wf[B](s); f: mono_map(A,r,B,s) |] ==> f: inj(A,B)" |
225 "[| linear(A,r); wf[B](s); f: mono_map(A,r,B,s) |] ==> f: inj(A,B)" |
219 apply (unfold mono_map_def inj_def, clarify) |
226 apply (unfold mono_map_def inj_def, clarify) |
220 apply (erule_tac x=w and y=x in linearE, assumption+) |
227 apply (erule_tac x=w and y=x in linearE, assumption+) |
221 apply (force intro: apply_type dest: wf_on_not_refl)+ |
228 apply (force intro: apply_type dest: wf_on_not_refl)+ |
222 done |
229 done |
223 |
|
224 |
|
225 (** Order-isomorphisms -- or similarities, as Suppes calls them **) |
|
226 |
230 |
227 lemma ord_isoI: |
231 lemma ord_isoI: |
228 "[| f: bij(A, B); |
232 "[| f: bij(A, B); |
229 !!x y. [| x:A; y:A |] ==> <x, y> : r <-> <f`x, f`y> : s |] |
233 !!x y. [| x:A; y:A |] ==> <x, y> : r <-> <f`x, f`y> : s |] |
230 ==> f: ord_iso(A,r,B,s)" |
234 ==> f: ord_iso(A,r,B,s)" |
340 apply (unfold well_ord_def tot_ord_def) |
344 apply (unfold well_ord_def tot_ord_def) |
341 apply (fast elim!: part_ord_ord_iso linear_ord_iso wf_on_ord_iso) |
345 apply (fast elim!: part_ord_ord_iso linear_ord_iso wf_on_ord_iso) |
342 done |
346 done |
343 |
347 |
344 |
348 |
345 (*** Main results of Kunen, Chapter 1 section 6 ***) |
349 subsection{*Main results of Kunen, Chapter 1 section 6*} |
346 |
350 |
347 (*Inductive argument for Kunen's Lemma 6.1, etc. |
351 (*Inductive argument for Kunen's Lemma 6.1, etc. |
348 Simple proof from Halmos, page 72*) |
352 Simple proof from Halmos, page 72*) |
349 lemma well_ord_iso_subset_lemma: |
353 lemma well_ord_iso_subset_lemma: |
350 "[| well_ord(A,r); f: ord_iso(A,r, A',r); A'<= A; y: A |] |
354 "[| well_ord(A,r); f: ord_iso(A,r, A',r); A'<= A; y: A |] |
454 apply (blast dest: well_ord_iso_unique_lemma) |
458 apply (blast dest: well_ord_iso_unique_lemma) |
455 apply (blast intro: ord_iso_is_bij bij_is_fun apply_funtype |
459 apply (blast intro: ord_iso_is_bij bij_is_fun apply_funtype |
456 well_ord_is_linear well_ord_ord_iso ord_iso_sym) |
460 well_ord_is_linear well_ord_ord_iso ord_iso_sym) |
457 done |
461 done |
458 |
462 |
459 (** Towards Kunen's Theorem 6.3: linearity of the similarity relation **) |
463 subsection{*Towards Kunen's Theorem 6.3: Linearity of the Similarity Relation*} |
460 |
464 |
461 lemma ord_iso_map_subset: "ord_iso_map(A,r,B,s) <= A*B" |
465 lemma ord_iso_map_subset: "ord_iso_map(A,r,B,s) <= A*B" |
462 by (unfold ord_iso_map_def, blast) |
466 by (unfold ord_iso_map_def, blast) |
463 |
467 |
464 lemma domain_ord_iso_map: "domain(ord_iso_map(A,r,B,s)) <= A" |
468 lemma domain_ord_iso_map: "domain(ord_iso_map(A,r,B,s)) <= A" |
562 (EX y:B. range(ord_iso_map(A,r,B,s)) = pred(B,y,s))" |
566 (EX y:B. range(ord_iso_map(A,r,B,s)) = pred(B,y,s))" |
563 apply (rule converse_ord_iso_map [THEN subst]) |
567 apply (rule converse_ord_iso_map [THEN subst]) |
564 apply (simp add: domain_ord_iso_map_cases) |
568 apply (simp add: domain_ord_iso_map_cases) |
565 done |
569 done |
566 |
570 |
567 (*Kunen's Theorem 6.3: Fundamental Theorem for Well-Ordered Sets*) |
571 text{*Kunen's Theorem 6.3: Fundamental Theorem for Well-Ordered Sets*} |
568 lemma well_ord_trichotomy: |
572 theorem well_ord_trichotomy: |
569 "[| well_ord(A,r); well_ord(B,s) |] |
573 "[| well_ord(A,r); well_ord(B,s) |] |
570 ==> ord_iso_map(A,r,B,s) : ord_iso(A, r, B, s) | |
574 ==> ord_iso_map(A,r,B,s) : ord_iso(A, r, B, s) | |
571 (EX x:A. ord_iso_map(A,r,B,s) : ord_iso(pred(A,x,r), r, B, s)) | |
575 (EX x:A. ord_iso_map(A,r,B,s) : ord_iso(pred(A,x,r), r, B, s)) | |
572 (EX y:B. ord_iso_map(A,r,B,s) : ord_iso(A, r, pred(B,y,s), s))" |
576 (EX y:B. ord_iso_map(A,r,B,s) : ord_iso(A, r, pred(B,y,s), s))" |
573 apply (frule_tac B = B in domain_ord_iso_map_cases, assumption) |
577 apply (frule_tac B = B in domain_ord_iso_map_cases, assumption) |
583 apply (simp add: pred_def) |
587 apply (simp add: pred_def) |
584 apply (unfold ord_iso_map_def, blast) |
588 apply (unfold ord_iso_map_def, blast) |
585 done |
589 done |
586 |
590 |
587 |
591 |
588 (*** Properties of converse(r), by Krzysztof Grabczewski ***) |
592 subsection{*Miscellaneous Results by Krzysztof Grabczewski*} |
|
593 |
|
594 (** Properties of converse(r) **) |
589 |
595 |
590 lemma irrefl_converse: "irrefl(A,r) ==> irrefl(A,converse(r))" |
596 lemma irrefl_converse: "irrefl(A,r) ==> irrefl(A,converse(r))" |
591 by (unfold irrefl_def, blast) |
597 by (unfold irrefl_def, blast) |
592 |
598 |
593 lemma trans_on_converse: "trans[A](r) ==> trans[A](converse(r))" |
599 lemma trans_on_converse: "trans[A](r) ==> trans[A](converse(r))" |