Logic 如何在Coq中声明某些归纳类型的常数?

Logic 如何在Coq中声明某些归纳类型的常数?,logic,coq,Logic,Coq,下面是归纳类型的定义(这里使用参数化的高阶抽象语法-PHOAS): 我的问题是-如何使用构造函数将常量John定义为ClosedT类型 还有另外一个问题:在某些情况下,我可能想定义更多的类型,例如,John:Person和Bruno:Tortoise那么-我是否应该为新类型创建新类型,例如,ClosedT_TortoiseClosedT是构建对象逻辑的基本类型,因此,也许我不应该继续使用多端口逻辑 据我所知,我正在使用的线性逻辑的形式化应用于另一个Coq项目中,可能在那里定义了常数。但是略读源代

下面是归纳类型的定义(这里使用参数化的高阶抽象语法-PHOAS):

我的问题是-如何使用构造函数将常量
John
定义为
ClosedT
类型

还有另外一个问题:在某些情况下,我可能想定义更多的类型,例如,
John:Person
Bruno:Tortoise
那么-我是否应该为新类型创建新类型,例如,
ClosedT_Tortoise
ClosedT
是构建对象逻辑的基本类型,因此,也许我不应该继续使用多端口逻辑


据我所知,我正在使用的线性逻辑的形式化应用于另一个Coq项目中,可能在那里定义了常数。但是略读源代码我找不到它们。

严格地说,你的问题陈述得不好:
ClosedT
不是一个类型,而是一系列命题,由类型
项的元素索引。根据该文件,我认为
ClosedT t
表示术语
t:term
已关闭,您需要执行以下操作:

  • 定义一种具有元素的常量
    T

  • T
    实例化开发的定义。为此,您需要将
    T
    包装在类型为
    Eqset\u dec\u pol
    的模块中,并证明
    T
    具有可判定的相等性,并将文件开头出现的函子
    语法\u LL
    应用于此模块

  • 使用
    Term
    Cte
    “构造函数”在术语语法中嵌入
    John
    。(这不是一个Coq意义上的构造函数,只是一个方便的包装器,用于构建
    Term
    类型的元素)

  • 证明该期限已结束;也就是说,证明
    ClosedT(Cte John)
    。这应该只是应用构造函数
    cl\u cte
    的问题


这或多或少是你想要做的事情吗

严格地说,你的问题陈述不当:
ClosedT
不是一个类型,而是一系列命题,由
术语
类型的元素索引。根据该文件,我认为
ClosedT t
表示术语
t:term
已关闭,您需要执行以下操作:

  • 定义一种具有元素的常量
    T

  • T
    实例化开发的定义。为此,您需要将
    T
    包装在类型为
    Eqset\u dec\u pol
    的模块中,并证明
    T
    具有可判定的相等性,并将文件开头出现的函子
    语法\u LL
    应用于此模块

  • 使用
    Term
    Cte
    “构造函数”在术语语法中嵌入
    John
    。(这不是一个Coq意义上的构造函数,只是一个方便的包装器,用于构建
    Term
    类型的元素)

  • 证明该期限已结束;也就是说,证明
    ClosedT(Cte John)
    。这应该只是应用构造函数
    cl\u cte
    的问题

这或多或少是你想要做的事情吗

(** Closed Terms *)
  Inductive ClosedT : Term -> Prop :=
  | cl_cte: forall C, ClosedT (Cte C)
  | cl_fc1: forall n t1, ClosedT t1 -> ClosedT (FC1 n t1)
  | cl_fc2: forall n t1 t2, ClosedT t1 -> ClosedT t2 -> ClosedT (FC2 n t1 t2).