为什么 "Addition" 上的左身份是微不足道的证明,而右身份却不是?

Why Left Identity over "Addition" is trivial proof but Right Identity is not?

我只是在学习 Agda,但我不明白当我试图通过加法证明恒等式时,我发现左恒等式是微不足道的证明。

left+identity : ∀ n -> (zero + n) ≡ n
left+identity n = refl

但正确的身份却不是这样。

right+identity : ∀ n -> (n + zero) ≡ n
right+identity zero = refl
right+identity (suc n) = cong suc (right+identity n)

我无法理解其中的原因。请解释。谢谢

问题是依赖类型理论如何处理平等。通常,加法的定义是:

_+_ : Nat -> Nat -> Nat
zero + m = m              -- (1)
(suc n) + m = suc (n + m) -- (2)

请注意,等式一表示左身份。当你有:

 forall n -> 0 + n = n

Agda 的类型检查器可以使用等式 (1) 的加法来验证等式是否成立。请记住,命题等式构造函数 (refl) 的类型为

 refl : x == x

因此,当您使用 refl 作为左恒等式的证明时,Agda 将尝试减少相等的两边(将它们归一化)并检查它们是否确实相等。使用加法的定义,左恒等式是立即的,由等式(1)

但是对于正确的身份,这在定义上并不成立。请注意,当我们有

n + 0 == n

Agda 的类型检查器不能使用加法方程来检查这个等式是否成立。证明这种等式的唯一方法是使用归纳法(或者,如果您愿意,可以使用递归)。

希望对您有所帮助。