definition
obase :: "[i==>o,i,i] ==> i"where 🍋‹the domain of ‹om›, eventually shown to equal ‹A›\<close> "obase(M,A,r) ≡ {a∈A. ∃x[M]. ∃g[M]. Ord(x) ∧ g ∈ ord_iso(Order.pred(A,a,r),r,x,Memrel(x))}"
definition
omap :: "[i==>o,i,i,i] ==> o"where 🍋‹the function that maps wosets to order types› "omap(M,A,r,f) ≡ ∀z[M]. z ∈ f ⟷ (∃a∈A. ∃x[M]. ∃g[M]. z = ⟨a,x⟩∧ Ord(x) ∧ g ∈ ord_iso(Order.pred(A,a,r),r,x,Memrel(x)))"
text‹Can also be proved with the premise 🍋‹M(z)›instead of 🍋‹M(f)›, but that version is less useful. This lemma is also more useful than the definition, ‹omap_def›.› lemma (in M_ordertype) omap_iff: "[omap(M,A,r,f); M(A); M(f)] ==> z ∈ f ⟷ (∃a∈A. ∃x[M]. ∃g[M]. z = ⟨a,x⟩∧ Ord(x) ∧ g ∈ ord_iso(Order.pred(A,a,r),r,x,Memrel(x)))" apply (simp add: omap_def) apply (rule iffI) apply (drule_tac [2] x=z in rspec) apply (drule_tac x=z in rspec) apply (blast dest: transM)+ done
lemma (in M_ordertype) wellordered_omap_bij: "[wellordered(M,A,r); omap(M,A,r,f); otype(M,A,r,i); M(A); M(r); M(f); M(i)]==> f ∈ bij(obase(M,A,r),i)" apply (insert omap_funtype [of A r f i]) apply (auto simp add: bij_def inj_def) prefer 2 apply (blast intro: fun_is_surj dest: otype_eq_range) apply (frule_tac a=w in apply_Pair, assumption) apply (frule_tac a=x in apply_Pair, assumption) apply (simp add: omap_iff) apply (blast intro: wellordered_iso_pred_eq ord_iso_sym ord_iso_trans) done
text‹This is not the final result: we must show 🍋‹oB(A,r) = A›\› lemma (in M_ordertype) omap_ord_iso: "[wellordered(M,A,r); omap(M,A,r,f); otype(M,A,r,i); M(A); M(r); M(f); M(i)]==> f ∈ ord_iso(obase(M,A,r),r,i,Memrel(i))" apply (rule ord_isoI) apply (erule wellordered_omap_bij, assumption+) apply (insert omap_funtype [of A r f i], simp) apply (frule_tac a=x in apply_Pair, assumption) apply (frule_tac a=y in apply_Pair, assumption) apply (auto simp add: omap_iff) txt‹direction 1: assuming 🍋‹⟨x,y⟩∈ r›\› apply (blast intro: ltD ord_iso_pred_imp_lt) txt‹direction 2: proving 🍋‹⟨x,y⟩∈ r›using linearity of 🍋‹r›\› apply (rename_tac x y g ga) apply (frule wellordered_is_linear, assumption,
erule_tac x=x and y=y in linearE, assumption+) txt‹the case 🍋‹x=y›leads to immediate contradiction› apply (blast elim: mem_irrefl) txt‹the case 🍋‹⟨y,x⟩∈ r›: handle like the opposite direction› apply (blast dest: ord_iso_pred_imp_lt ltD elim: mem_asym) done
lemma (in M_ordertype) Ord_omap_image_pred: "[wellordered(M,A,r); omap(M,A,r,f); otype(M,A,r,i); M(A); M(r); M(f); M(i); b ∈ A]==> Ord(f `` Order.pred(A,b,r))" apply (frule wellordered_is_trans_on, assumption) apply (rule OrdI) prefer 2 apply (simp add: image_iff omap_iff Ord_def, blast) txt‹Hard part is to show that the image is a transitive set.› apply (simp add: Transset_def, clarify) apply (simp add: image_iff pred_iff apply_iff [OF omap_funtype [of A r f i]]) apply (rename_tac c j, clarify) apply (frule omap_funtype [of A r f, THEN apply_funtype], assumption+) apply (subgoal_tac "j ∈ i") prefer 2 apply (blast intro: Ord_trans Ord_otype) apply (subgoal_tac "converse(f) ` j ∈ obase(M,A,r)") prefer 2 apply (blast dest: wellordered_omap_bij [THEN bij_converse_bij, THEN bij_is_fun, THEN apply_funtype]) apply (rule_tac x="converse(f) ` j"in bexI) apply (simp add: right_inverse_bij [OF wellordered_omap_bij]) apply (intro predI conjI) apply (erule_tac b=c in trans_onD) apply (rule ord_iso_converse1 [OF omap_ord_iso [of A r f i]]) apply (auto simp add: obase_def) done
lemma (in M_ordertype) restrict_omap_ord_iso: "[wellordered(M,A,r); omap(M,A,r,f); otype(M,A,r,i); D ⊆ obase(M,A,r); M(A); M(r); M(f); M(i)] ==> restrict(f,D) ∈ (⟨D,r⟩≅⟨f``D, Memrel(f``D)⟩)" apply (frule ord_iso_restrict_image [OF omap_ord_iso [of A r f i]],
assumption+) apply (drule ord_iso_sym [THEN subset_ord_iso_Memrel]) apply (blast dest: subsetD [OF omap_subset]) apply (drule ord_iso_sym, simp) done
text‹(a) The notion of Wellordering is absolute› theorem (in M_ordertype) well_ord_abs [simp]: "[M(A); M(r)]==> wellordered(M,A,r) ⟷ well_ord(A,r)" by (blast intro: well_ord_imp_relativized relativized_imp_well_ord)
text‹(b) Order types are absolute› theorem (in M_ordertype) ordertypes_are_absolute: "[wellordered(M,A,r); f ∈ ord_iso(A, r, i, Memrel(i)); M(A); M(r); M(f); M(i); Ord(i)]==> i = ordertype(A,r)" by (blast intro: Ord_ordertype relativized_imp_well_ord ordertype_ord_iso
Ord_iso_implies_eq ord_iso_sym ord_iso_trans)
subsection‹Ordinal Arithmetic: Two Examples of Recursion›
text‹Note: the remainder of this theory is not needed elsewhere.›
subsubsection‹Ordinal Addition›
(*FIXME: update to use new techniques\<And>*) (*This expresses ordinal addition in the language of ZF. It also provides an abbreviation that can be used in the instance of strong replacement below. Here j is used to define the relation, namely Memrel(succ(j)), while x determines the domain of f.*) definition
is_oadd_fun :: "[i==>o,i,i,i,i] ==> o"where "is_oadd_fun(M,i,j,x,f) ≡ (∀sj msj. M(sj) ⟶ M(msj) ⟶ successor(M,j,sj) ⟶ membership(M,sj,msj) ⟶ M_is_recfun(M, λx g y. ∃gx[M]. image(M,g,x,gx) ∧ union(M,i,gx,y), msj, x, f))"
locale M_ord_arith = M_ordertype + assumes oadd_strong_replacement: "[M(i); M(j)]==> strong_replacement(M, λx z. ∃y[M]. pair(M,x,y,z) ∧ (∃f[M]. ∃fx[M]. is_oadd_fun(M,i,j,x,f) ∧ image(M,f,x,fx) ∧ y = i ∪ fx))"
and omult_strong_replacement': "[M(i); M(j)]==> strong_replacement(M, λx z. ∃y[M]. z = ⟨x,y⟩∧ (∃g[M]. is_recfun(Memrel(succ(j)),x,λx g. THE z. omult_eqns(i,x,g,z),g) ∧ y = (THE z. omult_eqns(i, x, g, z))))"
text‹‹is_oadd_fun›: Relating the pure "language of set theory"to Isabelle/ZF› lemma (in M_ord_arith) is_oadd_fun_iff: "[a≤j; M(i); M(j); M(a); M(f)] ==> is_oadd_fun(M,i,j,a,f) ⟷ f ∈ a → range(f) ∧ (∀x. M(x) ⟶ x < a ⟶ f`x = i ∪ f``x)" apply (frule lt_Ord) apply (simp add: is_oadd_fun_def
relation2_def is_recfun_abs [of "λx g. i ∪ g``x"]
is_recfun_iff_equation
Ball_def lt_trans [OF ltI, of _ a] lt_Memrel) apply (simp add: lt_def) apply (blast dest: transM) done
lemma (in M_ord_arith) oadd_strong_replacement': "[M(i); M(j)]==> strong_replacement(M, λx z. ∃y[M]. z = ⟨x,y⟩∧ (∃g[M]. is_recfun(Memrel(succ(j)),x,λx g. i ∪ g``x,g) ∧ y = i ∪ g``x))" apply (insert oadd_strong_replacement [of i j]) apply (simp add: is_oadd_fun_def relation2_def
is_recfun_abs [of "λx g. i ∪ g``x"]) done
lemma (in M_ord_arith) exists_oadd: "[Ord(j); M(i); M(j)] ==>∃f[M]. is_recfun(Memrel(succ(j)), j, λx g. i ∪ g``x, f)" apply (rule wf_exists_is_recfun [OF wf_Memrel trans_Memrel]) apply (simp_all add: Memrel_type oadd_strong_replacement') done
subsection‹Absoluteness of Well-Founded Relations›
text‹Relativized to 🍋‹M›: Every well-founded relation is a subset of some
inverse image of an ordinal. Key step is the construction (in🍋‹M›) of a
rank function.›
locale M_wfrank = M_trancl + assumes wfrank_separation: "M(r) ==> separation (M, λx. ∀rplus[M]. tran_closure(M,r,rplus) ⟶ ¬ (∃f[M]. M_is_recfun(M, λx f y. is_range(M,f,y), rplus, x, f)))" and wfrank_strong_replacement: "M(r) ==> strong_replacement(M, λx z. ∀rplus[M]. tran_closure(M,r,rplus) ⟶ (∃y[M]. ∃f[M]. pair(M,x,y,z) ∧ M_is_recfun(M, λx f y. is_range(M,f,y), rplus, x, f) ∧ is_range(M,f,y)))" and Ord_wfrank_separation: "M(r) ==> separation (M, λx. ∀rplus[M]. tran_closure(M,r,rplus) ⟶ ¬ (∀f[M]. ∀rangef[M]. is_range(M,f,rangef) ⟶ M_is_recfun(M, λx f y. is_range(M,f,y), rplus, x, f) ⟶ ordinal(M,rangef)))"
text‹Proving that the relativized instances of Separation or Replacement agree with the "real" ones.›
text‹This function, defined using replacement, is a rank function for well-founded relations within the class M.› definition
wellfoundedrank :: "[i==>o,i,i] ==> i"where "wellfoundedrank(M,r,A) ≡ {p. x∈A, ∃y[M]. ∃f[M]. p = ⟨x,y⟩∧ is_recfun(r^+, x, λx f. range(f), f) ∧ y = range(f)}"
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 und die Messung sind noch experimentell.