美国石油协会

[项目现场|代码库]

AoPA库允许进行编码程序设计代数Agda中的功能性和关系性样式程序派生。

自90年代以来,程序派生社区一直在探索从函数到程序计算的关系理论的转变,最终在Bird和de Moor的工作中达到顶峰。问题被指定为一种将输入映射到输出的关系,这使得我们不必过于具体地确定在输出同样好的情况下选择哪个输出,而将选择权留给实现。任务是使用代数属性将规范细化为功能实现。

与此同时,编程语言社区正朝着更加依赖机器辅助程序验证的方向发展。只有当证明由定理证明者或证明助手验证时,才认为复杂定理已被“证明”。

AoPA允许我们用Agda以Bird and de Moor的风格开发关系证明。程序关系理论的元素在Agda类型系统中建模。计算表示为程序项,如果进行了类型检查,则保证正确无误。在计算的最后,可以提取一个功能程序,该程序被证明符合关系规范。

例子

以下是插入排序的派生:

isort-der:∃(\f->已订购?排列(f)isort-der=(_,(⊒-开始命令?排列⊒⟨ ○-单调r-置换-is-fold⟩订购了吗?烫发⊒⟨-ref⟩命令?foldR联合收割机无折叠R-fusion-订购?步进ins-base⟩foldR(fun(uncry insert))无折叠R到折叠插入[]趣味(foldr insert[])⊒())

的类型分拣机是一个存在函数的命题(f)在被解除关系后乐趣,包含在命令?排列,将列表映射到其有序排列之一的关系。证明通过推导算法的规范进行。第一步利用了还有那个排列可以表示为折叠。第二步利用关系折叠融合。当证明完成时,算法监控程序通过提取命题的证据来获得。它是一个由类型系统支持的可执行程序,以满足规范要求。

完整的程序位于代码的Example目录中。

历史

AoPA公司(Agda编程代数)最初是作为JFP论文的Agda库Agda中的编程代数:关系程序派生的依赖类型通过申成木,香樟柯帕特里克·詹森(JFP文件是早期MPC文件的扩展版本:使用依赖类型的程序设计代数(2008年MPC)作者相同。)

该开发目前由Yu-Hsi Chiang和Shin-Cheng Mu负责。新增内容包括宇宙多态性、带有多态基函数的通用数据类型,以及从Galois连接开发算法的理论(参见Chiang and Mu 2015年).

下载

图书馆仍在开发中。从中获取最新代码Git存储库.

硕士论文项目

扩展、改进AoPA代码库并将其应用于一些有趣的算法,可以成为一个很好的硕士论文主题,适合具有高级函数编程和程序和证明类型背景的雄心勃勃的学生。在哥德堡,如果您感兴趣,请联系Patrik Jansson或Jean-Philippe Bernardy。链接到其他FP相关的硕士论文提案.

页面上次修改时间:2021年11月22日12:33 am
技术支持私人维基