diff --git a/proofmode/tactics.v b/proofmode/tactics.v index 68c2be3f228d2ea044c60c9939346fb1f434b38f..2573e648592b19e2d71aeeb8b9923298f1d5c6ed 100644 --- a/proofmode/tactics.v +++ b/proofmode/tactics.v @@ -53,15 +53,13 @@ Tactic Notation "iClear" constr(Hs) := let rec go Hs := match Hs with | [] => idtac + | "★" :: ?Hs => eapply tac_clear_spatial; [env_cbv; reflexivity|go Hs] | ?H :: ?Hs => eapply tac_clear with _ H _ _; (* (i:=H) *) [env_cbv; reflexivity || fail "iClear:" H "not found"|go Hs] end in let Hs := words Hs in go Hs. -Tactic Notation "iClear" "★" := - eapply tac_clear_spatial; [env_cbv; reflexivity|]. - (** * Assumptions *) Tactic Notation "iExact" constr(H) := eapply tac_assumption with H _ _; (* (i:=H) *) @@ -373,8 +371,6 @@ Tactic Notation "iApply" open_constr (H) "{" open_constr(x1) open_constr(x2) iSpecialize H { x1 x2 x3 x4 x5 x6 x7 x8 }; last iApply H Hs. (** * Revert *) -Tactic Notation "iRevert" "★" := eapply tac_revert_spatial; env_cbv. - Local Tactic Notation "iForallRevert" ident(x) := let A := type of x in lazymatch type of A with @@ -382,14 +378,17 @@ Local Tactic Notation "iForallRevert" ident(x) := | _ => revert x; apply tac_forall_revert end || fail "iRevert: cannot revert" x. -Local Tactic Notation "iImplRevert" constr(H) := - eapply tac_revert with _ H _ _; (* (i:=H) *) - [env_cbv; reflexivity || fail "iRevert:" H "not found" - |env_cbv]. - Tactic Notation "iRevert" constr(Hs) := let rec go H2s := - match H2s with [] => idtac | ?H2 :: ?H2s => go H2s; iImplRevert H2 end in + match H2s with + | [] => idtac + | "★" :: ?H2s => go H2s; eapply tac_revert_spatial; env_cbv + | ?H2 :: ?H2s => + go H2s; + eapply tac_revert with _ H2 _ _; (* (i:=H2) *) + [env_cbv; reflexivity || fail "iRevert:" H2 "not found" + |env_cbv] + end in let Hs := words Hs in go Hs. Tactic Notation "iRevert" "{" ident(x1) "}" := @@ -769,12 +768,12 @@ idents I do not know how to do this better. *) Local Ltac iLöbCore IH tac_before tac_after := match goal with | |- of_envs ?Δ ⊢ _ => - let Hs := constr:(rev (env_dom_list (env_spatial Δ))) in - iRevert ★; tac_before; + let Hs := constr:(reverse (env_dom_list (env_spatial Δ))) in + iRevert ["★"]; tac_before; eapply tac_löb with _ IH; [reflexivity |env_cbv; reflexivity || fail "iLöb:" IH "not fresh"|]; - tac_after; iIntros Hs + tac_after; iIntros Hs end. Tactic Notation "iLöb" "as" constr (IH) := iLöbCore IH idtac idtac.