Я пытаюсь выучить парадигму идриса и все еще борюсь. Здесь у меня есть функция isZero, которая принимает естественный Nat и возвращает True или False.
Моя проблема связана с нерелексивным случаем.
namespace Numbers
data Nat : Type where
Zero : Numbers.Nat
Successor : Numbers.Nat -> Numbers.Nat
isZero: Numbers.Nat -> Prelude.Bool.Bool
isZero Zero = True
isZero _ = False
isNotZero: Numbers.Nat -> Prelude.Bool.Bool
isNotZero Zero = False
isNotZero _ = True
proofNIsZero : (n : Numbers.Nat) -> isZero n = Bool.True
proofNIsZero Zero = Refl
proofNIsZero (Successor _) = ?rhs
Кажется очевидным, что какой-то преемник любого нат не может быть нулем. Но моя борьба в доказательство. Тип дыры? Rhs:
--------------------------------------
rhs : False = True
Попытка ориентироваться в том, что я думаю, должно быть (и будет однажды) простой, привела к uninhabited
, Void
, absurd
и impossible
. Ничего из этого я не могу устранить.
Возможно, это ключи - но я не могу расшифровать!