Skip to content

Commit c9b87ea

Browse files
committed
Began work on further scene decomposition theorems
1 parent 70758f8 commit c9b87ea

1 file changed

Lines changed: 77 additions & 4 deletions

File tree

Scene_Spaces.thy

Lines changed: 77 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ lemma idem_scene_space: "a \<in> scene_space \<Longrightarrow> idem_scene a"
230230
lemma set_Vars_scene_space [simp]: "set Vars \<subseteq> scene_space"
231231
by blast
232232

233+
lemma mem_Vars_scene_space [simp]: "A \<subseteq> set Vars \<Longrightarrow> A \<subseteq> scene_space"
234+
by blast
235+
233236
lemma pairwise_compat_Vars_subset: "set xs \<subseteq> set Vars \<Longrightarrow> pairwise (##\<^sub>S) (set xs)"
234237
using pairwise_subset scene_space_compats by blast
235238

@@ -308,8 +311,8 @@ next
308311
qed
309312

310313
lemma scene_space_vars_decomp_iff: "a \<in> scene_space \<longleftrightarrow> (\<exists>xs. set xs \<subseteq> set Vars \<and> a = foldr (\<squnion>\<^sub>S) xs \<bottom>\<^sub>S)"
311-
apply (auto simp add: scene_space_vars_decomp scene_space.Vars_scene_space scene_space_foldr)
312-
apply (simp add: scene_space.Vars_scene_space scene_space_foldr subset_eq)
314+
apply (rule iffI)
315+
apply (simp add: scene_space_foldr subset_eq)
313316
using scene_space_vars_decomp apply auto[1]
314317
by (meson dual_order.trans scene_space_foldr set_Vars_scene_space)
315318

@@ -712,10 +715,55 @@ lemma le_vars_then_equal: "\<lbrakk> x \<in> set Vars; y \<in> set Vars; x \<le>
712715

713716
end
714717

718+
lemma scene_union_le_iff:
719+
assumes "a \<in> scene_space" "b \<in> scene_space"
720+
shows "a \<squnion>\<^sub>S b \<le> c \<longleftrightarrow> a \<le> c \<and> b \<le> c"
721+
by (metis assms idem_scene_space idem_scene_union scene_space_compat
722+
scene_space_ub scene_union_commute scene_union_mono subscene_trans)
723+
715724
lemma foldr_scene_union_eq_scene_space:
716725
"\<lbrakk> set xs \<subseteq> scene_space; set xs = set ys \<rbrakk> \<Longrightarrow> \<Squnion>\<^sub>S xs = \<Squnion>\<^sub>S ys"
717726
by (metis foldr_scene_union_eq_sets pairwise_def pairwise_subset scene_space_compat)
718727

728+
lemma foldr_scene_le_then_subset:
729+
assumes "set xs \<subseteq> set Vars" "set ys \<subseteq> set Vars" "\<Squnion>\<^sub>S xs \<le> \<Squnion>\<^sub>S ys" "\<bottom>\<^sub>S \<notin> set xs"
730+
shows "set xs \<subseteq> set ys"
731+
using assms proof (induct xs arbitrary: ys)
732+
case Nil
733+
then show ?case by simp
734+
next
735+
case (Cons a xs)
736+
then show ?case
737+
apply (simp add: scene_union_le_iff scene_space_foldr)
738+
apply (metis (mono_tags, lifting) Vars_indep_foldr bot_idem_scene foldr_scene_union_filter
739+
removeAll_id scene_bot_least scene_indep_pres_compat scene_le_iff_indep_inv
740+
scene_space_compats subscene_antisym top_scene_eq uminus_bot_scene
741+
uminus_vars_other_vars)
742+
done
743+
qed
744+
745+
lemma foldr_scene_eq_then_eq:
746+
assumes "set xs \<subseteq> set Vars" "set ys \<subseteq> set Vars" "\<Squnion>\<^sub>S xs = \<Squnion>\<^sub>S ys" "\<bottom>\<^sub>S \<notin> set xs" "\<bottom>\<^sub>S \<notin> set ys"
747+
shows "set xs = set ys"
748+
by (simp add: assms dual_order.eq_iff foldr_scene_le_then_subset scene_union_foldr_subset)
749+
750+
definition "scene_decomp a = (THE B. B \<subseteq> set Vars \<and> \<bottom>\<^sub>S \<notin> B \<and> (\<exists> xs. B = set xs \<and> a = \<Squnion>\<^sub>S xs))"
751+
752+
lemma
753+
assumes "a \<in> scene_space"
754+
shows "scene_decomp a \<subseteq> set Vars"
755+
proof -
756+
obtain B where B:"B \<subseteq> set Vars" "\<exists> xs. B = set xs \<and> a = \<Squnion>\<^sub>S xs"
757+
by (metis assms scene_space_vars_decomp_iff)
758+
from B show ?thesis
759+
apply (simp add: scene_decomp_def)
760+
apply (rule theI2[where a="B - {\<bottom>\<^sub>S}"])
761+
apply auto
762+
apply (metis scene_union_foldr_remove_element scene_union_unit(2)
763+
set_removeAll)
764+
apply (metis foldr_scene_le_then_subset scene_union_foldr_subset subset_iff)
765+
oops
766+
719767
subsection \<open> Mapping a lens over a scene list \<close>
720768

721769
definition map_lcomp :: "'b scene list \<Rightarrow> ('b \<Longrightarrow> 'a) \<Rightarrow> 'a scene list" where
@@ -942,7 +990,27 @@ next
942990
by blast
943991
qed
944992

945-
993+
lemma basis_scene_decomposition:
994+
assumes "a \<in> scene_space"
995+
shows "\<exists> B\<subseteq>set Vars. a = \<Union>\<^sub>S B"
996+
by (metis Sup_scene_is_foldr_scene assms scene_space_vars_decomp_iff set_Vars_scene_space subset_trans)
997+
998+
lemma
999+
assumes "x \<in> set Vars" "A \<subseteq> set Vars"
1000+
shows "x \<le> \<Union>\<^sub>S A \<longleftrightarrow> (x = \<bottom>\<^sub>S \<or> x \<in> A)"
1001+
oops
1002+
1003+
lemma
1004+
assumes "A \<subseteq> set Vars" "B \<subseteq> set Vars" "\<Union>\<^sub>S A = \<Union>\<^sub>S B" "x \<in> A"
1005+
shows "x \<in> B"
1006+
oops
1007+
1008+
lemma
1009+
assumes "a \<in> scene_space"
1010+
shows "scene_decomp a \<subseteq> set Vars"
1011+
oops
1012+
1013+
9461014
lemma (in complete_lattice) is_lub_modulo_carrier:
9471015
"is_lub L x A \<longleftrightarrow> is_lub L x (A \<inter> carrier L)"
9481016
by (simp add: Upper_def)
@@ -1042,7 +1110,7 @@ lemma scene_union_dist:
10421110
shows "A \<union>\<^sub>S (B \<inter>\<^sub>S C) = (A \<union>\<^sub>S B) \<inter>\<^sub>S (A \<union>\<^sub>S C)"
10431111
by (metis assms(1,2,3) inf_scene_inter scene_space_class.scene_union_inter_distrib ss_clat.join_closed ss_clat.meet_closed sup_scene_union)
10441112

1045-
lemma Sup_scene_dist:
1113+
lemma Sup_scene_dist:
10461114
assumes "a \<in> scene_space" "B \<subseteq> scene_space"
10471115
shows "a \<union>\<^sub>S (\<Inter>\<^sub>S B) = \<Inter>\<^sub>S {a \<union>\<^sub>S b | b. b \<in> B}"
10481116
proof -
@@ -1084,6 +1152,11 @@ lemma scene_inter_dist:
10841152
shows "A \<inter>\<^sub>S (B \<union>\<^sub>S C) = (A \<inter>\<^sub>S B) \<union>\<^sub>S (A \<inter>\<^sub>S C)"
10851153
by (metis (no_types, opaque_lifting) Sup_scene_closed assms(1,2,3) inf_scene_inter scene_inter_union_distrib ss_clat.meet_closed ss_union_def sup_scene_union)
10861154

1155+
lemma Inf_scene_dist:
1156+
assumes "a \<in> scene_space" "B \<subseteq> scene_space"
1157+
shows "a \<inter>\<^sub>S (\<Union>\<^sub>S B) = \<Union>\<^sub>S {a \<inter>\<^sub>S b | b. b \<in> B}"
1158+
oops
1159+
10871160
lemma scene_union_diff:
10881161
assumes "A \<in> scene_space" "B \<in> scene_space" "C \<in> scene_space"
10891162
shows "(A \<union>\<^sub>S B) - C = (A - C) \<union>\<^sub>S (B - C)"

0 commit comments

Comments
 (0)