proof - 在 Idris 中为决策函数构建证明
问题描述
我正在尝试为表示模块化空间中两个连续元素的类型创建一个决策函数。
(此代码源自对我的上一个问题的出色回答。)
data PreceedsN : Nat -> Nat -> Nat -> Type where
PreceedsS : {auto prf : S a `LT` m} -> PreceedsN m a (S a)
PreceedsZ : {auto prf : S a = m} -> PreceedsN m a Z
doesPreceedN : (m : Nat) -> (a : Nat) -> (b : Nat) -> Dec (PreceedsN m a b)
doesPreceedN m a b with (S a `cmp` m)
doesPreceedN (S a + S d) a b | CmpLT d with (S a `decEq` b)
doesPreceedN (S a + S d) a b | CmpLT d | Yes prf = Yes ?bIsSa
doesPreceedN (S a + S d) a b | CmpLT d | No contra = No ?bNotSa
doesPreceedN (S m) m b | CmpEQ with (b `decEq` 0)
doesPreceedN (S m) m Z | CmpEQ | Yes prf = Yes PreceedsZ
doesPreceedN (S m) m b | CmpEQ | No contra = No ?saIsmAndbIsNotZ
doesPreceedN (S m) (m + (S d)) b | CmpGT d = No ?saCannotBeGTm
我已经尽力了,但我的知识还不够丰富,无法自己构建必要的证明,尤其是矛盾的证明。你能告诉我如何填补上面代码中的一个或多个漏洞吗?
另外,如果您使用任何方便的工具,例如absurd
、impossible
或战术,您能解释一下它们是如何工作的以及它们在证明中所起的作用吗?
解决方案
推荐阅读
- r - 如何按组创建包含均值和标准差的表格
- git - 摆脱主题/功能分支上无关的合并提交
- c++ - 通过复制包含目录的内容来安装 spdlog
- mongodb - 使用 Mongodb 在 Spring 中截断和计算位置
- google-sheets - 如何计算音乐课中可用空间的数量 - Google 表格?
- wpf - 使用 Prism 7 和 WPF 使用单个视图加载多个视图模型
- python-3.x - SetWithCopyWarning 异常
- c - 这个程序中返回的值是。. . .酷儿至少可以说
- r - R中的棘手for循环/添加到数据框
- ruby - Grape API - 使用带有数据选项的 curl 发出发布请求的问题