diff --git a/theories/proofmode/coq_tactics.v b/theories/proofmode/coq_tactics.v index 5720969d26d6c903f7ed5643e79ac01c9d009170..50d3c69880b399ca0a05a319564bac9bcd051ef5 100644 --- a/theories/proofmode/coq_tactics.v +++ b/theories/proofmode/coq_tactics.v @@ -326,18 +326,18 @@ Proof. rewrite envs_entails_eq=> ->. by rewrite -lock -True_sep_2. Qed. Lemma tac_unlock Δ Q : envs_entails Δ Q → envs_entails Δ (locked Q). Proof. by unlock. Qed. -Lemma tac_specialize_frame Δ j q R P1 P2 P1' Q Q' : +Lemma tac_specialize_frame Δ j (q am : bool) R P1 P2 P1' Q Q' : envs_lookup j Δ = Some (q, R) → IntoWand q false R P1 P2 → - AddModal P1' P1 Q → + (if am then AddModal P1' P1 Q else TCEq P1' P1) → envs_entails (envs_delete true j q Δ) (P1' ∗ locked Q') → Q' = (P2 -∗ Q)%I → envs_entails Δ Q. Proof. - rewrite envs_entails_eq. intros ??? HPQ ->. + rewrite envs_entails_eq. intros ?? Hmod HPQ ->. rewrite envs_lookup_sound //. rewrite HPQ -lock. - rewrite (into_wand q false) -{2}(add_modal P1' P1 Q). cancel [P1']. - apply wand_intro_l. by rewrite assoc !wand_elim_r. + rewrite (into_wand q false) /= assoc -(comm _ P1') -assoc wand_trans. + destruct am; [done|destruct Hmod]. by rewrite wand_elim_r. Qed. Lemma tac_specialize_assert_pure Δ j q a R P1 P2 φ Q : diff --git a/theories/proofmode/ltac_tactics.v b/theories/proofmode/ltac_tactics.v index db77fe7dd38966d35d2aa715fe8e23102cd0c2f9..d1d785a895468a417536877a1568acd9e161d47a 100644 --- a/theories/proofmode/ltac_tactics.v +++ b/theories/proofmode/ltac_tactics.v @@ -932,15 +932,13 @@ Ltac iSpecializePat_go H1 pats := |pm_reduce; solve [iFrame "∗ #"] |pm_reduce; iSpecializePat_go H1 pats] | SAutoFrame ?m :: ?pats => - notypeclasses refine (tac_specialize_frame _ H1 _ _ _ _ _ _ _ _ _ _ _ _); + notypeclasses refine (tac_specialize_frame _ H1 _ + (if m is GModal then true else false) _ _ _ _ _ _ _ _ _ _ _); [pm_reflexivity || let H1 := pretty_ident H1 in fail "iSpecialize:" H1 "not found" |solve_to_wand H1 - |lazymatch m with - | GSpatial => class_apply add_modal_id - | GModal => iSolveTC || fail "iSpecialize: goal not a modality" - end + |iSolveTC || fail "iSpecialize: goal not a modality" |pm_reduce; first [notypeclasses refine (tac_unlock_emp _ _ _)