我有一个减去两个Nat
s 的函数。我如何证明我传递给它的第一个参数实际上小于第二个参数
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
或任何其他功能来实现它?
我找到了这个问题,但没有我需要的证据就解决了。
您能否提示我做错了什么以及如何正确实施这种检查?