In the following Coq proof:
Ltac easy_ltac t := match goal with
| [Z: @eq nat t ?Y |- _ ] => pose ?Y as N
end.
Lemma easy: forall (n: nat), (n >= O)%nat.
Proof.
intros n. destruct n eqn: M. easy_ltac n.
I get the error message: "No matching clauses for match.", while I have the hypothesis
M : @eq nat n O
I do not understand why.
The culprit is the extraneous ?
before the 2nd occurrence of Y
.
Also just to recall, you might want to use the fresh
tactic rather than hard-coded N
as an hypothesis name.
So, it should work if you just write:
Ltac easy_ltac t := match goal with
| [Z: @eq nat t ?Y |- _ ] => let N := fresh "N" in pose Y as N
end.
Lemma easy: forall (n: nat), (n >= O)%nat.
Proof.
intros n. destruct n eqn: M. easy_ltac n. easy_ltac n.