我很好奇Coq实体的类型等同于逻辑连接词。为了具体起见,假设->
和/\
。如果->
是一个神奇的非[一流实体],那么我们就以/\
作为实体。我很好奇它的域名是Prop还是Set。
是否可以使用coqtop
来获取表达式的类型?
我想用ghci做类似以下的事情。
> ghci
:GHCi, version 8.6.3: :? for help
Prelude> :t (**)
(**) :: Floating a => a -> a -> a
答案 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 -> B
是forall _: A, B
的一种表示法。与and
不同,forall
不是常量,而是Coq语言的关键字,因此您不能使用Check forall.
来获取签名。在这种情况下,您可以查看the reference manual for products并看到
表达式
forall ident : type, term
表示 项ident
上类型为type
的变量term
。至于抽象forall
后跟一个活页夹列表,以及几个产品 变量等效于单变量乘积的迭代。 请注意,term
是一种类型。
因此,这意味着A
和B
都应该是类型,这意味着它们可以是Prop
,Set
或{{1} }。