构造演算:修订间差异

来自testwiki
跳转到导航 跳转到搜索
imported>InternetArchiveBot
补救1个来源,并将0个来源标记为失效。) #IABot (v2.0.8.5
 
(没有差异)

2021年12月30日 (四) 09:49的最新版本

构造演算(CoC)是高阶有类型 lambda 演算,这里的类型一级值。因此在 CoC 内有可能定义从整数到类型、从类型到类型的函数,同从整数到整数的函数一样。CoC 是强规范化的。

CoC 最初由 Thierry Coquand 开发。

CoC 是 Coq 定理证明器早期版本的基础;它后来的版本建造在归纳构造演算之上,这是带有对归纳数据类型的天然支持的 CoC 扩展。在最初的 CoC 中,归纳数据类型必须模拟为它们的多态解构函数。

构造演算的基础

构造演算可以被当作 Curry-Howard同构的扩展。Curry-Howard 同构把在简单类型 lambda 演算中项关联上在直觉命题逻辑中自然演绎证明。构造演算扩展了这个同构为在完全的直觉谓词逻辑中的证明,这包括了量化陈述(它也叫做"命题")的证明。

在构造演算中使用如下规则构造:

  • T 是项(也叫做类型
  • P 是项(也叫做命题,所有命题的类型)
  • 变量 x,y,z... 是项
  • 如果 AB 是项,则如下也是项
    • (AB)
    • (λx:A.B)
    • (x:A.B)

构造演算有 5 种对象类型:

  1. 证明,它是其类型都是命题的那些项
  2. 命题,也叫做小类型
  3. 谓词,它是返回命题的函数
  4. 大类型,它是谓词的类型。(P 是大类型的例子)
  5. T 自身,它是大类型的类型。

判断

在构造演算中,判断是类型推理:

x1:A1,x2:A2,t:B

它可以被读作蕴涵

如果变量 x1,x2, 分别有类型 A1,A2,,则项 t 有类型 B

构造演算的有效判断是从推理规则集合可推导的。在下面,我们使用 Γ 来指示类型指派的序列 x1:A1,x2:A2,,并使用 K 来指示要么 P 要么 T。我们将写 A:B:C 来指示“A 有类型 B,和 B 有类型 C”。我们将写 B(x:=N) 来指示用项 N 代换在项 B 中变量 x 的结果。

推理规则用如下形式写成

ΓA:BΓC:D

它指示着

如果 ΓA:B 是有效判断,则 ΓC:D 也是。

构造演算的推理规则

  1. P:T

  2. ΓA:KΓ,x:Ax:A

  3. Γ,x:At:B:KΓ(λx:A.t):(x:A.B):K

  4. ΓM:(x:A.B)ΓN:AΓMN:B(x:=N)

定义逻辑运算

构造演算在引入基本算子的时候是非常简约的:唯一形成命题的逻辑算子是 。但是,这个唯一的算子足够定义所有其他逻辑算子:

ABx:A.B(xB)ABC:P.(ABC)CABC:P.(AC)(BC)C¬AC:P.(AC)x:A.BC:P.(x:A.(BC))C

定义数据类型

在构造演算中可以定义计算机科学中使用的基本数据类型:

布尔
A:P.AAA
自然数
A:P.(AA)(AA)
乘积 A×B
AB
不交并 A+B
AB

参见

引用