If I had a module declared as follows in file A.v:
Section A.
Context {𝒳 : Set}.
Inductive abt := Abt_leaf (x : 𝒳) | Abt_node.
End A.
And in another file, B.v, I had:
Require Import A.
Definition 𝒳 := nat.
Inductive typ := Tpe_num | Typ_str.
Definition typ_to_abt (t : typ) : abt (* @abt 𝒳 *) := Abt_node.
The implicit arguments in abt
when defining typ_of_abt
can't be inferred.
How could I let Coq know I always want abt
to be @abt 𝒳
in B.v? The intent is to avoid explicitly specifying them using @
.
Let abt := @abt 𝒳.
? $\endgroup$Notation
also works. But both need to be repeated for every definition such asabt
(when there are many) in A.v. I wonder if there's a more concise solution. $\endgroup$