《交互式定理证明与程序开发 Coq归纳构造演算的艺术》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:YvesBertot,PierreCasteran等著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302208136
  • 页数:432 页
图书介绍:Coq是一个用于验证定理的证明是否正确的计算机工具。本书的主要目标是从实践的角度来理解Coq系统及其基本理论,即归纳构造演算。这本书给出了大量的例子,所有这些例子都可以在计算机上执行。

1概述 1

1.1表达式、类型和函数 1

1.2命题和证明 2

1.3命题和类型 3

1.4规范说明和已验证的程序 4

1.5一个排序的例子 4

1.5.1归纳定义 4

1.5.2“包含相同元素”的关系 5

1.5.3排序程序的规范说明 5

1.5.4一个辅助函数 6

1.5.5排序函数主程序 6

1.6学习Coq 7

1.7本书内容 8

1.8词法约定 9

2类型和表达式 11

2.1第一步 11

2.1.1项、表达式和类型 11

2.1.2解释辖域 12

2.1.3类型检查 13

2.2游戏规则 15

2.2.1简单类型 15

2.2.2标识符、环境、上下文 16

2.2.3表达式及其类型 17

2.2.4自由和约束变元;α-变换 24

2.3声明和定义 25

2.3.1全局声明和定义 25

2.3.2 Section和局部变量 26

2.4计算 29

2.4.1替换 30

2.4.2归约规则 30

2.4.3归约序列 32

2.4.4可转换性 32

2.5类型、大类和类型空间 32

2.5.1 Set大类 33

2.5.2类型空间 34

2.5.3规范说明的定义和声明 35

2.6实现规范说明 36

3命题和证明 39

3.1最小命题逻辑 41

3.1.1命题和证明 41

3.1.2目标和证明策略 42

3.1.3第一个目标制导的证明 42

3.2类型规则和证明策略的联系 46

3.2.1命题构造规则 46

3.2.2推理规则和证明策略 47

3.3一个交互式证明的结构 51

3.3.1激活目标处理系统 51

3.3.2一个交互式证明的当前阶段 52

3.3.3取消操作 52

3.3.4证明的正常结束 52

3.4证明无关性 53

3.4.1 Theorem和Definition的分析比较 53

3.4.2证明策略有助于构造程序吗 54

3.5 Sections和证明 55

3.6证明策略的结合 56

3.6.1泛证明策略 56

3.6.2证明维护问题 59

3.7命题逻辑的完备性 61

3.7.1一个完备的证明策略集 61

3.7.2不可证命题 62

3.8其他证明策略 62

3.8.1 cut和assert策略 62

3.8.2自动证明策略 64

3.9一种新的抽象方式 65

4依赖积 67

4.1依赖类型的优点 67

4.1.1对A→B类型的扩展 68

4.1.2关于绑定 71

4.1.3一种新的构造 72

4.2类型规则和依赖积 74

4.2.1函数应用的类型规则 74

4.2.2关于抽象的类型规则 77

4.2.3类型推导 80

4.2.4转换规则 83

4.2.5依赖积和可转换性次序 83

4.3依赖积的表达能力 83

4.3.1积的构造规则 84

4.3.2依赖类型 84

4.3.3多态 86

4.3.4 Coq系统中的相等性 90

4.3.5高阶类型 91

5常用逻辑 95

5.1依赖积的实用方面 95

5.1.1 exact和assumption 95

5.1.2 intro策略 96

5.1.3 apply策略 98

5.1.4 unfold策略 104

5.2逻辑联结词 105

5.2.1引入和消去规则 106

5.2.2反证法 107

5.2.3否定 108

5.2.4合取和析取 110

5.2.5关于repeat高阶策略 112

5.2.6存在量词 112

5.3等价性与重写 113

5.3.1证明等式 113

5.3.2使用等式:重写证明策略 114

5.3.3*pattern策略 116

5.3.4*条件重写 117

5.3.5搜索用于重写的定理 118

5.3.6用于等式的其他证明策略 118

5.4策略总结表 119

5.5***非直谓定义 119

5.5.1警告 119

5.5.2True和False 119

5.5.3莱布尼兹等价 120

5.5.4其他一些联结词和量词 122

5.5.5书写非直谓定义的指导原则 123

6归纳数据类型 125

6.1非递归类型 125

6.1.1枚举类型 125

6.1.2简单的推理与计算 127

6.1.3 elim策略 128

6.1.4模式匹配 129

6.1.5记录类型 132

6.1.6带变体的记录 134

6.2分情形推理 135

6.2.1 case证明策略 135

6.2.2矛盾等式 137

6.2.3单射的构造子 140

6.2.4归纳类型和等式 142

6.2.5 * case的使用准则 143

6.3递归类型 147

6.3.1一个归纳类型——自然数 147

6.3.2在自然数上做归纳证明 148

6.3.3递归编程 150

6.3.4构造子的形态变化 152

6.3.5**具有函数域的类型 155

6.3.6在递归函数上完成证明 157

6.3.7匿名递归函数(fix) 159

6.4多态类型 159

6.4.1多态列表 160

6.4.2 option类型 162

6.4.3二元组类型 163

6.4.4不相交和的类型 164

6.5*依赖归纳类型 165

6.5.1一阶数据做参数 165

6.5.2可变依赖归纳类型 165

6.6*空类型 167

6.6.1非依赖空类型 167

6.6.2依赖空类型 169

7证明策略和自动化证明 171

7.1用于归纳类型的证明策略 171

7.1.1分情况讨论和递归 171

7.1.2变换 172

7.2 auto和eauto证明策略 174

7.2.1证明策略库管理命令:Hint 174

7.2.2*eauto证明策略 177

7.3针对重写的自动证明策略 177

7.3.1 autorewrite证明策略 177

7.3.2 subst证明策略 178

7.4和数相关的证明策略 179

7.4.1 ring证明策略 179

7.4.2 omega证明策略 181

7.4.3 field证明策略 182

7.4.4 fourier证明策略 182

7.5其他决策过程 183

7.6**策略定义语言 184

7.6.1策略中的变元 184

7.6.2模式匹配 185

7.6.3在已经定义过的策略中使用归约 191

8归纳谓词 193

8.1归纳属性 193

8.1.1几个例子 193

8.1.2归纳谓词和逻辑程序设计 195

8.1.3对归纳定义的建议 195

8.1.4排序列表 196

8.2归纳属性和逻辑连接词 198

8.2.1表示真值 199

8.2.2表示矛盾式 199

8.2.3表示合取 199

8.2.4表示析取 200

8.2.5表示存在量词 200

8.2.6表示等价 200

8.2.7***异构等式 201

8.2.8一个奇特的归纳原理? 205

8.3归纳特性的推理 206

8.3.1结构化intros 206

8.3.2 constructor策略 207

8.3.3*在归纳谓词上做归纳 207

8.3.4*对le进行归纳 209

8.4*归纳关系和函数 213

8.4.1表示阶乘函数 213

8.4.2**表示一个语言的语义 218

8.4.3**语义属性证明 220

8.5 * elim行为的详细阐述 223

8.5.1实例化变元 223

8.5.2转置 225

9*函数及其规范 231

9.1用于规范的归纳类型 231

9.1.1“子集”类型 231

9.1.2嵌套的子集类型 233

9.1.3有认证的不相交和 234

9.1.4混合不相交和 235

9.2强规范 235

9.2.1良规函数 236

9.2.2将函数构造为证明 236

9.2.3偏函数的前置条件 237

9.2.4**对前置条件的证明 238

9.2.5**增强规范 239

9.2.6***最小规范增强 240

9.2.7 refine策略 243

9.3结构递归的变种形式 245

9.3.1多步结构递归 245

9.3.2简化步骤 249

9.3.3多参数递归函数 250

9.4**二进制除法 254

9.4.1弱规范的除法 254

9.4.2良规的二进制除法 259

10*程序抽取和命令式程序设计 263

10.1抽取到函数式语言程序 263

10.1.1 Extraction命令 263

10.1.2抽取机制 264

10.1.3 Prop、 Set和抽取 272

10.2描述命令式程序 274

10.2.1工具Why 274

10.2.2 *** Why的内部工作原理 277

11*实例分析 285

11.1二叉搜索树 285

11.1.1数据结构 286

11.1.2一个直接的存在判定方法 286

11.1.3搜索树的描述 287

11.2描述程序 289

11.2.1查找 289

11.2.2插入一个数 289

11.2.3**删除一个数 290

11.3辅助引理 290

11.4规范说明的实现 291

11.4.1查找判定的实现 291

11.4.2插入 294

11.4.3删除元素 298

11.5可能的改进 299

11.6另一个实例 300

12*模块系统 301

12.1签名 301

12.2模块 303

12.2.1构造一个模块 304

12.2.2一个例子:Keys 304

12.2.3参数化模块(函子) 307

12.3可判定序关系理论 310

12.3.1用函子丰富理论 311

12.3.2字典序函子 313

12.4一个字典模块 315

12.4.1丰富了的实现 315

12.4.2用函子构造字典 316

12.4.3一个简单的实现 316

12.4.4一个高效的实现 318

12.5结论 321

13**无穷对象和证明 323

13.1余归纳类型 323

13.1.1 CoInductive命令 323

13.1.2余归纳类型的特殊性质 323

13.1.3无限列表(流) 324

13.1.4惰性列表 324

13.1.5惰性二叉树 325

13.2辅助余归纳类型的技术 325

13.2.1构造有限对象 325

13.2.2模式匹配 326

13.3构造无穷对象 327

13.3.1一个失败的尝试 327

13.3.2 CoFixpoint命令 328

13.3.3余递归函数示例 329

13.3.4一些错误的定义 331

13.4展开技术 332

13.4.1系统性分解 333

13.4.2分解引理的使用 334

13.4.3化简对余归函数的调用 335

13.5余归纳类型上的归纳谓词 336

13.6余归纳谓词 338

13.6.1无穷序列谓词 338

13.6.2构造无限证明 338

13.6.3违反Guard约束 340

13.6.4消去技术 342

13.7互模拟等价 343

13.7.1 bisimilar谓词 344

13.7.2互模拟等价的使用 345

13.8 Park原理 346

13.9 LTL 347

13.10一个实例:状态迁移系统 350

13.11结论 351

14**归纳类型基础 353

14.1形成规则 353

14.1.1归纳类型 353

14.1.2构造子 355

14.1.3归纳原理的构造 358

14.1.4递归子的类型 360

14.1.5谓词的归纳原理 366

14.1.6 Scheme命令 368

14.2***模式匹配和证明上的递归 369

14.2.1模式匹配的约束 369

14.2.2放宽约束 370

14.2.3递归 372

14.3互引归纳类型 374

14.3.1树和森林 374

14.3.2使用互引归纳证明 376

14.3.3***树和树列表 378

15*一般递归 381

15.1有界递归 381

15.2**良基递归函数 384

15.2.1良基关系 384

15.2.2可访问性证明 385

15.2.3整合良基关系 386

15.2.4良基递归 387

15.2.5递归子well_ founded_induction 387

15.2.6良基欧氏除法 388

15.2.7嵌套递归 391

15.3**用迭代法实现通用递归 393

15.3.1与递归函数相关的泛函 393

15.3.2终止性证明 394

15.3.3构造具体函数 397

15.3.4证明不动点方程 397

15.3.5使用不动点方程 399

15.3.6讨论 399

15.4***在人为谓词上递归 400

15.4.1定义人为谓词 400

15.4.2逆转定理 401

15.4.3定义函数 401

15.4.4证明该函数的特性 402

16*自反证明 405

16.1引言 405

16.2直接的计算证明 406

16.3**借助代数计算的证明 409

16.3.1基于结合律的证明 409

16.3.2把类型和操作符通用化 413

16.3.3***交换律:变量排序 416

16.4结论 419

附录 421

插入排序 421

参考文献 427