diff --git a/theories/proofmode/tactics.v b/theories/proofmode/tactics.v index c050e9cc1c0db4c732a8f31014be8e6e70446df0..39b34cbfc9b7780e2afb15671c7220e17af3627e 100644 --- a/theories/proofmode/tactics.v +++ b/theories/proofmode/tactics.v @@ -1212,7 +1212,7 @@ Tactic Notation "iInductionCore" constr(x) lazymatch goal with | H : coq_tactics.of_envs _ ⊢ _ |- _ => eapply tac_revert_ih; - [reflexivity || fail "iInduction: spatial context not empty" + [reflexivity || fail "iInduction: spatial context not empty, this should not happen" |apply H|]; clear H; fix_ihs; let IH' := iFresh' IH in iIntros [IAlwaysElim (IName IH')] @@ -1251,41 +1251,50 @@ Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ident(x4) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3 x4) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ident(x4) ident(x5) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3 x4 x5) Hs with (iInductionCore x as aat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ident(x4) ident(x5) ident(x6) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3 x4 x5 x6) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ident(x4) ident(x5) ident(x6) ident(x7) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3 x4 x5 x6 x7) Hs with (iInductionCore x as pat IH). Tactic Notation "iInduction" constr(x) "as" simple_intropattern(pat) constr(IH) "forall" "(" ident(x1) ident(x2) ident(x3) ident(x4) ident(x5) ident(x6) ident(x7) ident(x8) ")" constr(Hs) := + let Hs := constr:(Hs +:+ "∗") in iRevertIntros(x1 x2 x3 x4 x5 x6 x7 x8) Hs with (iInductionCore x as pat IH). (** * Löb Induction *) Tactic Notation "iLöbCore" "as" constr (IH) := iStartProof; eapply tac_löb with _ IH; - [reflexivity || fail "iLöb: persistent context not empty" + [reflexivity || fail "iLöb: spatial context not empty, this should not happen" |env_reflexivity || fail "iLöb:" IH "not fresh"|]. Tactic Notation "iLöb" "as" constr (IH) :=