(* Title: ZF/Order.thy Author: Lawrence C Paulson, Cambridge University Computer Laboratory Copyright 1994 University of Cambridge
Results from the book "Set Theory: an Introduction to Independence Proofs" by Kenneth Kunen. Chapter 1, section 6. Additional definitions and lemmas for reflexive orders.
*)
section\<open>Partial and Total Orderings: Basic Definitions and Properties\<close>
theory Order imports WF Perm begin
text\<open>We adopt the following convention: \<open>ord\<close> is used for
strict orders and\<open>order\<close> is used for their reflexive
counterparts.\<close>
lemma pred_subset_under: "pred(A,x,r) \ r -`` {x}" by (simp add: pred_def, blast)
lemma pred_subset: "pred(A,x,r) \ A" by (simp add: pred_def, blast)
lemma pred_pred_eq: "pred(pred(A,x,r), y, r) = pred(A,x,r) \ pred(A,y,r)" by (simp add: pred_def, blast)
lemma trans_pred_pred_eq: "\trans[A](r); \y,x\:r; x \ A; y \ A\ \<Longrightarrow> pred(pred(A,x,r), y, r) = pred(A,y,r)" by (unfold trans_on_def pred_def, blast)
subsection\<open>Restricting an Ordering's Domain\<close>
(** The ordering's properties hold over all subsets of its domain
[including initial segments of the form pred(A,x,r) **)
(*Note: a relation s such that s<=r need not be a partial ordering*) lemma part_ord_subset: "\part_ord(A,r); B<=A\ \ part_ord(B,r)" by (unfold part_ord_def irrefl_def trans_on_def, blast)
lemma linear_subset: "\linear(A,r); B<=A\ \ linear(B,r)" by (unfold linear_def, blast)
subsection\<open>Main results of Kunen, Chapter 1 section 6\<close>
(*Inductive argument for Kunen's Lemma 6.1, etc.
Simple proof from Halmos, page 72*) lemma well_ord_iso_subset_lemma: "\well_ord(A,r); f \ ord_iso(A,r, A',r); A'<= A; y \ A\ \<Longrightarrow> \<not> <f`y, y>: r" apply (simp add: well_ord_def ord_iso_def) apply (elim conjE CollectE) apply (rule_tac a=y in wf_on_induct, assumption+) apply (blast dest: bij_is_fun [THEN apply_type]) done
(*Kunen's Lemma 6.1 \<in> there's no order-isomorphism to an initial segment
of a well-ordering*) lemma well_ord_iso_predE: "\well_ord(A,r); f \ ord_iso(A, r, pred(A,x,r), r); x \ A\ \ P" apply (insert well_ord_iso_subset_lemma [of A r f "pred(A,x,r)" x]) apply (simp add: pred_subset) (*Now we know f`x < x *) apply (drule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], assumption) (*Now we also know @{term"f`x \<in> pred(A,x,r)"}: contradiction! *) apply (simp add: well_ord_def pred_def) done
(*Simple consequence of Lemma 6.1*) lemma well_ord_iso_pred_eq: "\well_ord(A,r); f \ ord_iso(pred(A,a,r), r, pred(A,c,r), r);
a \<in> A; c \<in> A\<rbrakk> \<Longrightarrow> a=c" apply (frule well_ord_is_trans_on) apply (frule well_ord_is_linear) apply (erule_tac x=a and y=c in linearE, assumption+) apply (drule ord_iso_sym) (*two symmetric cases*) apply (auto elim!: well_ord_subset [OF _ pred_subset, THEN well_ord_iso_predE]
intro!: predI
simp add: trans_pred_pred_eq) done
(*But in use, A and B may themselves be initial segments. Then use
trans_pred_pred_eq to simplify the pred(pred...) terms. See just below.*) lemma ord_iso_restrict_pred: "\f \ ord_iso(A,r,B,s); a \ A\ \<Longrightarrow> restrict(f, pred(A,a,r)) \<in> ord_iso(pred(A,a,r), r, pred(B, f`a, s), s)" apply (simp add: ord_iso_image_pred [symmetric]) apply (blast intro: ord_iso_restrict_image elim: predE) done
(*Tricky; a lot of forward proof!*) lemma well_ord_iso_preserving: "\well_ord(A,r); well_ord(B,s); \a,c\: r;
f \<in> ord_iso(pred(A,a,r), r, pred(B,b,s), s);
g \<in> ord_iso(pred(A,c,r), r, pred(B,d,s), s);
a \<in> A; c \<in> A; b \<in> B; d \<in> B\<rbrakk> \<Longrightarrow> \<langle>b,d\<rangle>: s" apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type], (erule asm_rl predI predE)+) apply (subgoal_tac "b = g`a") apply (simp (no_asm_simp)) apply (rule well_ord_iso_pred_eq, auto) apply (frule ord_iso_restrict_pred, (erule asm_rl predI)+) apply (simp add: well_ord_is_trans_on trans_pred_pred_eq) apply (erule ord_iso_sym [THEN ord_iso_trans], assumption) done
(*See Halmos, page 72*) lemma well_ord_iso_unique_lemma: "\well_ord(A,r);
f \<in> ord_iso(A,r, B,s); g \<in> ord_iso(A,r, B,s); y \<in> A\<rbrakk> \<Longrightarrow> \<not> <g`y, f`y> \<in> s" apply (frule well_ord_iso_subset_lemma) apply (rule_tac f = "converse (f) "and g = g in ord_iso_trans) apply auto apply (blast intro: ord_iso_sym) apply (frule ord_iso_is_bij [of f]) apply (frule ord_iso_is_bij [of g]) apply (frule ord_iso_converse) apply (blast intro!: bij_converse_bij
intro: bij_is_fun apply_funtype)+ apply (erule notE) apply (simp add: left_inverse_bij bij_is_fun comp_fun_apply [of _ A B]) done
(*Kunen's Lemma 6.2: Order-isomorphisms between well-orderings are unique*) lemma well_ord_iso_unique: "\well_ord(A,r);
f \<in> ord_iso(A,r, B,s); g \<in> ord_iso(A,r, B,s)\<rbrakk> \<Longrightarrow> f = g" apply (rule fun_extension) apply (erule ord_iso_is_bij [THEN bij_is_fun])+ apply (subgoal_tac "f`x \ B \ g`x \ B \ linear(B,s)") apply (simp add: linear_def) apply (blast dest: well_ord_iso_unique_lemma) apply (blast intro: ord_iso_is_bij bij_is_fun apply_funtype
well_ord_is_linear well_ord_ord_iso ord_iso_sym) done
subsection\<open>Towards Kunen's Theorem 6.3: Linearity of the Similarity Relation\<close>
lemma ord_iso_map_subset: "ord_iso_map(A,r,B,s) \ A*B" by (unfold ord_iso_map_def, blast)
lemma domain_ord_iso_map: "domain(ord_iso_map(A,r,B,s)) \ A" by (unfold ord_iso_map_def, blast)
lemma range_ord_iso_map: "range(ord_iso_map(A,r,B,s)) \ B" by (unfold ord_iso_map_def, blast)
(*One way of saying that domain(ord_iso_map(A,r,B,s)) is downwards-closed*) lemma domain_ord_iso_map_subset: "\well_ord(A,r); well_ord(B,s);
a \<in> A; a \<notin> domain(ord_iso_map(A,r,B,s))\<rbrakk> \<Longrightarrow> domain(ord_iso_map(A,r,B,s)) \<subseteq> pred(A, a, r)" unfolding ord_iso_map_def apply (safe intro!: predI) (*Case analysis on xa vs a in r *) apply (simp (no_asm_simp)) apply (frule_tac A = A in well_ord_is_linear) apply (rename_tac b y f) apply (erule_tac x=b and y=a in linearE, assumption+) (*Trivial case: b=a*) apply clarify apply blast (*Harder case: \<langle>a, xa\<rangle>: r*) apply (frule ord_iso_is_bij [THEN bij_is_fun, THEN apply_type],
(erule asm_rl predI predE)+) apply (frule ord_iso_restrict_pred) apply (simp add: pred_iff) apply (simp split: split_if_asm
add: well_ord_is_trans_on trans_pred_pred_eq domain_UN domain_Union, blast) done
(*For the 4-way case analysis in the main result*) lemma domain_ord_iso_map_cases: "\well_ord(A,r); well_ord(B,s)\ \<Longrightarrow> domain(ord_iso_map(A,r,B,s)) = A |
(\<exists>x\<in>A. domain(ord_iso_map(A,r,B,s)) = pred(A,x,r))" apply (frule well_ord_is_wf) unfolding wf_on_def wf_def apply (drule_tac x = "A-domain (ord_iso_map (A,r,B,s))"in spec) apply safe (*The first case: the domain equals A*) apply (rule domain_ord_iso_map [THEN equalityI]) apply (erule Diff_eq_0_iff [THEN iffD1]) (*The other case: the domain equals an initial segment*) apply (blast del: domainI subsetI
elim!: predE
intro!: domain_ord_iso_map_subset
intro: subsetI)+ done
subsection \<open>Lemmas for the Reflexive Orders\<close>
lemma subset_vimage_vimage_iff: "\Preorder(r); A \ field(r); B \ field(r)\ \
r -`` A \<subseteq> r -`` B \<longleftrightarrow> (\<forall>a\<in>A. \<exists>b\<in>B. \<langle>a, b\<rangle> \<in> r)" apply (auto simp: subset_def preorder_on_def refl_def vimage_def image_def) apply blast unfolding trans_on_def apply (erule_tac P = "(\x. \y\field(r). \<forall>z\<in>field(r). \<langle>x, y\<rangle> \<in> r \<longrightarrow> \<langle>y, z\<rangle> \<in> r \<longrightarrow> \<langle>x, z\<rangle> \<in> r)" for r in rev_ballE) (* instance obtained from proof term generated by best *) apply best apply blast done
lemma subset_vimage1_vimage1_iff: "\Preorder(r); a \ field(r); b \ field(r)\ \
r -`` {a} \<subseteq> r -`` {b} \<longleftrightarrow> \<langle>a, b\<rangle> \<in> r" by (simp add: subset_vimage_vimage_iff)
lemma Refl_antisym_eq_Image1_Image1_iff: "\refl(field(r), r); antisym(r); a \ field(r); b \ field(r)\ \
r `` {a} = r `` {b} \<longleftrightarrow> a = b" apply rule apply (frule equality_iffD) apply (drule equality_iffD) apply (simp add: antisym_def refl_def) apply best apply (simp add: antisym_def refl_def) done
lemma Partial_order_eq_Image1_Image1_iff: "\Partial_order(r); a \ field(r); b \ field(r)\ \
r `` {a} = r `` {b} \<longleftrightarrow> a = b" by (simp add: partial_order_on_def preorder_on_def
Refl_antisym_eq_Image1_Image1_iff)
lemma Refl_antisym_eq_vimage1_vimage1_iff: "\refl(field(r), r); antisym(r); a \ field(r); b \ field(r)\ \
r -`` {a} = r -`` {b} \<longleftrightarrow> a = b" apply rule apply (frule equality_iffD) apply (drule equality_iffD) apply (simp add: antisym_def refl_def) apply best apply (simp add: antisym_def refl_def) done
lemma Partial_order_eq_vimage1_vimage1_iff: "\Partial_order(r); a \ field(r); b \ field(r)\ \
r -`` {a} = r -`` {b} \<longleftrightarrow> a = b" by (simp add: partial_order_on_def preorder_on_def
Refl_antisym_eq_vimage1_vimage1_iff)
end
¤ Dauer der Verarbeitung: 0.24 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.