【发布时间】:2013-12-06 23:15:02
【问题描述】:
关于标准 ML 编译器,我的问题是,尽管 ML 本身是正式定义的,可以证明程序的确定性评估,但编译器本身不是用 C 编写的,它没有正式定义,至少不是全部?我想我的问题是说我们用标准 ML 编写了一个程序并且可以证明它的正确性,我们怎么知道 C 编写的编译器没有以可能改变结果的方式执行?
谢谢
【问题讨论】:
-
请注意,大多数 ML 编译器不是用 C 编写的,除了运行时系统的一些小部分。他们中的大多数(全部?)实际上是在 ML 中引导的。不过,这是个好问题。
-
错误可以以任何语言出现在任何地方。如果正式验证器有错误怎么办?如果编译正式验证器的编译器将错误引入其中怎么办?最终很难从数学上确定复杂系统的行为。所有这些都是使用易受宇宙射线、制造缺陷和良好量子不确定性影响的电子设备实现的。
-
@Potatoswatter:“如果形式验证器有错误怎么办?”:这是一个很好的问题,蚂蚁要回答这个问题,有证明者依赖于小的可信内核(最小,更可信),比如LCF、Isabelle 和其他一些 LCF 变体。所有更高级别的证明显然必须通过这个小内核并且永远不会绕过它。
-
有一个正式验证的 SML 实现叫做 CakeML,查看cakeml.org
标签: c compiler-construction sml ml