locale normal_set = fixes A :: "ordinal set" assumes closed: "∧g. ∀n. g n ∈ A ==> oLimit g ∈ A" and unbounded: "∧x. ∃y∈A. x < y"
lemma (in normal_set) less_next: "x < (LEAST z. z ∈ A ∧ x < z)" by (metis (no_types, lifting) LeastI unbounded)
lemma (in normal_set) mem_next: "(LEAST z. z ∈ A ∧ x < z) ∈ A" by (metis (no_types, lifting) LeastI unbounded)
lemma (in normal) normal_set_range: "normal_set (range F)" proof (rule normal_set.intro) fix g :: "nat ==> ordinal" assume"∀n. g n ∈ range F" thenhave"∧n. g n = F (LEAST z. g n = F z)" by (meson LeastI rangeE) thenhave"oLimit g = F (oLimit (λn. LEAST z. g n = F z))" by (simp add: continuousD continuous_axioms) thenshow"oLimit g ∈ range F" by simp next show"∧x. ∃y∈range F. x < y" using oInv_bound2 by blast qed
lemma oLimit_mem_INTER: assumes norm: "∀n. normal_set (A n)" and A: "∀n. A (Suc n) ⊆ A n""∀n. f n ∈ A n"and"mono f" shows"oLimit f ∈ (∩n. A n)" proof fix k have"f (n + k) ∈ A k"for n using A le_add2 lift_Suc_antimono_le by blast thenhave"oLimit (λn. f (n + k)) ∈ A k" by (simp add: norm normal_set.closed) thenshow"oLimit f ∈ A k" by (simp add: ‹mono f› oLimit_shift_mono) qed
lemma normal_set_INTER: assumes norm: "∀n. normal_set (A n)"and A: "∀n. A (Suc n) ⊆ A n" shows"normal_set (∩n. A n)" proof (rule normal_set.intro) fix g :: "nat ==> ordinal" assume"∀n. g n ∈∩ (range A)" thenshow"oLimit g ∈∩ (range A)" using norm normal_set.closed by force next fix x
define F where"F ≡ λn. LEAST y. y ∈ A n ∧ x < y" have"x < oLimit F" by (simp add: F_def less_oLimitI norm normal_set.less_next) moreover have🍋: "F n ∈ A n"for n by (simp add: F_def norm normal_set.mem_next) thenhave"F n ≤ F (Suc n)"for n unfolding F_def by (metis (no_types, lifting) A LeastI Least_le norm normal_set_def subsetD) thenhave"oLimit F ∈∩ (range A)" by (meson "🍋" A mono_natI norm oLimit_mem_INTER) ultimatelyshow"∃y∈∩ (range A). x < y" by blast qed
subsection‹Ordering functions›
text"There is a one-to-one correspondence between closed, unbounded sets of ordinals and normal functions on ordinals."
definition
ordering :: "(ordinal set) ==> (ordinal ==> ordinal)"where "ordering A = ordinal_rec (LEAST z. z ∈ A) (λp x. LEAST z. z ∈ A ∧ x < z)"
lemma ordering_0: "ordering A 0 = (LEAST z. z ∈ A)" by (simp add: ordering_def)
lemma ordering_oSuc: "ordering A (oSuc x) = (LEAST z. z ∈ A ∧ ordering A x < z)" by (simp add: ordering_def)
lemma (in normal_set) normal_ordering: "normal (ordering A)" by (simp add: OrdinalVeblen.ordering_def normal_ordinal_rec normal_set.less_next normal_set_axioms)
lemma (in normal_set) ordering_oLimit: "ordering A (oLimit f) = oLimit (λn. ordering A (f n))" by (simp add: normal.oLimit normal_ordering)
lemma (in normal) ordering_range: "ordering (range F) = F" proof fix x show"ordering (range F) x = F x" proof (induction x rule: oLimit_induct) case zero have"(LEAST z. z ∈ range F) = F 0" by (metis Least_equality Least_mono UNIV_I mono ordinal_0_le) thenshow ?case by (simp add: ordering_0) next case (suc x) have"ordering (range F) (oSuc x) = (LEAST z. z ∈ range F ∧ F x < z)" by (simp add: ordering_oSuc suc) alsohave"… = F (oSuc x)" using cancel_less less_oInvD oInv_inverse by (bestsimp intro!: Least_equality local.strict_monoD) finallyshow ?case . next case (lim f) thenshow ?case using oLimit by (simp add: normal_set_range normal_set.ordering_oLimit) qed qed
lemma (in normal_set) ordering_mem: "ordering A x ∈ A" proof (induction x rule: oLimit_induct) case zero thenshow ?case by (metis LeastI ordering_0 unbounded) next case (suc x) thenshow ?case by (simp add: mem_next ordering_oSuc) next case (lim f) thenshow ?case by (simp add: closed normal.oLimit normal_ordering) qed
lemma (in normal_set) range_ordering: "range (ordering A) = A" proof - have"∀y. y ∈ A ⟶ y < ordering A x ⟶ y ∈ range (ordering A)"for x proof (induction x rule: oLimit_induct) case zero thenshow ?case using not_less_Least ordering_0 by auto next case (suc x) thenshow ?case using not_less_Least ordering_oSuc by fastforce next case (lim f) thenshow ?case by (metis less_oLimitD ordering_oLimit) qed thenshow ?thesis using normal.oInv_bound2 normal_ordering ordering_mem by fastforce qed
lemma ordering_INTER_0: assumes norm: "∀n. normal_set (A n)"and A: "∀n. A (Suc n) ⊆ A n" shows"ordering (∩n. A n) 0 = oLimit (λn. ordering (A n) 0)" proof - have"oLimit (λn. OrdinalVeblen.ordering (A n) 0) ∈∩ (range A)" using assms by (metis (mono_tags, lifting) Least_le mono_natI normal_set.ordering_mem oLimit_mem_INTER ordering_0 subsetD) moreoverhave"∧y. y ∈∩ (range A) ==> oLimit (λn. ordering (A n) 0) ≤ y" by (simp add: Least_le oLimit_def ordering_0) ultimatelyshow ?thesis by (metis LeastI Least_le nle_le ordering_0) qed
subsection‹Critical ordinals›
definition
critical_set :: "ordinal set ==> ordinal ==> ordinal set"where "critical_set A = ordinal_rec0 A (λp x. x ∩ range (oDeriv (ordering x))) (λf. ∩n. f n)"
lemma critical_set_0 [simp]: "critical_set A 0 = A" by (simp add: critical_set_def)
lemma critical_set_oSuc_lemma: "critical_set A (oSuc n) = critical_set A n ∩ range (oDeriv (ordering (critical_set A n)))" by (simp add: critical_set_def ordinal_rec0_oSuc)
lemma omega_complete_INTER: "omega_complete (λx y. y ⊆ x) (λf. ∩ (range f))" by (simp add: INF_greatest Inf_lower omega_complete_axioms_def omega_complete_def porder.flip porder_order)
lemma critical_set_oLimit: "critical_set A (oLimit f) = (∩n. critical_set A (f n))" unfolding critical_set_def by (best intro!: omega_complete.ordinal_rec0_oLimit omega_complete_INTER)
lemma critical_set_mono: "x ≤ y ==> critical_set A y ⊆ critical_set A x" unfolding critical_set_def by (intro omega_complete.ordinal_rec0_mono [OF omega_complete_INTER]) force
lemma (in normal_set) range_oDeriv_subset: "range (oDeriv (ordering A)) ⊆ A" by (metis image_subsetI normal_ordering oDeriv_fixed rangeI range_ordering)
lemma normal_set_critical_set: "normal_set A ==> normal_set (critical_set A x)" proof (induction x rule: oLimit_induct) case zero thenshow ?case by simp next case (suc x) thenshow ?case by (simp add: Int_absorb1 critical_set_oSuc_lemma normal.normal_set_range normal_oDeriv normal_set.range_oDeriv_subset) next case (lim f) thenshow ?case unfolding critical_set_oLimit by (meson critical_set_mono lessI normal_set_INTER order_le_less strict_mono.strict_mono) qed
lemma critical_set_oSuc: "normal_set A ==> critical_set A (oSuc x) = range (oDeriv (ordering (critical_set A x)))" by (metis critical_set_oSuc_lemma inf.absorb_iff2 normal_set.range_oDeriv_subset normal_set_critical_set)
subsection‹Veblen hierarchy over a normal function›
lemma (in normal) oVeblen_0: "oVeblen F 0 = F" by (simp add: normal.ordering_range normal_axioms oVeblen_def)
lemma (in normal) oVeblen_oSuc: "oVeblen F (oSuc x) = oDeriv (oVeblen F x)" using critical_set_oSuc normal.normal_set_range normal.ordering_range normal_axioms normal_oDeriv oVeblen_def by presburger
lemma (in normal) oVeblen_oLimit: "oVeblen F (oLimit f) = ordering (∩n. range (oVeblen F (f n)))" unfolding oVeblen_def using critical_set_oLimit normal_set.range_ordering normal_set_critical_set normal_set_range by presburger
lemma (in normal) normal_oVeblen: "normal (oVeblen F x)" unfolding oVeblen_def by (simp add: normal_set.normal_ordering normal_set_critical_set normal_set_range)
lemma (in normal) continuous_oVeblen_0: "continuous (λx. oVeblen F x 0)" proof (rule continuousI) fix f:: "nat ==> ordinal" assume f: "OrdinalInduct.strict_mono f" have"normal_set (critical_set (range F) (f n))"for n using normal_set_critical_set normal_set_range by blast moreover have"critical_set (range F) (f (Suc n)) ⊆ critical_set (range F) (f n)"for n by (simp add: f critical_set_mono strict_mono_monoD) ultimatelyshow"oVeblen F (oLimit f) 0 = oLimit (λn. oVeblen F (f n) 0)" using ordering_INTER_0 by (simp add: oVeblen_def critical_set_oLimit) next show"∧x. oVeblen F x 0 ≤ oVeblen F (oSuc x) 0" by (simp add: le_oFix1 oVeblen_oSuc) qed
lemma (in normal) oVeblen_oLimit_0: "oVeblen F (oLimit f) 0 = oLimit (λn. oVeblen F (f n) 0)" by (rule continuousD[OF continuous_oVeblen_0])
lemma (in normal) normal_oVeblen_0: assumes"0 < F 0"shows"normal (λx. oVeblen F x 0)" proof -
{ fix x have"0 < oVeblen F x 0" by (metis leD ordinal_0_le ordinal_neq_0 continuous.monoD continuous_oVeblen_0 oVeblen_0 assms) thenhave"oVeblen F x 0 < oVeblen F x (oDeriv (oVeblen F x) 0)" by (simp add: normal.strict_monoD normal_oVeblen zero_less_oFix_eq) thenhave"oVeblen F x 0 < oVeblen F (oSuc x) 0" by (metis normal_oVeblen oDeriv_fixed oVeblen_oSuc)
} thenshow ?thesis using continuous_def continuous_oVeblen_0 normalI by blast qed
lemma (in normal) range_oVeblen: "range (oVeblen F x) = critical_set (range F) x" unfolding oVeblen_def using normal_set.range_ordering normal_set_critical_set normal_set_range by blast
lemma (in normal) range_oVeblen_subset: "x ≤ y ==> range (oVeblen F y) ⊆ range (oVeblen F x)" using critical_set_mono range_oVeblen by presburger
lemma (in normal) oVeblen_fixed: assumes"x<y" shows"oVeblen F x (oVeblen F y a) = oVeblen F y a" using assms proof (induction y arbitrary: x a rule: oLimit_induct) case zero thenshow ?case by auto next case (suc u) thenshow ?case by (metis antisym_conv3 leD normal_oVeblen oDeriv_fixed oSuc_le_eq_less oVeblen_oSuc) next case (lim f x a) thenobtain n where"x < f n" using less_oLimitD by blast have"oVeblen F (oLimit f) a ∈ range (oVeblen F (f n))" by (simp add: range_oVeblen_subset range_subsetD) thenshow ?case using lim.IH ‹x < f n›by force qed
lemma (in normal) critical_set_fixed: assumes"0 < z" shows"range (oVeblen F z) = {x. ∀y<z. oVeblen F y x = x}" (is"?L = ?R") proof show"?L ⊆ ?R" using oVeblen_fixed by auto have"{x. ∀y<z. oVeblen F y x = x} ⊆ range (oVeblen F z)" using assms proof (induction z rule: oLimit_induct) case zero thenshow ?caseby auto next case (suc x) thenshow ?case by (force simp: normal_oVeblen oVeblen_oSuc range_oDeriv) next case (lim f) show ?case proof clarsimp fix x assume"∀y<oLimit f. oVeblen F y x = x" thenhave"x ∈ critical_set (range F) (f n)"for n by (metis lim.hyps rangeI range_oVeblen strict_mono_less_oLimit) thenshow"x ∈ range (oVeblen F (oLimit f))" by (simp add: range_oVeblen critical_set_oLimit) qed qed thenshow"?R ⊆ ?L" by blast qed
subsection‹Veblen hierarchy over $\lambda x.\ 1 + x$›
lemma oDeriv_id: "oDeriv id = id" proof fix x show"oDeriv id x = id x" by (induction x rule: oLimit_induct) (auto simp add: oFix_eq_self) qed
lemma oFix_plus: "oFix (λx. a + x) 0 = a * ψ" proof - have"iter n ((+) a) 0 = a * ordinal_of_nat n"for n proof (induction n) case0 thenshow ?caseby auto next case (Suc n) have"a + a * ordinal_of_nat n = a * ordinal_of_nat n + a"for n by (induction n) (simp_all flip: ordinal_plus_assoc) with Suc show ?caseby simp qed thenshow ?thesis by (simp add: oFix_def omega_def) qed
lemma oDeriv_plus: "oDeriv ((+) a) = ((+) (a * ψ))" proof show"oDeriv ((+) a) x = a * ψ + x"for x proof (induction x rule: oLimit_induct) case (suc x) thenshow ?case by (simp add: oFix_eq_self ordinal_plus_absorb) qed (auto simp: oFix_plus) qed
lemma oVeblen_1_plus: "oVeblen ((+) 1) x = ((+) (ψ ** x))" using wf proof (induction x rule: wf_induct_rule) case (less x) have"oVeblen ((+) (oSuc 0)) x = (+) (ψ ** x)" proof (cases x rule: ordinal_cases) case zero thenshow ?thesis by (simp add: normal.oVeblen_0 normal_plus) next case (suc y) with less show ?thesis by (simp add: normal.oVeblen_oSuc[OF normal_plus] oDeriv_plus) next case (lim f) show ?thesis proof (rule normal_range_eq) show"normal (oVeblen ((+) (oSuc 0)) x)" using normal.normal_oVeblen normal_plus by blast show"normal ((+) (ψ ** x))" using normal_plus by blast have"∀y<oLimit f. ψ ** y + u = u ==> u ∈ range ((+) (oLimit (λn. ψ ** f n)))"for u by (metis rangeI lim oLimit_leI ordinal_le_plusR strict_mono_less_oLimit ordinal_plus_minus2) moreover have"ψ ** y + (oLimit (λn. ψ ** f n) + u) = oLimit (λn. ψ ** f n) + u" if"y < oLimit f"for u y by (metis absorb_omega_exp2 ordinal_exp_oLimit ordinal_plus_assoc that zero_less_omega) ultimatelyshow"range (oVeblen ((+) (oSuc 0)) x) = range ((+) (ψ ** x))" using less lim by (force simp add: strict_mono_limit_ordinal normal.critical_set_fixed[OF normal_plus]) qed qed thenshow ?case by simp qed
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.