diff --git a/iris/proofmode/ltac_tactics.v b/iris/proofmode/ltac_tactics.v index da05cdfcbba867c79d5cf93d3a698dacdff67d31..9aa8bc7668003f14a4b1f67ae228fb75df9c7a64 100644 --- a/iris/proofmode/ltac_tactics.v +++ b/iris/proofmode/ltac_tactics.v @@ -371,21 +371,23 @@ Tactic Notation "iPureIntro" := |]. (** Framing *) -Local Ltac iFrameFinish := +(** Helper tactics are exposed for users that build their own custom framing +logic *) +Ltac iFrameFinish := pm_prettify; try match goal with | |- envs_entails _ True => by iPureIntro | |- envs_entails _ emp => iEmpIntro end. -Local Ltac iFramePure t := +Ltac iFramePure t := iStartProof; let φ := type of t in eapply (tac_frame_pure _ _ _ _ t); [iSolveTC || fail "iFrame: cannot frame" φ |iFrameFinish]. -Local Ltac iFrameHyp H := +Ltac iFrameHyp H := iStartProof; eapply tac_frame with H _ _ _; [pm_reflexivity || @@ -396,10 +398,10 @@ Local Ltac iFrameHyp H := fail "iFrame: cannot frame" R |pm_reduce; iFrameFinish]. -Local Ltac iFrameAnyPure := +Ltac iFrameAnyPure := repeat match goal with H : _ |- _ => iFramePure H end. -Local Ltac iFrameAnyIntuitionistic := +Ltac iFrameAnyIntuitionistic := iStartProof; let rec go Hs := match Hs with [] => idtac | ?H :: ?Hs => repeat iFrameHyp H; go Hs end in @@ -408,7 +410,7 @@ Local Ltac iFrameAnyIntuitionistic := let Hs := eval cbv in (env_dom (env_intuitionistic Δ)) in go Hs end. -Local Ltac iFrameAnySpatial := +Ltac iFrameAnySpatial := iStartProof; let rec go Hs := match Hs with [] => idtac | ?H :: ?Hs => try iFrameHyp H; go Hs end in