使用coqtop检查表达式的类型

时间:2019-01-08 05:31:50

标签: coq

我很好奇Coq实体的类型等同于逻辑连接词。为了具体起见,假设->/\。如果->是一个神奇的非[一流实体],那么我们就以/\作为实体。我很好奇它的域名是Prop还是Set。

是否可以使用coqtop来获取表达式的类型?

我想用ghci做类似以下的事情。

> ghci
:GHCi, version 8.6.3:  :? for help
Prelude> :t (**)
(**) :: Floating a => a -> a -> a

1 个答案:

答案 0 :(得分:5)

/\->都是符号,而不是Coq中的实际常量。要找到它们的签名,您必须首先确定它们的符号。运行命令Locate "/\".应该会输出类似

的内容
Notation
"A /\ B" := and A B : type_scope
(default interpretation)

因此/\是常数and的表示法。然后,您可以使用命令Check查找其类型。 Check and.给予

and
     : Prop -> Prop -> Prop

所以and花费了两个Prop并给出了Prop

类似地,A -> Bforall _: A, B的一种表示法。与and不同,forall不是常量,而是Coq语言的关键字,因此您不能使用Check forall.来获取签名。在这种情况下,您可以查看the reference manual for products并看到

  

表达式forall ident : type, term表示   项ident上类型为type的变量term。至于抽象   forall后跟一个活页夹列表,以及几个产品   变量等效于单变量乘积的迭代。   请注意,term是一种类型。

因此,这意味着AB都应该是类型,这意味着它们可以是PropSet或{{1} }。