@@ -773,16 +773,21 @@ 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 : "\<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"
777
777
using basis_lens.intro basis_lens_axioms.intro by blast
778
778
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
+
779
784
subsection \<open> Composite lenses \<close>
780
785
781
786
locale composite_lens = vwb_lens +
782
787
assumes comp_in_Vars : "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq> set Vars"
783
788
begin
784
789
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"
786
791
using comp_in_Vars by blast
787
792
788
793
lemma scene_space_closed_comp :
808
813
809
814
end
810
815
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
+
811
826
lemma composite_implies_var_lens [ simp ]:
812
827
"composite_lens x \<Longrightarrow> var_lens x"
813
828
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,13 @@ lemma composite_lens_comp [simp]:
820
835
821
836
lemma comp_composite_lens [ simp ]:
822
837
"\<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
+ using composite_lens.Vars_closed_comp scene_comp_assoc sledgehammer
825
839
826
840
text \<open> A basis lens within a composite lens remains a basis lens (i.e. it remains atomic) \<close>
827
841
828
842
lemma composite_lens_basis_comp [ simp ]:
829
843
"\<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 )
844
+ using lens_scene_comp by blast
831
845
832
846
lemma id_composite_lens : "composite_lens 1\<^sub>L"
833
847
by ( force intro : composite_lens.intro composite_lens_axioms.intro )
@@ -836,6 +850,7 @@ lemma fst_composite_lens: "composite_lens fst\<^sub>L"
836
850
by ( rule composite_lens.intro , simp add : fst_vwb_lens , rule composite_lens_axioms.intro , simp add : Vars_prod_def )
837
851
838
852
lemma 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 )
853
+ by ( intro composite_lens.intro composite_lens_axioms.intro ;
854
+ simp add : snd_vwb_lens Vars_prod_def )
840
855
841
856
end
0 commit comments