私が証明しようとしているのは、私の考えでは合理的な定理です。
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
. 私の理解では、イドリスはここに置き換えるだけでよくminus m 0
、m
これは反射的に真実です。私は何を逃したのですか?