Skip to content

Commit b488231

Browse files
committed
Improve automation for scene_spaces and fix proofs that broke
1 parent 6970f9a commit b488231

File tree

4 files changed

+23
-31
lines changed

4 files changed

+23
-31
lines changed

Alphabet_Scene_Space_Examples.thy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ alphabet test =
99
y :: nat
1010
z :: "int list"
1111

12+
(* TODO: figure out why it's re-declaring the intro rule *)
1213
alphabet_scene_space test
1314

1415
lemma "UNIV\<^sub>F(test) = \<lbrace>x, y, z\<rbrace>\<^sub>F"

Alphabet_Scene_Spaces.thy

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,10 @@ lemmas scene_space_lemmas =
125125
lens_indep_left_ext lens_indep_right_ext
126126

127127
method basis_lens uses defs =
128-
(rule basis_lens_intro, simp_all add: scene_space_defs alpha_scene_space_def alpha_scene_space'_def scene_space_lemmas)
128+
(auto intro!: basis_lensI simp: scene_space_defs alpha_scene_space_def alpha_scene_space'_def scene_space_lemmas)
129129

130130
method composite_lens =
131-
(rule composite_lens.intro, simp, rule composite_lens_axioms.intro
132-
,simp add: scene_space_defs alpha_scene_space_def alpha_scene_space'_def scene_space_lemmas image_comp)
131+
(auto intro!: composite_lensI simp add: scene_space_defs alpha_scene_space_def alpha_scene_space'_def scene_space_lemmas image_comp)
133132

134133
method more_frame =
135134
((simp add: frame_scene_top frame_scene_foldr)?

Frames.thy

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ lemma UNIV_frame_scene_space: "UNIV = mk_frame ` scene_space"
1818
by (metis of_frame of_frame_inverse UNIV_eq_I imageI)
1919

2020
lemma idem_scene_frame [simp]: "idem_scene \<lbrakk>A\<rbrakk>\<^sub>F"
21-
by (simp add: idem_scene_space of_frame)
21+
by (simp add: of_frame)
2222

2323
lemma compat_frames [simp]: "\<lbrakk>A\<rbrakk>\<^sub>F ##\<^sub>S \<lbrakk>B\<rbrakk>\<^sub>F"
2424
by (simp add: of_frame scene_space_compat)
@@ -357,7 +357,7 @@ proof (transfer)
357357
have "s\<^sub>1 \<oplus>\<^sub>S (s\<^sub>1 \<oplus>\<^sub>S s\<^sub>3 on a) on b = s\<^sub>1 \<oplus>\<^sub>S (s\<^sub>1 \<oplus>\<^sub>S (s\<^sub>3 \<oplus>\<^sub>S s\<^sub>2 on b) on a) on b"
358358
using "1" by auto
359359
also from 1 2 3 a b have "... = s\<^sub>1 \<oplus>\<^sub>S (s\<^sub>1 \<oplus>\<^sub>S s\<^sub>2 on a) on b"
360-
by (metis scene_inter_commute scene_override_inter scene_override_overshadow_right scene_space_compat scene_space_uminus)
360+
by (smt (verit) scene_inter_commute scene_override_inter scene_override_overshadow_right scene_space_compat scene_space_uminus)
361361
also have "... = s\<^sub>1 \<oplus>\<^sub>S s\<^sub>1 on b"
362362
using 2 by auto
363363
also have "... = s\<^sub>1"
@@ -370,7 +370,6 @@ lemma frame_equiv_trans: "\<lbrakk> s\<^sub>1 \<approx>\<^sub>F s\<^sub>2 on a;
370370
by (transfer)
371371
(metis scene_equiv_def scene_override_overshadow_right)
372372

373-
374373
lemma put_eq_ebasis_lens_notin:
375374
"\<lbrakk> ebasis_lens x; s\<^sub>1 \<approx>\<^sub>F s\<^sub>2 on A; x \<notin>\<^sub>F A \<rbrakk> \<Longrightarrow> put\<^bsub>x\<^esub> s\<^sub>1 v \<approx>\<^sub>F put\<^bsub>x\<^esub> s\<^sub>2 v on A"
376375
by (simp add: basis_lens_not_member_indep, transfer)

Scene_Spaces.thy

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ 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 [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"
777777
using basis_lens.intro basis_lens_axioms.intro by blast
778778

779779
lemma basis_lensE [elim]:
@@ -782,46 +782,40 @@ lemma basis_lensE [elim]:
782782
by (simp add: assms)
783783

784784
subsection \<open> Composite lenses \<close>
785-
786785
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"
788787
begin
789788

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-
793789
lemma scene_space_closed_comp [intro]:
794790
assumes "a \<in> scene_space"
795791
shows "a ;\<^sub>S x \<in> scene_space"
796792
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)
806801
qed
807802

808803
sublocale var_lens
809804
proof
810805
show "\<lbrakk>x\<rbrakk>\<^sub>\<sim> \<in> scene_space"
811806
by (metis scene_comp_top_scene scene_space_closed_comp top_scene_space vwb_lens_axioms)
812807
qed
813-
814808
end
815809

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"
818812
shows "composite_lens x"
819813
by (intro composite_lens.intro composite_lens_axioms.intro; simp add: assms)
820814

821815
lemma composite_lensE [elim]:
822816
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
825819

826820
lemma composite_implies_var_lens [simp]:
827821
"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
831825

832826
lemma composite_lens_comp [simp]:
833827
"\<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)
835830

836831
lemma comp_composite_lens [simp]:
837832
"\<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)
841834

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

844837
lemma composite_lens_basis_comp [simp]:
845838
"\<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
847840

848841
lemma id_composite_lens: "composite_lens 1\<^sub>L"
849842
by (force intro: composite_lens.intro composite_lens_axioms.intro)

0 commit comments

Comments
 (0)