您所提出的问题很有趣且众所周知。您正在使用自然数的所谓命令式编码。让我解释一下背景。
给定一个类型构造,我们可能有兴趣在“最小”类型的一个满足一个≅ 牛逼(一)。就范畴论而言,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Ť
A := ∏X:Ť ÿ p ë(T(X)→ X)→ X。
一种ŤŤÿ,我们得到一个代数同态
φ :一→ Ÿ由
φ (一)= 一F:T(是)→ Yϕ :A → Y
因此,我们可以肯定地看到
A是
弱初始的。首先,我们必须知道
ϕ是唯一的。没有进一步的假设,情况并非如此,但是细节是技术性和令人讨厌的,需要阅读一些背景材料。例如,如果我们可以证明一个令人满意的
参数定理,那么我们就赢了,但是还有其他方法(例如,对
A的定义进行推论,并假设
K-公理和函数可扩展性)。
ϕ (a )= aÿF。
一种ϕ一种ķ
Ť(X)= 1 + X
N a t = ∏X:Ť ÿ p ë((1 + X)→ X)→ X= ∏X:Tÿ p ë(X× (X→ X))→ X=∏X:Ť ÿ p ëX→(X→X)→ X。
对您的问题的技术解答是:存在类型理论模型,其中类型SimpleNat
包含与数字不对应的奇特元素,而且这些元素破坏了归纳原理。SimpleNat
这些模型中的类型太大,只是一个弱的初始代数。