为什么不可能为教堂数字声明归纳原理


17

想象一下,我们在依存类型的lambda演算中将自然数定义为教堂数字。可以通过以下方式定义它们:

SimpleNat = (R : Set) → R → (R → R) → R

zero : SimpleNat
zero = λ R z _ → z

suc : SimpleNat → SimpleNat
suc sn = λ R z s → s (sn R z s)

SimpleNatRec : (R : Set) → R → (R → R) → SimpleNat → R
SimpleNatRec R z s sn = sn R z s

但是,似乎我们无法使用以下归纳原理类型来定义教堂数字:

NatInd : (C : Nat -> Set) -> (C zero) -> ((n : Nat) -> C n -> C (suc n)) -> (n : Nat) -> (C n)

为什么会这样呢?我如何证明这一点?似乎问题在于为Nat定义了一个类型,该类型变得递归。是否可以修改lambda演算以允许这样做?

Answers:


20

您所提出的问题很有趣且众所周知。您正在使用自然数的所谓命令式编码。让我解释一下背景。

给定一个类型构造,我们可能有兴趣在“最小”类型的一个满足一个≅ 牛逼(一)。就范畴论而言,T是一个函子,A是初始的T代数。例如,如果T (X )= 1 + X,则A对应于自然数。如果T (X )= 1 +Ť:ŤÿpË→ŤÿpË一种一种≅Ť(一种)Ť一种ŤŤ(X)=1个+X一种则 A是有限二叉树的类型。Ť(X)=1个+X×X一种

历史悠久的想法是,初始代数的类型为 A := ∏ X :T y p e(T (X )→ X )→ X 。 (您对相关产品使用的是Agda表示法,但是我使用的是更传统的数学表示法。)为什么会这样呢?好吧,A本质上是对初始T-代数的递归原理进行编码的:给定具有结构同构f的任何T-代数Y :T (YŤ

一种:=∏X:ŤÿpË(Ť(X)→X)→X。
一种ŤŤÿ,我们得到一个代数同态 φ :一→ Ÿ由 φ (一)= 一F:Ť(ÿ)→ÿϕ:一种→ÿ 因此,我们可以肯定地看到 A是弱初始的。首先,我们必须知道 ϕ是唯一的。没有进一步的假设,情况并非如此,但是细节是技术性和令人讨厌的,需要阅读一些背景材料。例如,如果我们可以证明一个令人满意的参数定理,那么我们就赢了,但是还有其他方法(例如,对 A的定义进行推论,并假设 K-公理和函数可扩展性)。
ϕ(一种)=一种ÿF。
一种ϕ一种ķ

Ť(X)=1个+X

ñ一种Ť=∏X:ŤÿpË((1个+X)→X)→X=∏X:ŤÿpË(X×(X→X))→X=∏X:ŤÿpËX→(X→X)→X。

对您的问题的技术解答是:存在类型理论模型,其中类型SimpleNat包含与数字不对应的奇特元素,而且这些元素破坏了归纳原理。SimpleNat这些模型中的类型太大,只是一个弱的初始代数。


8
我同意答案很好,但是这里有一些参考可能有用:Geuvers关于归纳的不可导性的论文以及Neel K's和Derek Dreyer关于从参量获得(一些)归纳的论文。但是我不知道有一篇文章可以全面探讨这种关系。
— 科迪

我在这方面的参考文献不太强,谢谢@cody!
— 安德烈·鲍尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.