Skip to content

Commit 8c91329

Browse files
committed
Complete the proof that elements of the scene space are isomorphic to sets of basis scenes
1 parent b79c5bc commit 8c91329

1 file changed

Lines changed: 169 additions & 3 deletions

File tree

Scene_Spaces.thy

Lines changed: 169 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ definition scene_decomp :: "'a::scene_space scene \<Rightarrow> 'a scene set" ("
753753
lemma scene_decomp:
754754
assumes "a \<in> scene_space"
755755
shows decomp_Vars: "scene_decomp a \<subseteq> set Vars" (is "?A")
756-
and decomp_nbot: "\<bottom>\<^sub>S \<notin> scene_decomp a" (is "?B")
756+
and decomp_nbot [simp]: "\<bottom>\<^sub>S \<notin> scene_decomp a" (is "?B")
757757
and decomp_foldr_scene: "\<exists> xs. scene_decomp a = set xs \<and> a = \<Squnion>\<^sub>S xs" (is "?C")
758758
proof -
759759
obtain B where B:"B \<subseteq> set Vars" "\<exists> xs. B = set xs \<and> a = \<Squnion>\<^sub>S xs"
@@ -783,12 +783,130 @@ proof -
783783
set_removeAll)
784784
qed
785785

786-
lemma scene_decomp_transfer:
787-
assumes "a \<in> scene_space" "b \<in> scene_space" "scene_decomp a = scene_decomp b"
786+
lemma scene_decomp_mem_Vars [simp]:
787+
"\<lbrakk> a \<in> scene_space; x \<in> scene_decomp a \<rbrakk> \<Longrightarrow> x \<in> set Vars"
788+
by (metis decomp_Vars subset_iff)
789+
790+
lemma scene_decomp_eq_transfer:
791+
assumes "a \<in> scene_space" "b \<in> scene_space" "\<lbrakk>a\<rbrakk>\<^sub>S = \<lbrakk>b\<rbrakk>\<^sub>S"
788792
shows "a = b"
789793
by (metis assms(1,2,3) decomp_Vars decomp_foldr_scene foldr_scene_union_eq_scene_space
790794
mem_Vars_scene_space)
791795

796+
lemma scene_decomp_le_transfer:
797+
assumes "a \<in> scene_space" "b \<in> scene_space" "\<lbrakk>a\<rbrakk>\<^sub>S \<subseteq> \<lbrakk>b\<rbrakk>\<^sub>S"
798+
shows "a \<le> b"
799+
by (metis assms(1,2,3) decomp_Vars decomp_foldr_scene scene_union_foldr_subset)
800+
801+
lemma scene_foldr_decomp_le_Vars:
802+
assumes "set xs \<subseteq> scene_space" "set ys \<subseteq> set Vars" "\<Squnion>\<^sub>S xs \<le> \<Squnion>\<^sub>S ys" "a \<in> set xs" "b \<in> \<lbrakk>a\<rbrakk>\<^sub>S"
803+
shows "b \<in> set ys"
804+
proof -
805+
have bV: "b \<in> set Vars"
806+
using assms(1,4,5) scene_decomp_mem_Vars by blast
807+
obtain zs where zs: "\<lbrakk>a\<rbrakk>\<^sub>S = set zs" "a = \<Squnion>\<^sub>S zs"
808+
using assms(1,4) decomp_foldr_scene by blast
809+
have zs_Vars: "set zs \<subseteq> set Vars"
810+
by (metis assms(1,4) decomp_Vars subset_iff zs(1))
811+
have zs_le_xs: "\<Squnion>\<^sub>S zs \<le> \<Squnion>\<^sub>S ys"
812+
by (metis assms(1,3,4) idem_scene_space scene_space_foldr scene_space_in_foldr subscene_trans zs(2))
813+
show ?thesis
814+
by (metis (no_types) assms(1,2,4,5) decomp_nbot foldr_scene_le_then_subset subset_iff zs(1) zs_Vars zs_le_xs)
815+
qed
816+
817+
818+
lemma scene_foldr_decomp_le_iff:
819+
assumes "set xs \<subseteq> scene_space" "set ys \<subseteq> set Vars"
820+
shows "\<Squnion>\<^sub>S xs \<le> \<Squnion>\<^sub>S ys \<longleftrightarrow> (\<forall> a\<in>set xs. \<forall> b\<in>\<lbrakk>a\<rbrakk>\<^sub>S. b \<in> set ys)"
821+
apply (rule iffI)
822+
using assms(1,2) scene_foldr_decomp_le_Vars apply blast
823+
apply (rule scene_space_foldr_lb)
824+
using assms(2) scene_space_vars_decomp_iff apply blast
825+
using assms(1) apply blast
826+
apply (metis assms(1,2) decomp_foldr_scene scene_union_foldr_subset subset_iff)
827+
done
828+
829+
lemma scene_decomp_foldr:
830+
assumes "set xs \<subseteq> set Vars" "\<bottom>\<^sub>S \<notin> set xs"
831+
shows "\<lbrakk>\<Squnion>\<^sub>S xs\<rbrakk>\<^sub>S = set xs"
832+
by (metis assms(1,2) decomp_Vars decomp_foldr_scene decomp_nbot foldr_scene_eq_then_eq mem_Vars_scene_space scene_space_foldr)
833+
834+
lemma scene_decomp_foldr_nbot:
835+
assumes "set xs \<subseteq> set Vars"
836+
shows "\<lbrakk>\<Squnion>\<^sub>S xs\<rbrakk>\<^sub>S = set xs - {\<bottom>\<^sub>S}"
837+
by (metis Diff_iff assms insert_Diff insert_subset removeAll_id scene_decomp_foldr scene_union_foldr_remove_element scene_union_unit(2) set_removeAll singletonI)
838+
839+
lemma scene_decomp_top:
840+
"\<lbrakk>\<top>\<^sub>S\<rbrakk>\<^sub>S = set Vars - {\<bottom>\<^sub>S}"
841+
by (metis Diff_empty Diff_iff Diff_insert0 Diff_subset insertCI scene_decomp_foldr set_removeAll top_scene_eq uminus_bot_scene uminus_var_other_vars)
842+
843+
lemma scene_decomp_bot:
844+
"\<lbrakk>\<bottom>\<^sub>S\<rbrakk>\<^sub>S = {}"
845+
by (metis bot.extremum empty_iff foldr.simps(1) id_apply list.set(1) scene_decomp_foldr)
846+
847+
lemma scene_decomp_union:
848+
assumes "a \<in> scene_space" "b \<in> scene_space"
849+
shows "\<lbrakk>a \<squnion>\<^sub>S b\<rbrakk>\<^sub>S = \<lbrakk>a\<rbrakk>\<^sub>S \<union> \<lbrakk>b\<rbrakk>\<^sub>S"
850+
proof -
851+
obtain xs where xs:"set xs \<subseteq> set Vars" "\<bottom>\<^sub>S \<notin> set xs" "a = \<Squnion>\<^sub>S xs"
852+
by (metis assms(1) decomp_Vars decomp_foldr_scene decomp_nbot foldr_scene_union_remdups set_remdups)
853+
obtain ys where ys:"set ys \<subseteq> set Vars" "\<bottom>\<^sub>S \<notin> set ys" "b = \<Squnion>\<^sub>S ys"
854+
by (metis assms(2) decomp_Vars decomp_foldr_scene decomp_nbot foldr_scene_union_remdups set_remdups)
855+
from xs ys have "\<Squnion>\<^sub>S xs \<squnion>\<^sub>S \<Squnion>\<^sub>S ys = \<Squnion>\<^sub>S (xs @ ys)"
856+
using union_scene_space_foldrs by blast
857+
with xs ys have "\<lbrakk>a \<squnion>\<^sub>S b\<rbrakk>\<^sub>S = set xs \<union> set ys"
858+
by (metis Un_iff le_sup_iff scene_decomp_foldr set_append)
859+
also have "... = \<lbrakk>a\<rbrakk>\<^sub>S \<union> \<lbrakk>b\<rbrakk>\<^sub>S"
860+
by (simp add: scene_decomp_foldr xs ys)
861+
finally show ?thesis .
862+
qed
863+
864+
lemma scene_decomp_uminus:
865+
assumes "a \<in> scene_space"
866+
shows "\<lbrakk>- a\<rbrakk>\<^sub>S = set Vars - \<lbrakk>a\<rbrakk>\<^sub>S - {\<bottom>\<^sub>S}"
867+
proof -
868+
obtain xs where xs:"set xs \<subseteq> set Vars" "\<bottom>\<^sub>S \<notin> set xs" "a = \<Squnion>\<^sub>S xs"
869+
by (metis assms(1) decomp_Vars decomp_foldr_scene decomp_nbot foldr_scene_union_remdups set_remdups)
870+
thm uminus_vars_other_vars
871+
hence "\<lbrakk>- a\<rbrakk>\<^sub>S = \<lbrakk>\<Squnion>\<^sub>S (filter (\<lambda>x. x \<notin> set xs) Vars)\<rbrakk>\<^sub>S"
872+
by (simp add: uminus_vars_other_vars)
873+
also have "... = set(filter (\<lambda>x. x \<notin> set xs) Vars) - {\<bottom>\<^sub>S}"
874+
by (metis (no_types, lifting) Diff_iff filter_filter filter_is_subset insertCI scene_decomp_foldr scene_union_foldr_remove_element scene_union_unit(2) set_minus_filter_out
875+
set_removeAll)
876+
also have "... = set Vars - \<lbrakk>a\<rbrakk>\<^sub>S - {\<bottom>\<^sub>S}"
877+
by (metis (full_types) scene_decomp_foldr set_diff_eq set_filter xs)
878+
finally show ?thesis .
879+
qed
880+
881+
lemma scene_decomp_inter:
882+
assumes "a \<in> scene_space" "b \<in> scene_space"
883+
shows "\<lbrakk>a \<sqinter>\<^sub>S b\<rbrakk>\<^sub>S = \<lbrakk>a\<rbrakk>\<^sub>S \<inter> \<lbrakk>b\<rbrakk>\<^sub>S"
884+
proof -
885+
have "\<lbrakk>a \<sqinter>\<^sub>S b\<rbrakk>\<^sub>S = \<lbrakk>- (- a \<squnion>\<^sub>S - b)\<rbrakk>\<^sub>S"
886+
by (simp add: inf_scene_def)
887+
also have "... = set Vars - (set Vars - \<lbrakk>a\<rbrakk>\<^sub>S - {\<bottom>\<^sub>S} \<union> (set Vars - \<lbrakk>b\<rbrakk>\<^sub>S - {\<bottom>\<^sub>S})) - {\<bottom>\<^sub>S}"
888+
by (simp add: scene_decomp_uminus scene_decomp_union assms union_scene_space scene_space_uminus )
889+
also have "... = \<lbrakk>a\<rbrakk>\<^sub>S \<inter> \<lbrakk>b\<rbrakk>\<^sub>S"
890+
using assms decomp_Vars by force
891+
finally show ?thesis .
892+
qed
893+
894+
lemma scene_decomp_foldr_scene:
895+
assumes "set xs \<subseteq> scene_space"
896+
shows "\<lbrakk>\<Squnion>\<^sub>S xs\<rbrakk>\<^sub>S = \<Union> (scene_decomp ` set xs)"
897+
using assms
898+
proof (induct xs)
899+
case Nil
900+
then show ?case
901+
by (simp add: scene_decomp_bot)
902+
next
903+
case (Cons a xs)
904+
then show ?case
905+
by (simp add: scene_decomp_union scene_space_foldr)
906+
qed
907+
908+
lemmas scene_decomp_transfer = scene_decomp_top scene_decomp_bot scene_decomp_union scene_decomp_uminus scene_decomp_inter
909+
792910
subsection \<open> Mapping a lens over a scene list \<close>
793911

794912
definition map_lcomp :: "'b scene list \<Rightarrow> ('b \<Longrightarrow> 'a) \<Rightarrow> 'a scene list" where
@@ -850,6 +968,21 @@ proof -
850968
by (metis Sup_scene_def assms foldr_scene_union_eq_scene_space inf.absorb_iff1)
851969
qed
852970

971+
lemma Sup_scene_decomp_transfer:
972+
assumes "A \<subseteq> scene_space"
973+
shows "\<lbrakk>\<Union>\<^sub>S A\<rbrakk>\<^sub>S = (\<Union>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S)"
974+
proof -
975+
obtain xs where xs: "set xs = A"
976+
by (metis assms finite_list finite_scene_space rev_finite_subset)
977+
have "\<lbrakk>\<Union>\<^sub>S A\<rbrakk>\<^sub>S = \<lbrakk>\<Squnion>\<^sub>S xs\<rbrakk>\<^sub>S"
978+
by (metis Sup_scene_is_foldr_scene assms xs)
979+
also have "... = \<Union> (scene_decomp ` set xs)"
980+
using assms scene_decomp_foldr_scene xs by blast
981+
also have "... = (\<Union>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S)"
982+
by (simp add: Setcompr_eq_image xs)
983+
finally show ?thesis .
984+
qed
985+
853986
lemma Sup_scene_closed: "\<Union>\<^sub>S A \<in> scene_space"
854987
unfolding Sup_scene_def proof -
855988
fix A :: "'a scene set"
@@ -871,6 +1004,39 @@ definition Inf_scene :: "'a::scene_space scene set \<Rightarrow> 'a scene" where
8711004

8721005
notation Inf_scene ("\<Inter>\<^sub>S")
8731006

1007+
find_theorems uminus "(\<Union>)"
1008+
1009+
lemma Inf_scene_decomp_transfer:
1010+
assumes "A \<subseteq> scene_space" "A \<noteq> {}"
1011+
shows "\<lbrakk>\<Inter>\<^sub>S A\<rbrakk>\<^sub>S = (\<Inter>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S)"
1012+
proof -
1013+
have "\<lbrakk>\<Inter>\<^sub>S A\<rbrakk>\<^sub>S = \<lbrakk>- (\<Union>\<^sub>S (uminus ` A))\<rbrakk>\<^sub>S"
1014+
by (simp add: Inf_scene_def)
1015+
also have "... = set Vars - \<Union> {\<lbrakk>a\<rbrakk>\<^sub>S |a. a \<in> uminus ` A} - {\<bottom>\<^sub>S}"
1016+
proof -
1017+
have "uminus ` A \<subseteq> scene_space"
1018+
by (metis assms(1) image_mono uminus_image_scene_space)
1019+
thus ?thesis
1020+
by (auto simp add: scene_decomp_uminus Sup_scene_decomp_transfer Sup_scene_closed assms)
1021+
qed
1022+
also have "... = set Vars \<inter> - \<Union> ((scene_decomp \<circ> uminus) ` A) \<inter> - {\<bottom>\<^sub>S}"
1023+
by auto
1024+
also from assms scene_decomp_uminus have "... = (set Vars \<inter> (\<Inter>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S)) \<inter> - {\<bottom>\<^sub>S}"
1025+
by auto
1026+
also from assms scene_decomp_uminus have "... = (\<Inter>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S) \<inter> - {\<bottom>\<^sub>S}"
1027+
proof -
1028+
have "\<forall> x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S \<subseteq> set Vars"
1029+
using assms decomp_Vars by blast
1030+
with assms(2) have "(\<Inter>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S) \<subseteq> set Vars"
1031+
by blast
1032+
thus ?thesis
1033+
by auto
1034+
qed
1035+
also from assms have "... = (\<Inter>x\<in>A. \<lbrakk>x\<rbrakk>\<^sub>S)"
1036+
by (metis INF_eq_const INT_E decomp_nbot in_mono inf.order_iff subset_Compl_singleton)
1037+
finally show ?thesis .
1038+
qed
1039+
8741040
lemma Inf_scene_top: "\<Inter>\<^sub>S {} = top_class.top"
8751041
by (simp add: Inf_scene_def)
8761042

0 commit comments

Comments
 (0)