У меня есть функция, которая вычитает два Nat
. Как мне доказать, что первый аргумент, который я ему передаю, на самом деле меньше второго?
dummy : (k : Nat) -> (n : Nat) -> {auto smaller : LTE k n} -> Nat
dummy k n = n - k
Я пробовал пару решений, которые не работают
smallerThan : (k : Nat) -> (n : Nat) -> Maybe (LTE k n)
smallerThan Z k = Just (LTEZero {right=k})
smallerThan (S k) Z = Nothing
smallerThan (S k) (S n) = case isLTE k n of
Yes prf => Just prf
No contra => Nothing
smallerThan (S k) (S n) = case smallerThan k n of
Nothing => Nothing
Just lte => Just (cong lte)
Я знаю, что тип моей дыры smallerThan (S k) (S n) = Just (?hole)
- это LTE (S k) (S n)
, но как правильно использовать fromLteSucc
или любую другую функцию, чтобы реализовать это?
Я нашел этот вопрос, но он был решен без необходимых мне доказательств.
Не могли бы вы подсказать, что я делаю неправильно и как правильно реализовать такую проверку?