【发布时间】:2017-06-22 15:18:17
【问题描述】:
优化编译器的终极目标是在程序空间中搜索与原始程序等效但速度更快的程序。对于非常小的基本块,这已经在实践中完成:https://en.wikipedia.org/wiki/Superoptimization
听起来困难的部分是搜索空间的指数性质,但实际上并非如此;困难的部分是,假设你找到了你要找的东西,你如何证明新的、更快的程序真的和原来的程序是等价的?
上次我研究它时,在某些情况下证明程序的某些属性方面已经取得了一些进展,特别是在您谈论标量变量或小的固定位向量时,尤其是在非常小的范围内,但在证明等价性方面并没有真正做到当您谈论复杂的数据结构时,更大规模的程序。
有没有人想出办法做到这一点,甚至“模解决这个我们还不知道如何解决的 NP 难搜索问题”?
编辑:是的,我们都知道停机问题。它是根据一般情况定义的。人类是存在的证据,证明这可以用于许多感兴趣的实际案例。
【问题讨论】:
-
看来你又会被halting problem 击中了。但是通过使用B-method 之类的东西,可以证明两种算法都实现了相同的规范,因此可以认为它们足够等效,但仍然不足以找到它们。
-
Julien 是对的——这个问题在一般情况下无法解决(至少,不是通过图灵等效系统。如果你找到了一个预言机,你可以做到,但在这种情况下,我建议你用它来买彩票而不是优化代码)。
-
我投票结束这个问题,因为它不是(还)一个编程问题。
标签: proof formal-verification formal-methods proof-of-correctness