什么是Coq函数定义“定义术语:=全部T:类型,术语T.”是什么意思?

时间:2018-06-25 05:50:41

标签: functional-programming logic coq

我正在阅读Coq http://www.cs.cmu.edu/~iliano/projects/metaCLF2/inc/dl/papers/lsfa17.pdfhttps://github.com/brunofx86/LL中线性逻辑的机械化知识,我很难理解函数定义Term(以及其他涉及forall的函数定义),来自https://github.com/brunofx86/LL/blob/master/FOLL/LL/SyntaxLL.v

Definition Term := forall T:Type,  term T. (* type for terms *)
Definition AProp := forall T:Type, aprop T. (* type for atomic propositions *)

为什么在函数定义中需要forall构造,它还具有什么附加含义?是否正在创建某种类型的集合-即-该函数返回结果集-每种类型都有一个结果?

我正在阅读http://adam.chlipala.net/cpdt/cpdt.pdf“第12章宇宙和公理”,该问题是我先前的问题How to understand Coq type constructor var (t: T)的继续,试图理解本文。

1 个答案:

答案 0 :(得分:3)

在参数HOAS中,参数T表示一个术语中可能出现的一组变量。例如,如果您想要一个最多使用两个变量的术语,则其类型可能为term bool,因为bool有两个居民。因此,可以简单地将封闭项(没有自由变量)键入term void,其中void是空类型:

Inductive void := .

term void等效于forall A, term A(您可以在一个方向上应用功能forall A, void -> A,而在另一个方向上专长)。后一种封闭术语表示法更易于嵌入其他开放术语中。