section‹Slightly adjusted content from AFP/LocalLexing›
fun funpower :: "('a ==> 'a) ==> nat ==> ('a ==> 'a)"where "funpower f 0 x = x"
| "funpower f (Suc n) x = f (funpower f n x)"
definition natUnion :: "(nat ==> 'a set) ==> 'a set"where "natUnion f = ∪ { f n | n. True }"
definition limit :: "('a set ==> 'a set) ==> 'a set ==> 'a set"where "limit f x = natUnion (λ n. funpower f n x)"
definition setmonotone :: "('a set ==> 'a set) ==> bool"where "setmonotone f = (∀ X. X ⊆ f X)"
lemma subset_setmonotone: "setmonotone f ==> X ⊆ f X" by (simp add: setmonotone_def)
lemma[simp]: "funpower id n = id" by (rule ext, induct n, simp_all)
lemma[simp]: "limit id = id" by (rule ext, auto simp add: limit_def natUnion_def)
definition chain :: "(nat ==> 'a set) ==> bool" where "chain C = (∀ i. C i ⊆ C (i + 1))"
definition continuous :: "('a set ==> 'b set) ==> bool" where "continuous f = (∀ C. chain C ⟶ (chain (f o C) ∧ f (natUnion C) = natUnion (f o C)))"
lemma natUnion_upperbound: "(∧ n. f n ⊆ G) ==> (natUnion f) ⊆ G" by (auto simp add: natUnion_def)
lemma funpower_upperbound: "(∧ I. I ⊆ G ==> f I ⊆ G) ==> I ⊆ G ==> funpower f n I ⊆ G" proof (induct n) case0thus ?caseby simp next case (Suc n) thus ?caseby simp qed
lemma limit_upperbound: "(∧ I. I ⊆ G ==> f I ⊆ G) ==> I ⊆ G ==> limit f I ⊆ G" by (simp add: funpower_upperbound limit_def natUnion_upperbound)
lemma elem_limit_simp: "x ∈ limit f X = (∃ n. x ∈ funpower f n X)" by (auto simp add: limit_def natUnion_def)
definition pointwise :: "('a set ==> 'b set) ==> bool"where "pointwise f = (∀ X. f X = ∪ { f {x} | x. x ∈ X})"
lemma natUnion_elem: "x ∈ f n ==> x ∈ natUnion f" using natUnion_def by fastforce
lemma limit_elem: "x ∈ funpower f n X ==> x ∈ limit f X" by (simp add: limit_def natUnion_elem)
definition pointbase :: "('a set ==> 'b set) ==> 'a set ==> 'b set"where "pointbase F I = ∪ { F X | X. finite X ∧ X ⊆ I }"
definition pointbased :: "('a set ==> 'b set) ==> bool"where "pointbased f = (∃ F. f = pointbase F)"
lemma chain_implies_mono: "chain C ==> mono C" by (simp add: chain_def mono_iff_le_Suc)
lemma setmonotone_implies_chain_funpower: assumes setmonotone: "setmonotone f" shows"chain (λ n. funpower f n I)" by (simp add: chain_def setmonotone subset_setmonotone)
lemma natUnion_subset: "(∧ n. ∃ m. f n ⊆ g m) ==> natUnion f ⊆ natUnion g" by (meson natUnion_elem natUnion_upperbound subset_iff)
lemma natUnion_eq[case_names Subset Superset]: "(∧ n. ∃ m. f n ⊆ g m) ==> (∧ n. ∃ m. g n ⊆ f m) ==> natUnion f = natUnion g" by (simp add: natUnion_subset subset_antisym)
lemma natUnion_shift[symmetric]: assumes chain: "chain C" shows"natUnion C = natUnion (λ n. C (n + m))" proof (induct rule: natUnion_eq) case (Subset n) show ?caseusing chain chain_implies_mono le_add1 mono_def by blast next case (Superset n) show ?caseby blast qed
definition regular :: "('a set ==> 'a set) ==> bool" where "regular f = (setmonotone f ∧ continuous f)"
lemma regular_fixpoint: assumes regular: "regular f" shows"f (limit f I) = limit f I" proof - have setmonotone: "setmonotone f"using regular regular_def by blast have continuous: "continuous f"using regular regular_def by blast
let ?C = "λ n. funpower f n I" have chain: "chain ?C" by (simp add: setmonotone setmonotone_implies_chain_funpower) have"f (limit f I) = f (natUnion ?C)" using limit_def by metis alsohave"f (natUnion ?C) = natUnion (f o ?C)" by (metis continuous continuous_def chain) alsohave"natUnion (f o ?C) = natUnion (λ n. f(funpower f n I))" by (meson comp_apply) alsohave"natUnion (λ n. f(funpower f n I)) = natUnion (λ n. ?C (n + 1))" by simp alsohave"natUnion (λ n. ?C(n + 1)) = natUnion ?C" apply (subst natUnion_shift) using chain by (blast+) finallyshow ?thesis by (simp add: limit_def) qed
lemma fix_is_fix_of_limit: assumes fixpoint: "f I = I" shows"limit f I = I" proof - have funpower: "∧ n. funpower f n I = I" proof - fix n :: nat from fixpoint show"funpower f n I = I" by (induct n, auto) qed show ?thesis by (simp add: limit_def funpower natUnion_def) qed
lemma limit_is_idempotent: "regular f ==> limit f (limit f I) = limit f I" by (simp add: fix_is_fix_of_limit regular_fixpoint)
definition mk_regular1 :: "('b ==> 'a ==> bool) ==> ('b ==> 'a ==> 'a) ==> 'a set ==> 'a set"where "mk_regular1 P F I = I ∪ { F q x | q x. x ∈ I ∧ P q x }"
definition mk_regular2 :: "('b ==> 'a ==> 'a ==> bool) ==> ('b ==> 'a ==> 'a ==> 'a) ==> 'a set ==> 'a set"where "mk_regular2 P F I = I ∪ { F q x y | q x y. x ∈ I ∧ y ∈ I ∧ P q x y }"
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.8 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.