@@ -773,7 +773,7 @@ abbreviation (input) ebasis_lens :: "('a::two \<Longrightarrow> 's::scene_space)
773
773
lemma basis_then_var [ simp ]: "basis_lens x \<Longrightarrow> var_lens x"
774
774
using basis_lens.lens_in_basis basis_lens_def var_lens_axioms_def var_lens_def by blast
775
775
776
- lemma basis_lens_intro [ intro ]: "\<lbrakk> vwb_lens x; \<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> set Vars \<rbrakk> \<Longrightarrow> basis_lens x"
776
+ lemma basis_lensI [ intro ]: "\<lbrakk> vwb_lens x; \<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> set Vars \<rbrakk> \<Longrightarrow> basis_lens x"
777
777
using basis_lens.intro basis_lens_axioms.intro by blast
778
778
779
779
lemma basis_lensE [ elim ]:
@@ -782,46 +782,40 @@ lemma basis_lensE [elim]:
782
782
by ( simp add : assms )
783
783
784
784
subsection \<open> Composite lenses \<close>
785
-
786
785
locale composite_lens = vwb_lens +
787
- assumes comp_in_Vars : "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq > set Vars"
786
+ assumes comp_in_Vars : "\<And> a. a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in > set Vars"
788
787
begin
789
788
790
- lemma Vars_closed_comp [ intro ]: "a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in> set Vars"
791
- using comp_in_Vars by blast
792
-
793
789
lemma scene_space_closed_comp [ intro ]:
794
790
assumes "a \<in> scene_space"
795
791
shows "a ;\<^sub>S x \<in> scene_space"
796
792
proof -
797
- obtain xs where xs : "a = \<Squnion>\<^sub>S xs" "set xs \<subseteq> set Vars"
798
- using assms scene_space_vars_decomp by blast
799
- have "(\<Squnion>\<^sub>S xs) ;\<^sub>S x = \<Squnion>\<^sub>S (map (\<lambda> a. a ;\<^sub>S x) xs)"
800
- by ( metis foldr_compat_dist pairwise_subset scene_space_compats xs ( 2 ))
801
- also have "... \<in> scene_space"
802
- by ( auto simp add : scene_space_vars_decomp_iff )
803
- ( metis comp_in_Vars image_Un le_iff_sup le_supE list.set_map xs ( 2 ))
804
- finally show ?thesis
805
- by ( simp add : xs )
793
+ obtain xs where xs : "set xs \<subseteq> set Vars" "a = \<Squnion>\<^sub>S xs"
794
+ using scene_space_vars_decomp_iff assms by blast
795
+ then have "b \<in> set xs \<Longrightarrow> b ;\<^sub>S x \<in> scene_space" for b
796
+ using comp_in_Vars by blast
797
+ then have "\<Squnion>\<^sub>S (map (\<lambda>y. y ;\<^sub>S x) xs) \<in> scene_space"
798
+ by ( auto intro !: scene_space_foldr )
799
+ then show "a ;\<^sub>S x \<in> scene_space"
800
+ by ( simp add : xs foldr_compat_dist pairwise_compat_Vars_subset )
806
801
qed
807
802
808
803
sublocale var_lens
809
804
proof
810
805
show "\<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> scene_space"
811
806
by ( metis scene_comp_top_scene scene_space_closed_comp top_scene_space vwb_lens_axioms )
812
807
qed
813
-
814
808
end
815
809
816
- lemma composite_lensI [ intro ] :
817
- assumes "vwb_lens x" "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq > set Vars"
810
+ lemma composite_lensI :
811
+ assumes "vwb_lens x" "\<And> a. a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in > set Vars"
818
812
shows "composite_lens x"
819
813
by ( intro composite_lens.intro composite_lens_axioms.intro ; simp add : assms )
820
814
821
815
lemma composite_lensE [ elim ]:
822
816
assumes "composite_lens x"
823
- obtains "vwb_lens x" "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq> set Vars "
824
- using assms composite_lens.Vars_closed_comp composite_lens_def by blast
817
+ shows "((\<And> a. a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in> set Vars) \<Longrightarrow> vwb_lens x \<Longrightarrow> P) \<Longrightarrow> P "
818
+ using assms composite_lens.axioms ( 1 ) composite_lens.comp_in_Vars by blast
825
819
826
820
lemma composite_implies_var_lens [ simp ]:
827
821
"composite_lens x \<Longrightarrow> var_lens x"
@@ -831,19 +825,18 @@ text \<open> The extension of any lens in the scene space remains in the scene s
831
825
832
826
lemma composite_lens_comp [ simp ]:
833
827
"\<lbrakk> composite_lens a; var_lens x \<rbrakk> \<Longrightarrow> var_lens (x ;\<^sub>L a)"
834
- by ( metis comp_vwb_lens composite_lens.scene_space_closed_comp composite_lens_def lens_scene_comp var_lens_axioms_def var_lens_def )
828
+ by ( metis comp_vwb_lens composite_lens.scene_space_closed_comp composite_lens_def lens_scene_comp
829
+ var_lens_axioms_def var_lens_def )
835
830
836
831
lemma comp_composite_lens [ simp ]:
837
832
"\<lbrakk> composite_lens a; composite_lens x \<rbrakk> \<Longrightarrow> composite_lens (x ;\<^sub>L a)"
838
- apply ( auto intro !: composite_lensI elim !: composite_lensE simp : image_subset_iff )
839
- apply ( metis scene_comp_assoc )
840
- done
833
+ by ( metis comp_vwb_lens composite_lens_axioms_def composite_lens_def scene_comp_assoc )
841
834
842
835
text \<open> A basis lens within a composite lens remains a basis lens (i.e. it remains atomic) \<close>
843
836
844
837
lemma composite_lens_basis_comp [ simp ]:
845
838
"\<lbrakk> composite_lens a; basis_lens x \<rbrakk> \<Longrightarrow> basis_lens (x ;\<^sub>L a)"
846
- using lens_scene_comp by blast
839
+ using lens_scene_comp by force
847
840
848
841
lemma id_composite_lens : "composite_lens 1\<^sub>L"
849
842
by ( force intro : composite_lens.intro composite_lens_axioms.intro )
0 commit comments