我试图证明,在我看来是一个合理的定理:
theorem1 : (n : Nat) -> (m : Nat) -> (n + (m - n)) = m
归纳证明到了我需要证明这一点的地步:
lemma1 : (n : Nat) -> (n - 0) = n
当我尝试使用交互式证明者来证明它(为了简单起见,引理)时会发生这种情况:
---------- Goal: ----------
{hole0} : (n : Nat) -> minus n 0 = n
> intros
---------- Other goals: ----------
{hole0}
---------- Assumptions: ----------
n : Nat
---------- Goal: ----------
{hole1} : minus n 0 = n
> trivial
Can't unify
n = n
with
minus n 0 = n
Specifically:
Can't unify
n
with
minus n 0
我觉得我一定错过了关于减号的定义的一些东西,所以我在源代码中查找了它:
||| Subtract natural numbers. If the second number is larger than the first, return 0.
total minus : Nat -> Nat -> Nat
minus Z right = Z
minus left Z = left
minus (S left) (S right) = minus left right
我需要的定义就在那里!minus left Z = left
. 我的理解是 Idris 应该只是替换minus m 0
为m
here,然后这是反身成立的。我错过了什么?