证明中的原始操作

时间:2015-06-08 15:56:57

标签: primitive-types idris formal-verification

对于学习依赖类型,我正在重写伊德里斯的旧Haskell游戏。目前,游戏“引擎”使用内置整数类型,例如Word8。我想证明一些涉及这些数字的数值属性的引理(例如,双重否定是同一性)。但是,不可能对原始算术运算的行为说些什么。什么会更好,只使用believe_me或其他handwaving(至少对于最基本的属性),或使用NatFin和其他“高级”重写我的代码数字类型?

2 个答案:

答案 0 :(得分:4)

我建议将postulate用于您需要的任何原始属性,当然要小心使用对于所讨论的数字类型实际上是真实的东西(这基本上只是意味着要小心)关于溢出)。所以你可以这样说:

postulate add_commutes : (x, y : Int) -> x + y = y + x
除非您需要证明的某些计算行为,否则最好避免使用

believe_me。但是,说实话,在推理原语时,我们仍然试图解决这些问题...

答案 1 :(得分:3)

我相信目前使用Nat时通常会更好。 Idris开发人员最终计划实现一种通用机制,用于在编译中用快速原始类型替换证明友好类型,但是现在只有Nat才会发生。你可以believe_me通过,如果你真的想要,但你最终得到的功能在证明中不那么容易使用。请注意,如果您决定使用believe_me,那么您还应该考虑really_believe_me,这显然使类型检查器更加可信。