@@ -773,19 +773,24 @@ abbreviation (input) ebasis_lens :: "('a::two \<Longrightarrow> 's::scene_space)
773773lemma basis_then_var [ simp ]: "basis_lens x \<Longrightarrow> var_lens x"
774774 using basis_lens.lens_in_basis basis_lens_def var_lens_axioms_def var_lens_def by blast
775775
776- lemma basis_lens_intro : "\<lbrakk> vwb_lens x; \<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> set Vars \<rbrakk> \<Longrightarrow> basis_lens x"
776+ lemma basis_lens_intro [ intro ] : "\<lbrakk> vwb_lens x; \<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> set Vars \<rbrakk> \<Longrightarrow> basis_lens x"
777777 using basis_lens.intro basis_lens_axioms.intro by blast
778778
779+ lemma basis_lensE [ elim ]:
780+ assumes "basis_lens x"
781+ obtains "vwb_lens x" "\<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> set Vars"
782+ by ( simp add : assms )
783+
779784subsection \<open> Composite lenses \<close>
780785
781786locale composite_lens = vwb_lens +
782787 assumes comp_in_Vars : "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq> set Vars"
783788begin
784789
785- lemma Vars_closed_comp : "a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in> set Vars"
790+ lemma Vars_closed_comp [ intro ] : "a \<in> set Vars \<Longrightarrow> a ;\<^sub>S x \<in> set Vars"
786791 using comp_in_Vars by blast
787792
788- lemma scene_space_closed_comp :
793+ lemma scene_space_closed_comp [ intro ] :
789794 assumes "a \<in> scene_space"
790795 shows "a ;\<^sub>S x \<in> scene_space"
791796proof -
808813
809814end
810815
816+ lemma composite_lensI [ intro ]:
817+ assumes "vwb_lens x" "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq> set Vars"
818+ shows "composite_lens x"
819+ by ( intro composite_lens.intro composite_lens_axioms.intro ; simp add : assms )
820+
821+ lemma composite_lensE [ elim ]:
822+ 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
825+
811826lemma composite_implies_var_lens [ simp ]:
812827 "composite_lens x \<Longrightarrow> var_lens x"
813828 by ( metis composite_lens.axioms ( 1 ) composite_lens.scene_space_closed_comp scene_comp_top_scene top_scene_space var_lens_axioms.intro var_lens_def )
@@ -820,14 +835,15 @@ lemma composite_lens_comp [simp]:
820835
821836lemma comp_composite_lens [ simp ]:
822837 "\<lbrakk> composite_lens a; composite_lens x \<rbrakk> \<Longrightarrow> composite_lens (x ;\<^sub>L a)"
823- by ( auto intro !: composite_lens.intro simp add : composite_lens_axioms_def )
824- ( metis composite_lens.Vars_closed_comp composite_lens.axioms ( 1 ) scene_comp_assoc )
838+ apply ( auto intro !: composite_lensI elim !: composite_lensE simp : image_subset_iff )
839+ apply ( metis scene_comp_assoc )
840+ done
825841
826842text \<open> A basis lens within a composite lens remains a basis lens (i.e. it remains atomic) \<close>
827843
828844lemma composite_lens_basis_comp [ simp ]:
829845 "\<lbrakk> composite_lens a; basis_lens x \<rbrakk> \<Longrightarrow> basis_lens (x ;\<^sub>L a)"
830- by ( metis basis_lens.lens_in_basis basis_lens_def basis_lens_intro comp_vwb_lens composite_lens.Vars_closed_comp composite_lens_def lens_scene_comp )
846+ using lens_scene_comp by blast
831847
832848lemma id_composite_lens : "composite_lens 1\<^sub>L"
833849 by ( force intro : composite_lens.intro composite_lens_axioms.intro )
@@ -836,6 +852,7 @@ lemma fst_composite_lens: "composite_lens fst\<^sub>L"
836852 by ( rule composite_lens.intro , simp add : fst_vwb_lens , rule composite_lens_axioms.intro , simp add : Vars_prod_def )
837853
838854lemma snd_composite_lens : "composite_lens snd\<^sub>L"
839- by ( rule composite_lens.intro , simp add : snd_vwb_lens , rule composite_lens_axioms.intro , simp add : Vars_prod_def )
855+ by ( intro composite_lens.intro composite_lens_axioms.intro ;
856+ simp add : snd_vwb_lens Vars_prod_def )
840857
841858end
0 commit comments