Skip to content

Commit 0182504

Browse files
committed
Add introduction and elimination laws to Scene_Spaces
1 parent f2a99a1 commit 0182504

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

Lens_Order.thy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ text \<open>Using our preorder, we can also derive an equivalence on lenses as f
9292
definition lens_equiv :: "('a \<Longrightarrow> 'c) \<Rightarrow> ('b \<Longrightarrow> 'c) \<Rightarrow> bool" (infix "\<approx>\<^sub>L" 51) where
9393
[lens_defs]: "lens_equiv X Y = (X \<subseteq>\<^sub>L Y \<and> Y \<subseteq>\<^sub>L X)"
9494

95-
lemma lens_equivI [intro]:
95+
lemma lens_equivI [intro?]:
9696
"\<lbrakk> X \<subseteq>\<^sub>L Y; Y \<subseteq>\<^sub>L X \<rbrakk> \<Longrightarrow> X \<approx>\<^sub>L Y"
9797
by (simp add: lens_equiv_def)
9898

Scene_Spaces.thy

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -773,16 +773,21 @@ abbreviation (input) ebasis_lens :: "('a::two \<Longrightarrow> 's::scene_space)
773773
lemma 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+
779784
subsection \<open> Composite lenses \<close>
780785

781786
locale composite_lens = vwb_lens +
782787
assumes comp_in_Vars: "(\<lambda> a. a ;\<^sub>S x) ` set Vars \<subseteq> set Vars"
783788
begin
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

788793
lemma scene_space_closed_comp:
@@ -808,6 +813,16 @@ qed
808813

809814
end
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+
811826
lemma 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,13 @@ lemma composite_lens_comp [simp]:
820835

821836
lemma 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+
using composite_lens.Vars_closed_comp scene_comp_assoc sledgehammer
825839

826840
text \<open> A basis lens within a composite lens remains a basis lens (i.e. it remains atomic) \<close>
827841

828842
lemma composite_lens_basis_comp [simp]:
829843
"\<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
831845

832846
lemma id_composite_lens: "composite_lens 1\<^sub>L"
833847
by (force intro: composite_lens.intro composite_lens_axioms.intro)
@@ -836,6 +850,7 @@ lemma fst_composite_lens: "composite_lens fst\<^sub>L"
836850
by (rule composite_lens.intro, simp add: fst_vwb_lens, rule composite_lens_axioms.intro, simp add: Vars_prod_def)
837851

838852
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)
840855

841856
end

0 commit comments

Comments
 (0)