Я пытаюсь доказать, что, на мой взгляд, является разумной теоремой:
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
, и тогда это рефлексивно верно. Что я пропустил?
0
иZ
рассматриваются как синонимы или что-то требуется для их работы? - person Damien_The_Unbeliever   schedule 07.05.2014Nat
является членом классаNum
, одной из функций которого являетсяfromInteger
. ИfromInteger 0 = Z
. (Для Nat также существует особая оболочка, которая присутствует в самом языке и, я думаю, в терминале.) Короче говоря, я не думаю, что это проблема, хотя я не уверен в этом полностью. - person Vic Smith   schedule 07.05.2014