Coq中的方括号语法[| - Set]是什么?

时间:2016-07-21 07:01:13

标签: coq

我有时会在Coq中看到这种语法来表示某些类型/集合,例如打印有关存在变量的信息:

?T : [ |- Set]
?T0 : [ x : ?T |- Set ]

我不知道如何搜索这种语法。

这是什么意思?

第一个是否与

相同
? T : Set

2 个答案:

答案 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。在?TType的上下文中,x只能打字(到nat)。 如果x不是nat,则?T不可用。

答案 1 :(得分:0)

我可能会弄错,但第一个应该被解读为"名为T的存在变量属于Set"第二个应该被理解为"名为T0的存在变量属于Set类型,在变量x属于?T&#的上下文中34;,意味着填充第二个洞的术语可能取决于一个名为x的变量。