
软件形式化验证
文章平均质量分 89
构建高可靠性软件的理论
行走的帝企鹅
努力变强吧
展开
-
IndProp章节中pumping lemma的证明
在software foundations–Logic foudations–IndProp中,有一个证明pumping lemma的练习,本文介绍了一种证明方法。辅助引理为了证明pumping lemma,除了software foundations–Logic foudations–IndProp中已经给出的引理外(napp_star, pumping_constant_0_false ),还使用了下边两个新定义的引理。le_plus_bothLemma le_plus_both: foral原创 2021-06-02 13:05:06 · 660 阅读 · 0 评论 -
software foundations LF Logic(一)
使用Theorem, Lemma和Example定义的命题(目标)在coq中拥有一个相同的类型Prop, 即命题(目标)本身也是一种变量,其类型为Prop. 因此可以用于执行各种运算,详见[Programming with Propositions](#Programming with Propositions)注意完整的定理包含了命题Prop以及其证明过程(当然通常说的定理仅指命题部分),因此定理本身的类型并不是Prop(即使用Check检查Theorem,Lemma以及Example并不会得到P.原创 2021-05-28 00:41:22 · 686 阅读 · 0 评论 -
software foundations LF Tactics
更多内容见 https://github.com/january147/software_foundations_notes原始章节参考 software foundations LF TaticsTaticsapplyapply将某个假设或者定理应用于目标,如果目标同该假设或者定理完全一致(等式两端的内容也不能交换),则直接完成目标的证明;如果假设或者定理是->类型,并且目标匹配假设或者定理中->的右端,则尝试将目标转换为假设或者定理中->的左端。例如下边这个定理的证明.原创 2021-05-26 15:05:57 · 714 阅读 · 0 评论 -
software foundations LF Poly
Polymorphism(多态)某一些类型,比如list, 其内部存储的元素的类型通常并不影响list本身支持的一些操作(例如添加元素、删除元素、获取长度、获取某个元素等),因此list的定义不应该和其内存存储的元素完全绑定(即不应该针对每种类型的元素都分别定义一个存储其元素的list类型以及对应的行为)。list应该作为一种比普通类型更高阶的类型,从而使得list可以用于存储多种不同的类型,并且针对list的操作应该可以应用到存储不同的类型数据的list中,这样list的操作就体现出了多态性(Polym原创 2021-05-25 16:20:14 · 264 阅读 · 0 评论 -
software foundations LF Lists
更多内容见 https://github.com/january147/software_foundations_notespair和多元素匹配(a, b)作为一个pair表示一个变量,在match的匹配列表左端,多个由逗号分隔但没有在括号里的变量表示匹配多个变量(* Can't match on a pair with multiple patterns: *)Definition bad_fst (p : natprod) : nat :=(* match仅匹配一个变量p *)match.原创 2021-05-24 15:20:01 · 162 阅读 · 0 评论 -
software foundations LF Induction
更多内容见 https://github.com/january147/software_foundations_notes software foundations LF Induction导入经过编译的模块From LF Require Export Basics.LF表示项目目录,Basics是导入的模块名称(对应Basics.vo文件)First create a file named _CoqProject containing the following line (if.原创 2021-05-23 15:36:43 · 304 阅读 · 0 评论 -
software foundations LF Basics
更多内容见 https://github.com/january147/software_foundations_notesCoqCoq’s native functional programming language, called Gallina.注释(* 注释内容 * )分隔符Coq使用.(英文句号)来分隔表达式。显示类型使用Check关键字来检查一个表达式的类型Check true.定义类型enumerated typesInductive day : Type .原创 2021-05-22 22:52:08 · 350 阅读 · 0 评论