ZWY
July 10, 2020, 8:38am
1
The Coq manual says
“In tacarg, there is an overlap between qualid as a direct tactic argument and qualid as a particular case of term.”
I can not fully understand this sentence. The tactic split is denoted by tacarg. What does split belong to? A direct tactic argument or a term?
First, there is a split tactic and a split term. The split tactic is not a valid tacarg.
First, the split is not a valid tacarg.
Ltac foo tac := tac.
Ltac bar := foo split.
Goal True /\ True.
Fail foo split.
split.
I’ve found that sentence under https://coq.inria.fr/refman/proof-engine/ltac.html#syntax .
In that context, term means Gallina term, and the split tactic is not a Gallina term.
If you invoke the split tactic directly, split is a tactic and not a tacarg; if you pass split as argument to another tactic, then it’s a tactic argument.
That sentence is pretty weird, but https://coq.github.io/doc/v8.12/refman/proof-engine/ltac.html#grammar-token-tactic-arg gives the grammar directly.
PS: Please link to the source next time, it wasn’t easy to find.
1 Like