类型系统可以用作外部功能的证明助手吗?


9

鉴于:

  1. 具有非常有表现力的类型系统的语言(例如Idris)也可以具有转义机制,例如外部函数接口/ unsafePerformIO。
  2. 有一些证明助手可以用来证明用某种语言编写的程序的某些特性,而该语言没有能够表达这些特性的类型系统。
  3. Curry-Howard的对应关系表明,具有给定类型的函数的类型检查成功实现是该类型所表示内容的证明。

可以在母语的类型系统中表达外语代码某些属性的非平凡的证明吗?

例如,假设我有一个名为stable_qsort的C函数,该函数以非常巧妙和高效的方式对数字进行排序,同时保持已经相等的元素的顺序,还有一个Idris程序通过其FFI调用stable_qsort,但是我不相信这种相对晦涩的方法C函数。我可以证明该函数不会在我的Idris代码中对所有输入重新排序相等的元素,而不是使用单独的证明助手吗?

Answers:


10

长话短说:不,你不能。异类函数就像一个黑匣子,您赋予它的类型是您的承诺:在Curry-Howard对应关系中,这对应于向您的理论添加一个公理。

话虽这么说,但有办法。例如,在Coq中,有C标准的各种形式化形式(例如Robbert Krebbers的著作)。因为您具有C程序及其语义的显式表示,所以可以直接在证明助手中编写代码,然后可以证明其某些属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.