src/ZF/Order.thy
changeset 13356 c9cfe1638bf2
parent 13339 0f89104dd377
child 13611 2edf034c902a
equal deleted inserted replaced
13355:d19cdbd8b559 13356:c9cfe1638bf2
     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))"