definition
ord0_prec :: "(ord0 × ord0) set"where "ord0_prec = (∪f i. {(f i, ord0_Lim f)})"
lemma wf_ord0_prec: "wf ord0_prec" proof - have"∀x. (∀y. (y, x) ∈ ord0_prec ⟶ P y) ⟶ P x ==> P a"for P a unfolding ord0_prec_def by (induction a) blast+ thenshow ?thesis by (metis wfUNIVI) qed
lemma ord0_leq_trans: "(x,y) ∈ ord0_leq ==> (y,z) ∈ ord0_leq ==> (x,z) ∈ ord0_leq" proof (induction x arbitrary: y z rule: ord0_prec_induct) case (1 x) thenshow ?case by (meson ord0_leq.cases ord0_leq.intros) qed
lemma wf_ord0_leq: "wf (ord0_leq O ord0_prec+)" unfolding wf_def proof clarify fix P x assume *: "∀x. (∀y. (y, x) ∈ ord0_leq O ord0_prec+⟶ P y) ⟶ P x" have"∀z. (z, x) ∈ ord0_leq ⟶ P z" by (rule ord0_prec_induct) (meson * ord0_leq.cases ord0_leq_trans relcomp.cases) thenshow"P x" by (simp add: ord0_leq_refl) qed
text‹ordering on ord0›
instantiation ord0 :: ord begin
definition
ord0_less_def: "x < y ⟷ (x,y) ∈ ord0_leq O ord0_prec+"
definition
ord0_le_def: "x ≤ y ⟷ (x,y) ∈ ord0_leq"
instance ..
end
lemma ord0_order_refl[simp]: "(x::ord0) ≤ x" by (simp add: ord0_le_def ord0_leq_refl)
lemma ord0_order_trans: "[(x::ord0) ≤ y; y ≤ z]==> x ≤ z" using ord0_le_def ord0_leq_trans by blast
lemma ord0_wf: "wf {(x,y::ord0). x < y}" using ord0_less_def wf_ord0_leq by auto
lemmas ord0_less_induct = wf_induct[OF ord0_wf]
lemma ord0_leI: "[∀a::ord0. a < x ⟶ a < y]==> x ≤ y" by (meson ord0_le_def ord0_leqD ord0_leqI ord0_leq_refl ord0_less_def)
lemma ord0_less_le_trans: "[(x::ord0) < y; y ≤ z]==> x < z" by (meson ord0_le_def ord0_leq.cases ord0_leq_trans ord0_less_def relcomp.intros relcompEpair)
lemma ord0_le_less_trans: "[(x::ord0) ≤ y; y < z]==> x < z" by (meson ord0_le_def ord0_leq_trans ord0_less_def relcomp.cases relcomp.intros)
lemma rev_ord0_le_less_trans: "[(y::ord0) < z; x ≤ y]==> x < z" by (rule ord0_le_less_trans)
lemma ord0_less_trans: "[(x::ord0) < y; y < z]==> x < z" unfolding ord0_less_def by (meson ord0_leq.cases relcomp.cases relcompI[OF ord0_leq_trans trancl_trans])
lemma ord0_less_imp_le: "(x::ord0) < y ==> x ≤ y" using ord0_leI ord0_less_trans by blast
lemma ord0_linear_lemma: fixes m :: ord0 and n :: ord0 shows"m < n ∨ n < m ∨ (m ≤ n ∧ n ≤ m)" proof - have"m < n ∨ n < m ∨ m ≤ n ∧ n ≤ m"for m proof (induction n arbitrary: m rule: ord0_less_induct) case (1 n) have"∀y. (y, n) ∈ {(x, y). x < y} ⟶ (∀x. x < y ∨ y < x ∨ x ≤ y ∧ y ≤ x) ==> m < n ∨ n < m ∨ m ≤ n ∧ n ≤ m" proof (induction m rule: ord0_less_induct) case (1 x) thenshow ?case by (smt (verit, best) mem_Collect_eq old.prod.case ord0_leI ord0_le_less_trans ord0_less_imp_le) qed thenshow ?case using"1"by blast qed thenshow ?thesis by simp qed
lemma ord0_linear: "(x::ord0) ≤ y ∨ y ≤ x" using ord0_less_imp_le ord0_linear_lemma by blast
lemma ord0_order_less_le: "(x::ord0) < y ⟷ (x ≤ y ∧¬ y ≤ x)" (is"?L=?R") proof show"?L ==> ?R" by (metis ord0_less_def ord0_less_imp_le ord0_less_le_trans wf_not_refl wf_ord0_leq) show"?R ==> ?L" using ord0_less_imp_le ord0_linear_lemma by blast qed
subsection‹Ordinal type›
definition
ord0rel :: "(ord0 × ord0) set"where "ord0rel = {(x,y). x ≤ y ∧ y ≤ x}"
lemma Abs_ordinal_le[simp]: "Abs_ordinal (ord0rel `` {x}) ≤ Abs_ordinal (ord0rel `` {y}) ⟷ (x ≤ y)" (is"?L=?R") proof show"?L ==> ?R" using Rep_Abs_ord0rel ordinal_le_def by blast next assume ?R thenhave"∧a b. [(x, a) ∈ ord0rel; (y, b) ∈ ord0rel]==> a ≤ b" unfolding ord0rel_def by (blast intro: ord0_order_trans) thenshow ?L by (auto simp add: ordinal_le_def) qed
lemma Abs_ordinal_less[simp]: "Abs_ordinal (ord0rel `` {x}) < Abs_ordinal (ord0rel `` {y}) ⟷ (x < y)" (is"?L=?R") proof show"?L ==> ?R" using Rep_Abs_ord0rel ordinal_less_def by blast next assume ?R thenhave"∧a b. [(x, a) ∈ ord0rel; (y, b) ∈ ord0rel]==> a < b" unfolding ord0rel_def by (blast intro: ord0_le_less_trans ord0_less_le_trans) thenshow ?L by (auto simp add: ordinal_less_def) qed
instance ordinal :: linorder proof show"(x::ordinal) ≤ x"for x by (cases x, simp) show"((x::ordinal) < y) = (x ≤ y ∧¬ y ≤ x)"for x y by (cases x, cases y, auto simp add: ord0_order_less_le) show"(x::ordinal) ≤ y ==> y ≤ z ==> x ≤ z"for x y z by (cases x, cases y, cases z, auto elim: ord0_order_trans) show"(x::ordinal) ≤ y ==> y ≤ x ==> x = y"for x y by (cases x, cases y, simp) show"(x::ordinal) ≤ y ∨ y ≤ x"for x y by (cases x, cases y, simp add: ord0_linear) qed
instance ordinal :: wellorder proof show"P a"if"(∧x::ordinal. (∧y. y < x ==> P y) ==> P x)"for P a proof (rule Abs_ordinal_cases2) fix z assume a: "a = Abs_ordinal (ord0rel `` {z})" have"P (Abs_ordinal (ord0rel `` {z}))" using that apply (rule ord0_less_induct) by (metis Abs_ordinal_cases2 Abs_ordinal_less CollectI case_prodI) with a show"P a"by simp qed qed
lemma ordinal_linear: "(x::ordinal) ≤ y ∨ y ≤ x" by auto
lemma ordinal_wf: "wf {(x,y::ordinal). x < y}" by (simp add: wf)
definition
oStrictLimit :: "(nat ==> ordinal) ==> ordinal"where "oStrictLimit f = Abs_ordinal (ord0rel `` {ord0_Lim (λn. SOME x. x ∈ Rep_ordinal (f n))})"
text"induction over ordinals"
lemma ord0relD: "(x,y) ∈ ord0rel ==> x ≤ y ∧ y ≤ x" by (simp add: ord0rel_def)
lemma ord0_precD: "(x,y) ∈ ord0_prec ==>∃f n. x = f n ∧ y = ord0_Lim f" by (simp add: ord0_prec_def)
lemma less_ord0_LimI: "f n < ord0_Lim f" using ord0_leq_refl ord0_less_def ord0_prec_def by fastforce
lemma less_ord0_LimD: assumes"x < ord0_Lim f"shows"∃n. x ≤ f n" proof - obtain y where"x≤y""y < ord0_Lim f" using assms ord0_linear by auto then consider "(y, ord0_Lim f) ∈ ord0_prec" | z where"y ≤ z""(z, ord0_Lim f) ∈ ord0_prec" apply (clarsimp simp add: ord0_less_def ord0_le_def) by (metis ord0_less_def ord0_less_imp_le relcomp.relcompI that(2) tranclE) thenshow ?thesis by (metis ‹x ≤ y› ord0.inject ord0_order_trans ord0_precD) qed
lemma some_ord0rel: "(x, SOME y. (x,y) ∈ ord0rel) ∈ ord0rel" by (rule_tac x=x in someI, simp add: ord0rel_def)
lemma ord0_Lim_le: "∀n. f n ≤ g n ==> ord0_Lim f ≤ ord0_Lim g" by (metis less_ord0_LimD less_ord0_LimI ord0_le_less_trans ord0_linear ord0_order_less_le)
lemma ord0_Lim_ord0rel: "∀n. (f n, g n) ∈ ord0rel ==> (ord0_Lim f, ord0_Lim g) ∈ ord0rel" by (simp add: ord0rel_def ord0_Lim_le)
lemma oStrictLimit_induct: assumes base: "P oZero" assumes step: "∧f. ∀n. P (f n) ==> P (oStrictLimit f)" shows"P a" proof - obtain z where z: "a = Abs_ordinal (ord0rel `` {z})" using Abs_ordinal_cases2 by auto have"P (Abs_ordinal (ord0rel `` {z}))" proof (induction z) case ord0_Zero with base oZero_def show ?caseby auto next case (ord0_Lim x) thenshow ?case by (simp add: Abs_ordinal_oStrictLimit local.step) qed thenshow ?thesis by (simp add: z) qed
text"order properties of 0 and strict limits"
lemma oZero_least: "oZero ≤ x" proof - have"x = Abs_ordinal (ord0rel `` {z}) ==> ord0_Zero ≤ z"for z proof (induction z arbitrary: x) case (ord0_Lim u) thenshow ?case by (meson less_ord0_LimI ord0_le_less_trans ord0_less_imp_le rangeI) qed auto thenshow ?thesis by (metis Abs_ordinal_cases2 Abs_ordinal_le oZero_def) qed
lemma oStrictLimit_lub: assumes"∀n. f n < x"shows"oStrictLimit f ≤ x" proof - have"∃n. x ≤ f n"if x: "x < oStrictLimit f" proof - obtain z where z: "x = Abs_ordinal (ord0rel `` {z})" "z < ord0_Lim (λn. SOME x. x ∈ Rep_ordinal (f n))" using less_ord0_LimI x unfolding oStrictLimit_def by (metis Abs_ordinal_cases2 Abs_ordinal_less) thenobtain n where"z ≤ (SOME x. x ∈ Rep_ordinal (f n))" using less_ord0_LimD by blast thenhave"Abs_ordinal (ord0rel `` {z}) ≤ f n" apply (rule_tac x="f n"in Abs_ordinal_cases2) using ord0_order_trans ord0relD some_ord0rel by auto thenshow ?thesis using‹x = Abs_ordinal (ord0rel `` {z})›by auto qed thenshow ?thesis using assms linorder_not_le by blast qed
lemma less_oStrictLimitD: "x < oStrictLimit f ==>∃n. x ≤ f n" by (metis leD leI oStrictLimit_lub)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.