伊莎贝尔代码生成器的流融合技术
1. 引言
在过去十年里,代码提取技术让人们更倾向于在定理证明器中编写可执行规范,而非抽象模型。例如,现在可以在证明器中验证会议管理系统,并将模型编译成可用的实现。然而,要实现令人满意的性能并非易事。现有的效率相关工作主要聚焦于在证明器中提供高效的数据结构,而代码提取过程中的优化潜力却一直被忽视。
代码提取可通过两种方式提升效率:
- 使用目标语言的优化库 :手动指定逻辑中的类型和函数如何映射到库,但这种映射未经验证,会增加可信代码基,违背验证精神,应尽量避免。
- 提取过程中的代码转换与优化 :这种方式更合理,原因如下:
- 转换和验证在同一形式框架内进行,确保二者契合。
- 提取器可利用已证明的定理(如不变式、同余式)进行优化,而这些知识在翻译过程中会丢失,目标语言编译器无法利用。
- 逻辑的求值顺序和严格性要求可能比目标语言弱,为提取器提供更多优化空间。
重新实现目标语言的所有优化并无太大益处,应关注能在目标语言中实现更多优化的转换技术,融合技术便是不错的选择,它能将用于高级证明的函数转换为便于优化的函数。本文着重关注流融合技术,它比其他融合技术更强大。
2. 流融合技术背景
流融合技术可对程序进行转换以实现优化。以 sum-odd-sq n = sum (map sq (filter odd [1..n])) 为例,该函数计算小于等于 n 的所有奇数的平方和。此定义便于证明,因为它像搭积木一样组合函数,证明时可利用
超级会员免费看
订阅专栏 解锁全文
1006

被折叠的 条评论
为什么被折叠?



