我发现Coq有一些关于隐式参数的不一致行为。
Section foo.
Let id1 {t : Set} (x : t) := x.
Let id2 {t : Set} (x : t) : t. assumption. Qed.
Check id2 (1:nat).
Check id1 (1:nat). (* Fails with "The term "1:nat" has type "nat" while it is expected to have type "Set"." *)
End foo.
Let
定义id1
似乎没有隐含t
,
而当您将Let
替换为Definition
时,不会发生错误。
我有什么问题或者这是一个错误吗?
答案 0 :(得分:4)
我认为这是一个错误,是的。在id1的情况下,忽略声明隐式参数的符号,正如您可以使用Print Implicit id1
命令看到的那样。