代码之家  ›  专栏  ›  技术社区  ›  TomR

什么是Coq函数定义'definition Term:=for all T:Type,Term T.'的意思?

  •  2
  • TomR  · 技术社区  · 6 年前

    我正在读关于Coq中线性逻辑机械化的书 http://www.cs.cmu.edu/~iliano/projects/metaCLF2/inc/dl/papers/lsfa17.pdf https://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 *)
    

    为什么我们需要 福尔 函数定义中的结构,它给出了什么附加意义?是否正在创建某种集合-即-该函数返回一组结果-每种类型一个结果?

    我在看书 http://adam.chlipala.net/cpdt/cpdt.pdf “第十二章宇宙与公理”,这个问题是我之前问题的延续 How to understand Coq type constructor var (t: T)

    1 回复  |  直到 6 年前
        1
  •  3
  •   Li-yao Xia    6 年前

    在参数HOAS中,参数 T 表示术语中可能出现的变量集。例如,如果希望术语最多使用两个变量,则它可能具有 term bool bool 有两个居民。因此,一个封闭项(没有自由变量)可以天真地被类型化 term void ,其中 void 是空类型:

    Inductive void := .
    

    结果是相当于 forall A, term A forall A, void -> A 在一个方向,只在另一个方向专攻)。后一种封闭项的表示更便于嵌入到其他开放项中。