Coq 中的 Curry Howard 对应关系

Posted

技术标签:

【中文标题】Coq 中的 Curry Howard 对应关系【英文标题】:Curry Howard correspondence in Coq 【发布时间】:2020-12-21 18:45:15 【问题描述】:

通过 Curry Howard 对应,所有定理和引理都是类型,证明对象是值。举个例子:

Theorem test:  0 <= 0.
Proof.
  omega. Qed.

当我这样做时,检查测试。 Coq 的输出是:

test
     : 0 <= 0

但是当我检查“ nat -> Prop。这意味着(0

【问题讨论】:

【参考方案1】:

test : 0 &lt;= 00 &lt;= 0 : Prop,正如你所说。在 Curry-Howard 对应的术语中,0 &lt;= 0 是类型/定理陈述,test 是该类型的值/该定理的证明。

此示例中不涉及任何子类型。子类型是两种类型之间的关系;当Cat &lt;: Animal(猫是动物的子类型)时,表示所有猫类型的对象也是动物类型:x : Cat 暗示x : Animal

Coq 在类型宇宙之间有一种相对简单的子类型化形式。最简单的例子是PropType 的子类型。您可以通过使用Check 来确认0 &lt;= 0 : Prop0 &lt;= 0 : Type 来查看这一点。

【讨论】:

'0 它们都是类型,但是它们之间的关系是“有类型”,而不是子类型。它们看起来非常相似(我们使用看起来相似的符号),但它们的行为不同。 如果我是正确的,has-type 关系需要 LHS 上的类型和 RHS 上的类型的值,如 (n: nat)。上面 (0 您是对的,某些类型如0 &lt;= 0TrueFalsep \/ qx = y 具有Prop 类型,但并非所有类型都具有Prop 类型,从Prop 本身开始,它的类型为Prop : Type,还有nat : SetSetType 特定情况的别名)。

以上是关于Coq 中的 Curry Howard 对应关系的主要内容,如果未能解决你的问题,请参考以下文章

COQ 定义 curry howard (A -> B -> C) -> (B -> A -> C) 使用集合

如果 Either 可以是 Left 或 Right 但不能同时是两者,那么为啥在 Curry-Howard 对应关系中它对应的是 OR 而不是 XOR?

使用 Curry-Howard 对应来证明下一个命题逻辑陈述的正确方法是啥?

Curry-Howard 同构的 bug 相当于啥?

德摩根在 Haskell 中的定律通过 Curry-Howard 通信

Curry-Howard 同构产生的最有趣的等价是啥?