diff --git a/proofmode/tactics.v b/proofmode/tactics.v index 23848b1b8fb4c313707da9ddb3693049cc797ad0..d4d5431ad5bf008fa40c9b0beb01e20768f75bd8 100644 --- a/proofmode/tactics.v +++ b/proofmode/tactics.v @@ -678,17 +678,16 @@ Local Tactic Notation "iDestructHyp" constr(H) "as" "(" simple_intropattern(x1) iExistDestruct H as x1 H; iDestructHyp H as ( x2 x3 x4 x5 x6 x7 x8 ) pat. (** * Introduction tactic *) -Local Tactic Notation "iIntro" "(" simple_intropattern(x) ")" := first - [ (* (∀ _, _) *) apply tac_forall_intro; intros x - | (* (?P → _) *) eapply tac_impl_intro_pure; - [let P := match goal with |- IntoPure ?P _ => P end in - apply _ || fail "iIntro:" P "not pure" - |intros x] - | (* (?P -★ _) *) eapply tac_wand_intro_pure; - [let P := match goal with |- IntoPure ?P _ => P end in - apply _ || fail "iIntro:" P "not pure" - |intros x] - |intros x]. +Local Tactic Notation "iIntro" "(" simple_intropattern(x) ")" := + try first + [(* (∀ _, _) *) apply tac_forall_intro + |(* (?P → _) *) eapply tac_impl_intro_pure; + [let P := match goal with |- IntoPure ?P _ => P end in + apply _ || fail "iIntro:" P "not pure"|] + |(* (?P -★ _) *) eapply tac_wand_intro_pure; + [let P := match goal with |- IntoPure ?P _ => P end in + apply _ || fail "iIntro:" P "not pure"|]]; + intros x. Local Tactic Notation "iIntro" constr(H) := first [ (* (?Q → _) *)