lemma env_restr_cong: "(∧x. edom m ⊆ S ∩ S' ∪ -S ∩ -S') ==> m f|` S = m f|` S'" by (rule ext)(auto simp add: lookup_env_restr_eq edom_def)
subsubsection‹Deleting›
definition env_delete :: "'a ==> ('a ==> 'b) ==> ('a ==> 'b::pcpo)" where"env_delete x m = m(x := ⊥)"
lemma lookup_env_delete[simp]: "x' ≠ x ==> env_delete x m x' = m x'" by (simp add: env_delete_def)
lemma lookup_env_delete_None[simp]: "env_delete x m x = ⊥" by (simp add: env_delete_def)
lemma edom_env_delete[simp]: "edom (env_delete x m) = edom m - {x}" by (auto simp add: env_delete_def edom_def)
lemma edom_env_delete_subset: "edom (env_delete x m) ⊆ edom m"by auto
lemma env_delete_fun_upd[simp]: "env_delete x (m(x := v)) = env_delete x m" by (auto simp add: env_delete_def)
lemma env_delete_fun_upd2[simp]: "(env_delete x m)(x := v) = m(x := v)" by (auto simp add: env_delete_def)
lemma env_delete_fun_upd3[simp]: "x ≠ y ==> env_delete x (m(y := v)) = (env_delete x m)(y := v)" by (auto simp add: env_delete_def)
lemma env_delete_noop[simp]: "x ∉ edom m ==> env_delete x m = m" by (auto simp add: env_delete_def edom_def)
lemma fun_upd_env_delete[simp]: "x ∈ edom Γ ==> (env_delete x Γ)(x := Γ x) = Γ" by (auto)
lemma env_restr_env_delete_other[simp]: "x ∉ S ==> env_delete x m f|` S = m f|` S" apply (rule ext) apply (auto simp add: lookup_env_restr_eq) by (metis lookup_env_delete)
lemma env_delete_restr: "env_delete x m = m f|` (-{x})" by (auto simp add: lookup_env_restr_eq)
lemma below_env_deleteI: "f x = ⊥==> f ⊑ g ==> f ⊑ env_delete x g" by (metis env_delete_def env_delete_restr env_restr_mono fun_upd_triv)
lemma env_delete_below_cong[intro]: assumes"x ≠ v ==> e1 x ⊑ e2 x" shows"env_delete v e1 x ⊑ env_delete v e2 x" using assms unfolding env_delete_def by auto
lemma env_delete_env_restr_swap: "env_delete x (env_restr S e) = env_restr S (env_delete x e)" by (metis (erased, opaque_lifting) env_delete_def env_restr_fun_upd env_restr_fun_upd_other fun_upd_triv lookup_env_restr_eq)
lemma env_delete_mono: "m ⊑ m' ==> env_delete x m ⊑ env_delete x m'" unfolding env_delete_restr by (rule env_restr_mono)
lemma env_delete_below_arg: "env_delete x m ⊑ m" unfolding env_delete_restr by (rule env_restr_below_self)
subsubsection‹Merging of two functions›
text‹
'd like to have some nice syntax for @{term "override_on"}. ›
lemma env_restr_add: "(m1 ++ m2) f|` S = m1 f|` S ++ m2 f|` S" by (auto simp add: override_on_def edom_def env_restr_def)
lemma env_delete_add: "env_delete x (m1 ++ m2) = env_delete x m1 ++ - {x} env_delete x m2" by (auto simp add: override_on_def edom_def env_restr_def env_delete_def)
subsubsection‹Environments with binary joins›
lemma edom_join[simp]: "edom (f ⊔ (g::('a::type ==> 'b::{Finite_Join_cpo,pcpo}))) = edom f ∪ edom g" unfolding edom_def by auto
lemma env_delete_join[simp]: "env_delete x (f ⊔ (g::('a::type ==> 'b::{Finite_Join_cpo,pcpo}))) = env_delete x f ⊔ env_delete x g" by (metis env_delete_def fun_upd_meet_simp)
lemma env_restr_join: fixes m1 m2 :: "'a::type ==> 'b::{Finite_Join_cpo,pcpo}" shows"(m1 ⊔ m2) f|` S = (m1 f|` S) ⊔ (m2 f|` S )" by (auto simp add: env_restr_def)
lemma env_restr_join2: fixes m :: "'a::type ==> 'b::{Finite_Join_cpo,pcpo}" shows"m f|` S ⊔ m f|` S' = m f|` (S ∪ S')" by (auto simp add: env_restr_def)
lemma env_restr_split: fixes m :: "'a::type ==> 'b::{Finite_Join_cpo,pcpo}" shows"m = m f|` S ⊔ m f|` (- S)" by (simp add: env_restr_join2 Compl_partition)
lemma env_restr_below_split: "m f|` S ⊑ m' ==> m f|` (- S) ⊑ m' ==> m ⊑ m'" by (metis ComplI fun_below_iff lookup_env_restr)
subsubsection‹Singleton environments›
definition esing :: "'a ==> 'b::{pcpo} → ('a ==> 'b)" where"esing x = (Λ a. (λ y . (if x = y then a else ⊥)))"
lemma esing_bot[simp]: "esing x ⋅⊥ = ⊥" by (rule ext)(simp add: esing_def)
lemma esing_simps[simp]: "(esing x ⋅ n) x = n" "x' ≠ x ==> (esing x ⋅ n) x' = ⊥" by (simp_all add: esing_def)
lemma esing_eq_up_iff[simp]: "(esing x⋅(up⋅a)) y = up⋅a' ⟷ (x = y ∧ a = a')" by (auto simp add: fun_below_iff esing_def)
lemma esing_below_iff[simp]: "esing x ⋅ a ⊑ ae ⟷ a ⊑ ae x" by (auto simp add: fun_below_iff esing_def)
lemma edom_esing_subset: "edom (esing x⋅n) ⊆ {x}" unfolding edom_def esing_def by auto
lemma edom_esing_up[simp]: "edom (esing x ⋅ (up ⋅ n)) = {x}" unfolding edom_def esing_def by auto
lemma env_delete_esing[simp]: "env_delete x (esing x ⋅ n) = ⊥" unfolding env_delete_def esing_def by auto
lemma env_restr_esing[simp]: "x∈ S ==> esing x⋅v f|` S = esing x⋅v" by (auto intro: env_restr_useless dest: subsetD[OF edom_esing_subset])
lemma env_restr_esing2[simp]: "x ∉ S ==> esing x⋅v f|` S = ⊥" by (auto dest: subsetD[OF edom_esing_subset])
lemma esing_eq_iff[simp]: "esing x⋅v = esing x⋅v' ⟷ v = v'" by (metis esing_simps(1))
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.2 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.