我有时会在Coq中看到这种语法来表示某些类型/集合,例如打印有关存在变量的信息:
?T : [ |- Set]
?T0 : [ x : ?T |- Set ]
我不知道如何搜索这种语法。
这是什么意思?
第一个是否与
相同? T : Set
答案 0 :(得分:5)
假设我们有一个特定类型的术语。
Variable B : nat -> nat.
Check B.
(*
B
: nat -> nat
*)
如果我们使用B
创建另一个字词,则可能会或不会键入check,即B true
不可输入。
Fail Check B true.
(*
Error message:
The term "true" has type "bool" while it is expected to have type "nat".
*)
Coq允许使用通配符,然后尝试找出类型本身。
Check B _.
(*
B ?n
: nat
where
?n : [ |- nat]
*)
此处Coq表示B _
的类型为nat
,但仅限
在假设的论点下
(名为?n
)的类型为nat
。或者以其他方式说,“假设人们可以从空的上下文推断?n
的类型是nat
”。
有时会在“旋转”符号|-
的左侧找到更多内容。
Variable x:nat.
Check _ x.
(*
?y x
: ?T@{x:=x}
where
?y : [ |- forall x : nat, ?T]
?T : [x : nat |- Type]
*)
在下划线之上称为?y
,(?y x)
的类型是依赖于?T
的从属类型x
。在?T
为Type
的上下文中,x
只能打字(到nat
)。
如果x
不是nat,则?T
不可用。
答案 1 :(得分:0)
我可能会弄错,但第一个应该被解读为"名为T
的存在变量属于Set
"第二个应该被理解为"名为T0
的存在变量属于Set
类型,在变量x
属于?T
&#的上下文中34;,意味着填充第二个洞的术语可能取决于一个名为x
的变量。