为什么左侧身份超过"添加"是一个微不足道的证据,但正确的身份不是?

时间:2016-01-26 22:06:26

标签: agda dependent-type

我只是在学习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)

我无法理解原因。请解释。感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

 forall n -> 0 + n = n

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

 refl : x == x

因此,当您使用refl作为左侧身份的证明时,Agda将尝试减少相等的两面(将它们标准化)并检查它们是否确实相等。使用加法的定义,左边的身份是立即的,通过等式(1)。

但是对于正确的身份,这并不符合定义。请注意,当我们有

n + 0 == n

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

希望这可以帮助你。