机械化语义库是数学技术的集合用于开发程序逻辑和类型系统的语义模型:分离代数,权限共享模型,间接理论(步骤索引的清晰公理化),和模态逻辑.
该库特别强调将技术顺利集成到机械定理证明器;目前图书馆只供使用在里面Coq公司.
软件分发
MSL的当前版本作为验证的软件工具链. MSL组件将自行构建。
发布版本.
Subversion存储库中的出血边缘.
历史
旧版本:0.1,0.2,0.3.
MSL v0.3与v0.2相比具有以下增强功能:
- 分离和近似的隔离
- 设计打结垫片,以实现打结的不同用途
- 交叉分裂、连接同态的更好材料
- 共享模型提取
- 新示例:简单命令式语言的分离逻辑
- 杂项工程改进
MSL v0.2与v0.1相比具有以下增强功能:
- 使用MSL的完整示例:多态lambda演算与参考。
- 递归谓词:常规递归和高阶递归,以及用于证明收缩性的效用引理。
- Fancier knots:我们支持提供单调谓词和考虑到分叉器。
- 压扁和不压扁形成伽罗瓦联系的证明。
- 小的数学改进:我们定义了一个更一般的“时尚”弱化了“unageidentity”的定义。
- 工程升级:重做构建系统;要导入的新“msl.v”文件为客户提供整个库;使用间接理论的流线路径无分离代数;工程中的几个定义镊子目的;和各种效用引理,包括时尚理论暗示。
机械化语义库以BSD样式提供许可证.
组件概述
出版物
列表顺序按发布日期排列。有关文件到文件的映射,请参阅文件列表.
演示文稿
# |
职务 |
作者 |
阅读 |
引用 |
[1] |
语义模型的开发和机械化 用于程序逻辑 |
A.Hobor,R.Dockins |
PDF格式 |
- |
示例
MSL包括一些使用库。用v0.2发布的第一个示例是机械化类型多态lambda演算的稳健性证明及参考文献。 The 第二个例子,用v0.3发布,是一个简单的带有循环和函数的命令式语言。我们计划在我们继续构建MSL时包含更多示例。这些示例以相同的BSD样式发布许可证作为MSL。
使用机械化语义库的项目
以下项目使用MSL。虽然MSL用于它们,在某些情况下是与它们一起开发的,它们是独立项目,具有自己的开发人员、目标、代码库和关联许可证方案。
验证软件工具链项目的目标是连接机器验证源程序到机器验证的优化编译器。这个项目源于并发C小调项目,其中涉及并行Xavier变体的一级锁和线程分离逻辑勒罗伊的C小调语言。
Pthreads风格并发分离逻辑的设计和可靠性证明障碍。
Heap-Hop是使用Hoare的并发堆操作程序的证明程序监视器和消息传递同步。程序用pre注释以及后置条件和循环不变量,写在分离片段中逻辑。通信由一种称为契约的会话类型来管理。Heap-Hop可以证明其安全性和比赛自由性,而且由于合同的签订内存泄漏和通信安全。[来自Heap-Hop网站的文本]
文件列表
# |
文件名 |
行计数 |
|
组件 |
相关纸张 |
1 |
公理。v(v)
|
48 |
|
底座 |
|
2 |
延伸性。v(v) |
96 |
|
底座 |
|
三。 |
底座。v(v) |
119 |
|
底座 |
|
4 |
萼片。v(v) |
681 |
|
分离代数 |
[2] |
5 |
连接。v(v) |
148 |
|
分离代数 |
|
6 |
sepalg_generators(sepalg生成器)。v(v) |
960 |
|
分离代数 |
[2],[3],[4] |
7 |
交叉分割。v(v) |
494 |
|
分离代数 |
[2] |
8 |
join_hom_lemmas公司。v(v) |
421 |
|
分离代数 |
[3],[4] |
9 |
布尔_代数。v(v) |
433 |
|
分享 |
[2] |
10 |
树共享。v(v) |
2,427 |
|
分享 |
[2] |
11 |
分享。v(v) |
1,119 |
|
分享 |
[2] |
12 |
摘录。v(v) |
13 |
|
分享 |
|
13 |
结。v(v) |
489 |
|
间接理论 |
[3] |
14 |
knot-hered。v(v) |
675 |
|
间接理论 |
[4] |
15 |
节满。v(v) |
1,023 |
|
间接理论 |
|
16 |
knot_lemmas。v(v) |
118 |
|
间接理论 |
[3] |
17 |
knot_sa.v公司 |
429 |
|
间接性理论 |
[3],[4] |
18 |
knot_sa_普通。v(v) |
51 |
|
间接理论 |
|
19 |
旋钮垫片。v(v) |
1,599 |
|
间接理论 |
|
20 |
旋钮属性。v(v) |
349 |
|
间接性理论 |
|
21 |
sepalg_functors。v(v) |
409 |
|
间接理论 |
[4] |
22 |
结类刚毛。v(v) |
601 |
|
间接理论 |
[3] |
23 |
knot_unique(旋钮独特)。v(v) |
1,000 |
|
间接理论 |
[3] |
24 |
可老化。v(v) |
524 |
|
逻辑 |
[4] |
25 |
age_sepalg。v(v) |
328 |
|
逻辑 |
[3],[4] |
26 |
谓词_hered。v(v) |
811 |
|
逻辑 |
[1],[2],[3],[4] |
27 |
谓词_sl.v |
392 |
|
逻辑 |
[1],[2],[3],[4] |
28 |
子类型。v(v) |
186 |
|
逻辑 |
[1],[4] |
29 |
谓词_rec.v |
322 |
|
逻辑 |
[1],[4] |
30 |
收缩的。v(v) |
502 |
|
逻辑 |
[1],[4] |
31 |
msl标准。v(v) |
21 |
|
MSL公司 |
|
|
|
|
|
|
|
|
总计 |
16,788 |
|
MSL公司 |
[1],[2],[3],[4] |
组件详细信息
底座
公理。v(v)
此文件包含开发的公理基础。我们假设依赖功能扩展性和命题扩展性。这些公理与排除中间、依赖唯一选择、关系选择等。
广泛性。v(v)
外延公理的后果。
底座。v(v)
这将导出整个开发、我们的公理和外延事实,以及一些定制的便利策略。
分离代数
萼片。v(v)
该文件定义了分离代数的关系形式不相交公理。我们还定义了join_sub关系和joins关系。此外,还证明了关于这些定义的初等引理。
连接。v(v)
该文件定义了一些(存在的)连接的构造版本定义,例如joinsub和joins。
sepalg_generators(sepalg生成器)。v(v)
我们在此文件中定义SA运算符。中提到的所有操作员[2](布尔代数生成器除外,它位于股份部分),[3]、和[4]出现在这里,以及其他几个。
交叉分割。v(v)
我们定义并证明了[2]包括与分配分离的关系代数以及如何通过许多生成器来获取属性。
join_hom_lemmas公司。v(v)
一系列引理,可用于证明函数是联接的中定义的同态[3]和[4], 尽管引理本身在任何论文中都没有涉及。
分享
布尔_代数。v(v)
该文件从序理论的角度定义布尔代数。我们还定义与我们想要的共享模型属性相关的公理,包括相对化、分裂和代币工厂公理。
树共享。v(v)
这里我们构建了布尔标记树共享模型,如[2]。但是,请注意,令牌计数的证据公理遵循的路径与那篇论文中的证明略有不同。这个主要是因为对Coq中的集合进行推理是不方便的。
分享。v(v)
这个文件只是将tree_shares.v中的构造重新打包为更好的下游用户界面。我们还定义了“积极”份额的概念;这是一个不统一的份额。
摘录。v(v)
这个文件将把共享模型编译成OCaml代码,用于程序分析工具。阅读说明书至看看怎么做。
间接理论
结。v(v)
此文件包含用于建模近似值的中心“节点”开发到逆变循环。包括公理化和模型构建。它遵循第8节[3]相当非常接近。
诺特·赫德。v(v)
通过在构造中使用单调属性来增强knot.v。 结果是,从结中提取的所有谓词都是自动的遗传。尽管公理化并不比基本情况下,施工难度明显加大。 The 公理化在[4]; 这个施工遗嘱在以后的论文中解释。
节满。v(v)
增强knot_hered.v,使结的输入成为双分母允许用户提供进一步限制谓词的关系可以存储在结中。公理化稍微复杂一些比knothered案例中的情况要复杂得多。 这个文件将在以后的文章中解释。
knot_lemmas。v(v)
间接理论的简单引理,包括Galois连接。
knot_sa.v公司
节顶部分离代数的定义[3]有关更多详细信息,请参阅[4].
knot_sa_普通。v(v)
当您想使用逻辑模块,但没有兴趣时使用分离行为。
旋钮垫片。v(v)
为常见情况定义结接口(例如,当我们不需要bifunctor),并提供转换为knotfull的垫片。
旋钮属性。v(v)
该文件专门用于knot、knot_lemmas和knot_sa文件,以使用“Prop”作为事实值。
sepalg_functors。v(v)
需要“取消映射”的技术开发来获得额外的年龄*knot_sa中的属性,如的第7节所述[4].
结类刚毛。v(v)
一种交替的、无公理的结的发展。我们避免了可拓性公理,通过显式处理等价关系和相应地削弱了理论的公理。由于缺乏而不是主线使用量大,构建时间长。
knot_unique(旋钮独特)。v(v)
结的唯一性证明的发展。我们证明任何两个间接理论的实现是同构的。
逻辑
可老化。v(v)
定义一个第二节中的近似概念 属于[4]作为“可老化”类型类。
age_sepalg。v(v)
我们在第6节中用as增强了分离代数[4]. The “ASA”类型类提供了一个足以定义Kripke模型的接口如下所示。使用属性实现接口从knot_sa获得。
谓词_hered。v(v)
第节中讨论的高阶模态逻辑的定义第2、4和5页[1]; 第4节简要介绍属于[2]; 第5节和第6节[3]; 以及第2节和第3节[4].
谓词_sl.v
高阶分离逻辑的定义,如[1],第4节属于[2],第7节[3]、和第6节[4].
子类型。v(v)
关于时尚暗示的引理。第4节对此进行了部分解释属于[4].
谓词_rec.v
关于等价递归的定义和证明。我们包括这两个标准“mu”递归以及更强大的高阶变体。此文件第5节对其进行了部分解释[1]和第4节[4]并将在中进行解释更多细节将在未来的论文中介绍。
收缩的。v(v)
用于证明各种谓词函数压缩或非扩展(对于正则递归和高阶品种)。本文件的第4节对其进行了部分解释[4]并将在未来的文章中进行更详细的解释。
MSL公司
msl标准。v(v)
为用户重新导出MSL库的主要组件的文件。
人
机械化语义库由开发安德鲁·W·阿佩尔,罗伯特·多金斯、和阿奎那·霍伯.
许可证
版权所有(c)2009-2010,Andrew Appel、Robert Dockins和Aquina Hobor。
保留所有权利。
如果满足以下条件,则允许以源代码和二进制形式重新分发和使用,无论是否进行修改:
-重新分发源代码必须保留上述版权声明、此条件列表和以下免责声明。
-二进制形式的重新分发必须在分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
本软件由作者和贡献者“按原样”提供,不承担任何明示或暗示的担保,包括但不限于对适销性和特定用途适用性的暗示担保。在任何情况下,作者或撰稿人都不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代货物或服务;使用、数据或利润损失;或业务中断)承担责任,无论是因何原因,也无论是基于任何责任理论,无论是在合同中,严格责任,或因使用本软件而以任何方式产生的侵权行为(包括疏忽或其他),即使被告知可能发生此类损害。