Coq泛型中的花括号

时间:2019-02-19 21:48:28

标签: coq

以下代码给出错误:

Inductive mylist {A : Set} : Set :=
| mylist_Nil
| mylist_Cons : A -> mylist A -> mylist A.

错误是类型为“ Set”的“ mylist A”无法应用于术语“ A”:“ Set”。 如果我将“ {A:Set}”更改为(A:Set),那么它将正常工作。

花括号是什么意思?谢谢!

1 个答案:

答案 0 :(得分:4)

通常,参数使用括号声明。大括号用于隐式参数。隐式参数不会像通常的参数那样传递给函数和类型声明。相反,Coq类型检查器会尝试从上下文中找出它们应该是什么。

您可以强制常量以@符号显式地接受所有参数,例如:@mylist A

对于像mylist这样的泛型类型,Coq没有足够的上下文来推断A参数应该是什么,因此通常最好用括号明确声明这些参数。

Coq user manual包含有关隐式参数的更多信息。