locale continuous = fixes F :: "ordinal ==> ordinal" assumes cont: "F (oLimit f) = oLimit (λn. F (f n))"
lemmas continuousD = continuous.cont
lemma (in continuous) monoD: assumes"x ≤ y"shows"F x ≤ F y" proof - have"oLimit (case_nat u (λn. v)) = max u v"for u v apply (simp add: max_def) by (metis (no_types, lifting) le_oLimit less_oLimitE linorder_not_le oLimit_Suc nat.caseorder_le_less) thenshow"F x ≤ F y" by (metis ‹x ≤ y› cont le_oLimit max.absorb2 nat.case(1)) qed
lemma (in continuous) mono: "mono F" by (simp add: local.monoD monoI)
lemma continuousI: assumes lim: "∧f. strict_mono f ==> F (oLimit f) = oLimit (λn. F (f n))" assumes suc: "∧x. F x ≤ F (oSuc x)" shows"continuous F" proof - have mono: "x ≤ y ==> F x ≤ F y"for x y proof (induction y arbitrary: x rule: oLimit_induct) case zero thenshow ?caseby auto next case (suc x) with assms show ?case by (metis antisym_conv1 le_oSucE nless_le order.trans) next case (lim f) with assms show ?casethm assms(1) by (metis le_oLimitI nle_le oLimit_leI) qed have"F (oLimit f) = oLimit (λn. F (f n))"for f proof (cases "∀n. f n < oLimit f") case True thenhave🍋: "oLimit (λn. f (make_mono f n)) = oLimit f" by (simp add: oLimit_make_mono_eq) have"∧n. ∃m. F (f n) ≤ F (f (make_mono f m))" by (metis True mono less_oLimitD linorder_not_less oLimit_make_mono_eq ordinal_linear) thenshow ?thesis by (metis True 🍋 oLimit_eqI lim strict_mono_f_make_mono) next case False thenshow ?thesis by (metis le_oLimit less_oLimitE linorder_not_le mono nle_le) qed with mono show ?thesis by (simp add: continuous.intro) qed
subsection‹Normal functions›
locale normal = continuous + assumes strict: "strict_mono F"
lemma (in normal) mono: "mono F" by (rule mono)
lemma (in normal) continuous: "continuous F" by (rule continuous.intro, rule cont)
lemma (in normal) monoD: "x ≤ y ==> F x ≤ F y" by (rule monoD)
lemma (in normal) strict_monoD: "x < y ==> F x < F y" by (erule strict_monoD[OF strict])
lemma (in normal) cancel_eq: "(F x = F y) = (x = y)" by (rule strict_mono_cancel_eq[OF strict])
lemma (in normal) cancel_less: "(F x < F y) = (x < y)" by (rule strict_mono_cancel_less[OF strict])
lemma (in normal) cancel_le: "(F x ≤ F y) = (x ≤ y)" by (rule strict_mono_cancel_le[OF strict])
lemma (in normal) oLimit: "F (oLimit f) = oLimit (λn. F (f n))" by (rule cont)
lemma (in normal) increasing: "x ≤ F x" proof (induction x rule: oLimit_induct) case zero thenshow ?case by simp next case (suc x) thenshow ?case by (simp add: normal.strict_monoD normal_axioms oSuc_leI order.strict_trans1) next case (lim f) thenshow ?case by (metis cont le_oLimitI oLimit_leI) qed
lemma normalI: assumes lim: "∧f. strict_mono f ==> F (oLimit f) = oLimit (λn. F (f n))" assumes suc: "∧x. F x < F (oSuc x)" shows"normal F" proof - have mono: "x ≤ y ==> F x ≤ F y"for x y using continuousI assms by (metis continuous.monoD linorder_not_less ordinal_linear) thenhave"OrdinalInduct.strict_mono F" by (metis OrdinalInduct.strict_monoI leD oSuc_leI order_less_le suc) thenshow ?thesis by (meson continuousI leD lim nle_le normal.intro normal_axioms.intro suc) qed
lemma normal_range_le: assumes nml: "normal F""normal G"and"range G ⊆ range F" shows"F x ≤ G x" proof (induction x rule: oLimit_induct) case zero with assms show ?case by (metis image_iff normal.monoD ordinal_0_le range_subsetD) next case (suc x) thenhave"G (oSuc x) ∈ range F" using assms(3) by blast thenshow ?case by (smt (verit, ccfv_SIG) nml dual_order.trans leD le_oSucE less_oSuc normal.cancel_le ordinal_linear rangeE suc) next case (lim f) thenshow ?case by (metis nml le_oLimitI normal.oLimit oLimit_leI) qed
lemma normal_range_eq: "[normal F; normal G; range F = range G]==> F = G" by (force simp add: normal_range_le intro: order_antisym)
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.