section‹Sets of maps› theory MapSets imports SetMap Utils begin
text‹
the section about the finiteness of the argument space, we need the fact that the set of maps from a finite domain to a finite range is finite, and the same for the set-valued maps defined in @{theory "Shivers-CFA.SetMap"}. Both these sets are defined (‹maps_over›, ‹smaps_over›) and the finiteness is shown. ›
definition maps_over :: "'a::type set ==> 'b::type set ==> ('a ⇀ 'b) set" where"maps_over A B = {m. dom m ⊆ A ∧ ran m ⊆ B}"
lemma maps_over_empty[simp]: "Map.empty ∈ maps_over A B" unfolding maps_over_def by simp
lemma maps_over_upd: assumes"m ∈ maps_over A B" and"v ∈ A"and"k ∈ B" shows"m(v ↦ k) ∈ maps_over A B" using assms unfolding maps_over_def by (auto dest: subsetD[OF ran_upd])
lemma maps_over_finite[intro]: assumes"finite A"and"finite B"shows"finite (maps_over A B)" proof- have inj_map_graph: "inj (λf. {(x, y). Some y = f x})" proof (induct rule: inj_onI) case (1 x y) from"1.hyps"(3) have hyp: "∧ a b. (Some b = x a) ⟷ (Some b = y a)" by (simp add: set_eq_iff) show ?case proof (rule ext) fix z show"x z = y z" using hyp[of _ z] by (cases "x z", cases "y z", auto) qed qed
have"(λf. {(x, y). Some y = f x}) ` maps_over A B ⊆ Pow( A × B )" (is"?graph ⊆ _") unfolding maps_over_def by (auto dest!:subsetD[of _ A] subsetD[of _ B] intro:ranI) moreover have"finite (Pow( A × B ))"using assms by auto ultimately have"finite ?graph"by (rule finite_subset) thus ?thesis by (rule finite_imageD[OF _ inj_on_subset[OF inj_map_graph subset_UNIV]]) qed
definition smaps_over :: "'a::type set ==> 'b::type set ==> ('a ==> 'b set) set" where"smaps_over A B = {m. sdom m ⊆ A ∧ sran m ⊆ B}"
lemma smaps_over_empty[simp]: "{}. ∈ smaps_over A B" unfolding smaps_over_def by simp
lemma smaps_over_un: assumes"m1 ∈ smaps_over A B"and"m2 ∈ smaps_over A B" shows"m1 ∪. m2 ∈ smaps_over A B" using assms unfolding smaps_over_def by (auto simp add:smap_union_def)
lemma smaps_over_Union: assumes"set ms ⊆ smaps_over A B" shows"∪.ms ∈ smaps_over A B" using assms by (induct ms)(auto intro: smaps_over_un)
lemma smaps_over_im: "[ f ∈ m a ; m ∈ smaps_over A B ]==> f ∈ B" unfolding smaps_over_def by (auto simp add:sran_def)
lemma smaps_over_finite[intro]: assumes"finite A"and"finite B"shows"finite (smaps_over A B)" proof- have inj_smap_graph: "inj (λf. {(x, y). y = f x ∧ y ≠ {}})" (is"inj ?gr") proof (induct rule: inj_onI) case (1 x y) from"1.hyps"(3) have hyp: "∧ a b. (b = x a ∧ b ≠ {}) = (b = y a ∧ b ≠ {})" by -(subst (asm) (3) set_eq_iff, simp) show ?case proof (rule ext) fix z show"x z = y z" using hyp[of _ z] by (cases "x z ≠ {}", cases "y z ≠ {}", auto) qed qed
have"?gr ` smaps_over A B ⊆ Pow( A × Pow B )" (is"?graph ⊆ _") unfolding smaps_over_def by (auto dest!:subsetD[of _ A] subsetD[of _ "Pow B"] sdom_not_mem intro:sranI) moreover have"finite (Pow( A × Pow B ))"using assms by auto ultimately have"finite ?graph"by (rule finite_subset) thus ?thesis by (rule finite_imageD[OF _ inj_on_subset[OF inj_smap_graph subset_UNIV]]) qed
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 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.