以下代码给出错误:
Inductive mylist {A : Set} : Set :=
| mylist_Nil
| mylist_Cons : A -> mylist A -> mylist A.
错误是类型为“ Set”的“ mylist A”无法应用于术语“ A”:“ Set”。 如果我将“ {A:Set}”更改为(A:Set),那么它将正常工作。
花括号是什么意思?谢谢!
答案 0 :(得分:4)
通常,参数使用括号声明。大括号用于隐式参数。隐式参数不会像通常的参数那样传递给函数和类型声明。相反,Coq类型检查器会尝试从上下文中找出它们应该是什么。
您可以强制常量以@
符号显式地接受所有参数,例如:@mylist A
。
对于像mylist
这样的泛型类型,Coq没有足够的上下文来推断A
参数应该是什么,因此通常最好用括号明确声明这些参数。
Coq user manual包含有关隐式参数的更多信息。