| 作者 |
| 埃蒙德·阿布瑞尔(Jean-Raymond Abrial) |
| 丛书名 |
| 出版社 |
| 人民邮电出版社 |
| ISBN |
| 9787115508997 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 这本实用的教科书适用于形式化方法的入门课程或高级课程。本书以B形式化方法的一个扩展Event-B作为工具,展示了一种完成系统建模和设计的数学方法。 简-埃蒙德·阿布瑞尔(Jean-Raymond Abrial)是国际著名计算机科学家,曾任苏黎世联邦理工学院客座教授,他基于精化的思想提出了一种系统化的方法,教读者如何逐步构造出所期望的模型,并通过严格的证明完成对所构造模型做系统化的推理。本书将介绍如何根据实际需要去构造各种程序,以及如何更为普遍地构造各种离散系统的模型。本书提供了大量的示例,这些示例源自计算机系统开发的各个领域,包括顺序程序、并发程序和电子线路等。 本书还包含了大量具有不同难度的练习和开发项目。书中的每个例子都用Rodin平台工具集证明过。 本书适合作为高等院校计算机、软件工程、网络工程、信息安全等专业高年级本科生、研究生的教材,也可供相关领域的研究人员和技术人员参考。 |
| 目录 |
| 第 1章 引言\t1 1.1 动机\t1 1.2 各章概览\t2 1.3 如何用这本书\t6 1.4 形式化方法\t8 1.5 一个小迂回:蓝图\t9 1.6 需求文档\t10 1.6.1 生命周期\t10 1.6.2 需求文档的困难\t10 1.6.3 一种有用的比较\t11 1.7 本书中使用的“形式化方法”的定义\t12 1.7.1 复杂系统\t12 1.7.2 离散系统\t13 1.7.3 测试推理与模型(蓝图)推理\t13 1.8 有关离散模型的非形式化概览\t14 1.8.1 状态和迁移\t14 1.8.2 操作性解释\t14 1.8.3 形式化推理\t15 1.8.4 管理闭模型的复杂性\t15 1.8.5 精化\t15 1.8.6 分解\t16 1.8.7 泛型开发\t16 1.9 参考资料\t17 第 2章 控制桥上的汽车\t18 2.1 引言\t18 2.2 需求文档\t18 2.3 精化策略\t20 2.4 初始模型:限制汽车的数量\t20 2.4.1 引言\t20 2.4.2 状态的形式化\t21 2.4.3 事件的形式化\t22 2.4.4 前-后谓词\t23 2.4.5 证明不变式的保持性质\t23 2.4.6 相继式\t25 2.4.7 应用不变式保持性的规则\t25 2.4.8 证明义务的证明\t26 2.4.9 推理规则\t27 2.4.10 元变量\t29 2.4.11 证明\t29 2.4.12 更多推理规则\t30 2.4.13 改造两个事件:引进卫\t31 2.4.14 改造的不变式保持规则\t31 2.4.15 重新证明不变式的保持性\t32 2.4.16 初始化\t33 2.4.17 初始化事件init的不变式建立规则\t33 2.4.18 应用不变式建立规则\t34 2.4.19 证明初始化的证明义务:更多推理规则\t34 2.4.20 无死锁\t35 2.4.21 无死锁规则\t35 2.4.22 应用无死锁证明义务规则\t35 2.4.23 更多推理规则\t36 2.4.24 证明无死锁的证明义务\t37 2.4.25 对初始模型的总结\t38 2.5 第 一次精化:引入单行桥\t38 2.5.1 引言\t38 2.5.2 状态的精化\t39 2.5.3 精化抽象事件\t40 2.5.4 重温前-后谓词\t40 2.5.5 精化的非形式化证明\t41 2.5.6 证明抽象事件的正确精化\t42 2.5.7 应用精化规则\t43 2.5.8 精化初始化事件init\t45 2.5.9 初始化事件init精化正确性的证明义务规则\t46 2.5.10 应用初始化精化的证明义务规则\t46 2.5.11 引入新事件\t46 2.5.12 空动作skip\t47 2.5.13 证明两个新事件的正确性\t47 2.5.14 证明新事件的收敛性\t49 2.5.15 应用非收敛证明义务规则\t50 2.5.16 相对无死锁\t51 2.5.17 应用相对无死锁证明义务规则\t51 2.5.18 更多推理规则\t52 2.5.19 第 一个精化的总结\t54 2.6 第二次精化:引入交通灯\t55 2.6.1 精化状态\t55 2.6.2 精化抽象事件\t56 2.6.3 引进新事件\t56 2.6.4 叠加:调整精化规则\t57 2.6.5 证明事件的正确性\t58 2.6.6 更多逻辑推理规则\t58 2.6.7 试探性的证明和解\t58 2.6.8 新事件的收敛性\t64 2.6.9 相对无死锁\t67 2.6.10 第二个精化的总结\t68 2.7 第三次精化:引入车辆传感器\t70 2.7.1 引言\t70 2.7.2 精化状态\t72 2.7.3 精化控制器里的抽象事件\t75 2.7.4 在环境里增加新事件\t77 2.7.5 新事件的收敛性\t78 2.7.6 无死锁\t78 第3章 冲压机控制器\t79 3.1 非形式描述\t79 3.1.1 基本设备\t79 3.1.2 基本命令和按钮\t80 3.1.3 基本用户动作\t80 3.1.4 用户工作期\t80 3.1.5 危险:控制器的必要性\t80 3.1.6 安全门\t81 3.2 设计模式\t81 3.2.1 动作和反应\t82 3.2.2 第 一种情况:一个简单的动作反应模式,无反作用\t83 3.2.3 第二种情况:一个简单的动作模式,一次重复动作和反应\t86 3.3 冲压机的需求\t90 3.4 精化策略\t91 3.5 初始模型:连接控制器和电动机\t92 3.5.1 引言\t92 3.5.2 建模\t92 3.5.3 事件的总结\t94 3.6 第 一次精化:把电动机按钮连接到控制器\t94 3.6.1 引言\t94 3.6.2 建模\t95 3.6.3 加入“假”事件\t99 3.6.4 事件的总结\t100 3.7 第二次精化:连接控制器到离合器\t100 3.8 另一个设计模式:两个强反应的弱同步\t101 3.8.1 引言\t101 3.8.2 建模\t103 3.9 第三次精化:约束离合器和电动机\t108 3.10 第四次精化:连接控制器到安全门\t110 3.10.1 拷贝\t110 3.10.2 事件的总结\t110 3.11 第五次精化:约束离合器和安全门\t110 3.12 另一设计模式:两个强反应的强同步\t111 3.12.1 引言\t111 3.12.2 建模\t112 3.13 第六次精化:离合器和安全门之间的更多约束\t117 3.14 第七次精化:把控制器连接到离合器按钮\t118 3.14.1 拷贝\t118 3.14.2 事件的总结\t118 第4章 简单文件传输协议\t120 4.1 需求\t120 4.2 精化策略\t120 4.3 协议的初始模型\t121 4.3.1 状态\t122 4.3.2 一些数学表示法\t122 4.3.3 事件\t125 4.3.4 证明\t125 4.4 协议的第 一次精化\t127 4.4.1 非形式化的说明\t127 4.4.2 状态\t128 4.4.3 更多数学符号\t128 4.4.4 事件\t130 4.4.5 精化证明\t131 4.4.6 事件receive的收敛性证明\t134 4.4.7 相对无死锁证明\t135 4.5 协议的第二次精化\t135 4.5.1 状态和事件\t135 4.5.2 证明\t137 4.6 协议的第三次精化\t137 4.6.1 状态\t137 4.6.2 事件\t138 4.6.3 全称量化谓词的推理规则\t138 4.7 对开发的回顾\t139 4.7.1 动机和预期事件的引入\t139 4.7.2 初始模型\t140 4.7.3 第 一次精化\t140 4.7.4 第二次精化\t141 4.7.5 第三次精化\t141 4.8 参考资料\t142 第5章 Event-B建模语言和证明义务规则\t143 5.1 Event-B表示法\t143 5.1.1 引言:机器和上下文\t143 5.1.2 机器和上下文的关系\t143 5.1.3 上下文的结构\t144 5.1.4 上下文的例子\t145 5.1.5 机器的结构\t145 5.1.6 机器的例子\t146 5.1.7 事件\t147 5.1.8 动作\t147 5.1.9 事件的例子\t149 5.2 证明义务规则\t150 5.2.1 引言\t150 5.2.2 不变式保持证明义务规则:INV\t151 5.2.3 可行性证明义务规则:FIS\t153 5.2.4 卫加强证明义务规则:GRD\t153 5.2.5 卫归并证明义务规则:MRG\t154 5.2.6 模拟证明义务规则:SIM\t155 5.2.7 数值变动式证明义务规则:NAT\t158 5.2.8 有穷集变动式证明义务规则:FIN\t158 5.2.9 变动量证明义务规则:VAR\t159 5.2.10 非确定性见证证明义务规则:WFIS\t161 5.2.11 定理证明义务规则:THM\t162 5.2.12 良好定义证明义务规则:WD\t162 第6章 有界重传协议\t163 6.1 有界重传协议的非形式说明\t163 6.1.1 正常行为\t163 6.1.2 不可靠的通信\t163 6.1.3 协议流产\t164 6.1.4 交替位\t164 6.1.5 协议的最后情况\t164 6.1.6 BRP的伪代码描述\t165 6.1.7 有关伪代码的说明\t167 6.2 需求文档\t167 6.3 精化策略\t168 6.4 初始模型\t169 6.4.1 状态\t169 6.4.2 事件\t169 6.5 第 一次和第二次精化\t170 6.5.1 状态\t170 6.5.2 第 一次精化的事件\t170 6.5.3 第二次精化的事件\t171 6.6 第三次精化\t171 6.6.1 状态\t172 6.6.2 事件\t172 6.6.3 事件之间的同步\t173 6.7 第四次精化\t173 6.7.1 状态\t173 6.7.2 事件\t174 6.7.3 事件的同步\t175 6.8 第五次精化\t176 6.8.1 状态\t176 6.8.2 事件\t177 6.8.3 事件的同步\t180 6.9 第六次精化\t181 6.10 参考资料\t181 第7章 一个并发程序的开发1\t182 7.1 分布式和并发程序的比较\t182 7.1.1 分布式程序\t182 7.1.2 并发程序\t182 7.2 提出的实例\t183 7.2.1 非形式的说明\t183 7.2.2 非并发的场景展示\t185 7.2.3 定义原子性\t186 7.3 交错\t187 7.3.1 问题\t187 7.3.2 计算不同交错的数目\t188 7.3.3 结果\t189 7.4 并发程序的规范描述\t190 7.4.1 写和读的轨迹\t190 7.4.2 轨迹之间的关系\t190 7.4.3 不变式的总结\t193 7.4.4 事件\t193 7.5 精化策略\t194 7.5.1 最终精化的梗概\t194 7.5.2 精化的目标\t196 7.6 第 一次精化\t196 7.6.1 读者状态\t196 7.6.2 读事件\t197 7.6.3 写者状态\t198 7.6.4 写事件\t198 7.7 第二次精化\t200 7.7.1 状态\t200 7.7.2 事件和新增的不变式\t200 7.8 第三次精化\t203 7.8.1 状态\t203 7.8.2 事件\t203 7.9 第四次精化\t204 7.9.1 状态\t204 7.9.2 事件\t205 7.10 参考资料\t206 第8章 电路的开发\t207 8.1 引言\t207 8.1.1 同步电路\t207 8.1.2 电路与其环境的耦合\t208 8.1.3 耦合的动态观点\t208 8.1.4 耦合的静态观点\t209 8.1.5 协调性条件\t209 8.1.6 一个警告\t210 8.1.7 电路的最终构造\t210 8.1.8 一个非常小的示例\t213 8.2 第 一个例子\t214 8.2.1 非形式的规范描述\t214 8.2.2 初始模型\t215 8.2.3 精化电路以减少其非确定性\t218 8.2.4 通过改变数据空间来精化电路\t220 8.2.5 构造最后的电路\t222 8.3 第二个例子:仲裁器\t225 8.3.1 非形式的规范描述\t225 8.3.2 初始模型\t226 8.3.3 第 一次精化:让电路生成二进制输出\t229 8.3.4 第二次精化\t231 8.3.5 第三次精化:消除电路的非确定性\t233 8.3.6 第四次精化:构造最后的电路\t234 8.4 第三个例子:一种特殊的道路交通灯\t234 8.4.1 非形式的规范描述\t235 8.4.2 关注点分离的方法\t235 8.4.3 优先权电路:初始模型\t236 8.4.4 最后的Priority电路\t238 8.5 Light电路\t240 8.5.1 一个抽象:Upper电路\t241 8.5.2 精化:加入Lower电路\t242 8.6 参考资料\t245 第9章 数学语言\t246 9.1 相继式演算\t246 9.1.1 定义\t246 9.1.2 一个数学语言的相继式\t248 9.1.3 初始理论\t248 9.2 命题语言\t249 9.2.1 语法\t249 9.2.2 初始理论的扩充\t250 9.2.3 派生规则\t250 9.2.4 方法论\t252 9.2.5 命题语言的扩充\t252 9.3 谓词语言\t253 9.3.1 语法\t253 9.3.2 谓词和表达式\t254 9.3.3 全称量词的推理规则\t254 9.4 相等谓词\t256 9.5 集合论语言\t257 9.5.1 语法\t258 9.5.2 集合论公理\t258 9.5.3 基本集合运算符\t259 9.5.4 基本集合运算符的推广\t260 9.5.5 二元关系运算符\t261 9.5.6 函数运算符\t264 9.5.7 各种箭头的总结\t265 9.5.8 lambda抽象和函数调用\t265 9.6 布尔和算术语言\t266 9.6.1 语法\t266 9.6.2 皮阿诺公理和递归定义\t267 9.6.3 算术语言的扩充\t267 9.7 高级数据结构\t269 9.7.1 反自反的传递闭包\t269 9.7.2 强连通图\t270 9.7.3 无穷表\t271 9.7.4 有穷表\t274 9.7.5 环\t276 9.7.6 无穷树\t277 9.7.7 有穷深度树\t280 9.7.8 自由树\t281 9.7.9 良定义条件和有向无环图\t283 第 10章 环形网络上选领导\t284 10.1 需求文档\t284 10.2 初始模型\t286 10.3 讨论\t286 10.3.1 第 一个尝试\t286 10.3.2 第二个尝试\t287 10.3.3 第三个尝试\t287 10.3.4 解的非形式化展示\t287 10.4 第 一次精化\t288 10.4.1 状态:环的形式化\t288 10.4.2 状态:变量\t289 10.4.3 事件\t289 10.5 证明\t289 10.5.1 事件elect的证明\t290 10.5.2 事件accept的证明\t291 10.5.3 事件reject的证明\t293 10.5.4 新事件不发散的证明\t293 10.5.5 无死锁的证明\t293 10.6 参考资料\t294 第 11章 树形网络上的同步\t295 11.1 引言\t295 11.2 初始模型\t296 11.2.1 状态\t296 11.2.2 事件\t297 11.2.3 证明\t297 11.3 第 一次精化\t298 11.3.1 状态\t298 11.3.2 事件\t300 11.3.3 证明\t300 11.4 第二次精化\t301 11.5 第三次精化\t303 11.5.1 事件ascending的精化\t303 11.5.2 事件descending的精化\t304 11.5.3 证明定理thm3_4\t306 11.5.4 证明不变式inv3_3的保持性\t306 11.6 第四次精化\t308 11.7 参考资料\t310 第 12章 移动代理的路由算法\t311 12.1 问题的非形式化描述\t311 12.1.1 抽象的非形式化描述\t311 12.1.2 第 一个非形式化的精化\t312 12.1.3 第二个非形式化的精化\t312 12.1.4 第三个非形式化的精化:解\t314 12.2 初始模型\t315 12.2.1 状态\t315 12.2.2 事件\t316 12.2.3 证明\t317 12.3 第 一次精化\t318 12.3.1 状态\t318 12.3.2 事件\t319 12.3.3 证明\t320 12.4 第二次精化\t320 12.4.1 状态\t320 12.4.2 事件\t322 12.4.3 证明\t323 12.5 第三次精化:数据精化\t324 12.5.1 状态\t324 12.5.2 事件\t324 12.5.3 证明\t325 12.6 第四次精化\t325 12.7 参考资料\t325 第 13章 在连通图网络上选领导\t326 13.1 初始模型\t326 13.1.1 状态\t326 13.1.2 事件\t327 13.2 第 一次精化\t327 13.2.1 定义自由树\t327 13.2.2 扩充状态\t327 13.2.3 事件的第 一次精化\t328 13.2.4 第 一次精化的证明\t329 13.3 第二次精化\t329 13.3.1 第二次精化的状态\t329 13.3.2 事件\t329 13.3.3 证明\t330 13.4 第三次精化:竞争问题\t330 13.4.1 引言\t330 13.4.2 处理竞争的状态\t331 13.4.3 处理竞争的事件\t332 13.5 第四次精化:简化\t332 13.6 第五次精化:引入基数\t333 第 14章 证明义务的数学模型\t335 14.1 引言\t335 14.2 不变式保持性的证明义务规则\t335 14.3 观察离散迁移系统的演化:迹\t337 14.3.1 第 一个例子\t338 14.3.2 迹\t338 14.3.3 迹的特征\t339 14.3.4 演化图\t339 14.3.5 数学表示\t339 14.4 用迹表示简单精化\t340 14.4.1 第二个例子\t340 14.4.2 比较这两个例子\t341 14.4.3 简单精化:非形式化的方法\t342 14.4.4 简单精化:形式化定义\t342 14.4.5 考虑个别的事件\t343 14.4.6 外部变量和内部变量\t344 14.4.7 外部集合\t345 14.5 广义精化的集合论表示\t345 14.5.1 引言\t346 14.5.2 精化的形式化定义\t347 14.5.3 精化的充分条件:前向模拟\t347 14.5.4 精化的另一充分条件:反向模拟\t352 14.5.5 迹的精化\t352 14.6 打破抽象和具体事件之间的一对一关系\t353 14.6.1 分裂抽象事件\t353 14.6.2 合并几个抽象事件\t353 14.6.3 引进新事件\t354 第 15章 顺序程序的开发\t357 15.1 开发顺序程序的一种系统化方法\t357 15.1.1 顺序程序的组成部分\t357 15.1.2 把顺序程序分解为独立的事件\t358 15.1.3 方法梗概\t359 15.1.4 顺序程序的规范:前条件和后条件\t359 15.2 一个非常简单的例子\t360 15.2.1 规范\t360 15.2.2 精化\t361 15.2.3 推广\t362 15.3 合并规则\t362 15.4 例:排序数组里的二分检索\t363 15.4.1 初始模型\t363 15.4.2 第 一次精化\t364 15.4.3 第二次精化\t365 15.4.4 合并\t366 15.5 例:自然数数组中的最小值\t366 15.5.1 初始模型\t366 15.5.2 第 一次精化\t367 15.6 例:数组划分\t367 15.6.1 初始模型\t367 15.6.2 第 一次精化\t368 15.6.3 合并\t370 15.7 例:简单排序\t370 15.7.1 初始模型\t370 15.7.2 第 一次精化\t371 15.7.3 第二次精化\t371 15.7.4 合并\t373 15.8 例:数组反转\t373 15.8.1 初始模型\t373 15.8.2 第 一次精化\t374 15.9 例:链接表反转\t375 15.9.1 初始模型\t375 15.9.2 第 一次精化\t376 15.9.3 第二次精化\t377 15.9.4 第三次精化\t378 15.9.5 合并\t378 15.10 例:计算平方根的简单数值程序\t378 15.10.1 初始模型\t379 15.10.2 第 一次精化\t379 15.10.3 第二次精化\t379 15.11 例:内射数值函数的逆\t380 15.11.1 初始模型\t380 15.11.2 第 一次精化\t381 15.11.3 第二次精化\t382 15.11.4 实例化\t383 15.11.5 第 一次实例化\t383 15.11.6 第二次实例化\t384 第 16章 位置访问控制器\t385 16.1 需求文档\t385 16.2 讨论\t387 16.2.1 控制的共享\t387 16.2.2 闭模型的构造\t387 16.2.3 设备的行为\t388 16.2.4 处理安全问题\t388 16.2.5 同步问题\t388 16.2.6 边界的功能\t388 16.3 系统的初始模型\t389 16.4 第 一次精化\t390 16.4.1 状态和事件\t390 16.4.2 无死锁\t391 16.4.3 第 一个解\t392 16.4.4 第二个解\t393 16.4.5 无死锁的修正\t393 16.5 第二次精化\t394 16.5.1 状态和事件\t394 16.5.2 同步\t396 16.5.3 证明\t396 16.5.4 读卡器持续阻塞的危险\t396 16.5.5 避免持续阻塞的提议\t396 16.5.6 最后的决定\t397 16.6 第三次精化\t397 16.6.1 引进读卡器\t397 16.6.2 与通信网络有关的假设\t398 16.6.3 变量和不变式\t398 16.6.4 事件\t399 16.6.5 同步\t400 16.6.6 证明\t400 16.7 第四次精化\t400 16.7.1 与物理门有关的决策\t400 16.7.2 变量和不变式:绿色链\t401 16.7.3 变量和不变式:红色链\t401 16.7.4 事件\t402 16.7.5 同步\t404 第 17章 列车系统\t406 17.1 非形式的引言\t406 17.1.1 非形式描述的方法论约定\t407 17.1.2 行车调度员控制下的轨道网络\t407 17.1.3 网络的特殊组件:道岔和交叉点\t407 17.1.4 阻塞的概念\t409 17.1.5 通路的概念\t409 17.1.6 信号的概念\t411 17.1.7 通路和阻塞保持\t412 17.1.8 安全性条件\t414 17.1.9 运行条件\t415 17.1.10 列车的假设\t415 17.1.11 事故\t416 17.1.12 实例\t417 17.2 精化策略\t420 17.3 初始模型\t420 17.3.1 状态\t420 17.3.2 事件\t425 17.4 第 一次精化\t427 17.4.1 状态\t427 17.4.2 事件\t429 17.5 第二次精化\t431 17.5.1 状态\t432 17.5.2 事件\t432 17.6 第三次精化\t433 17.6.1 状态\t433 17.6.2 事件\t433 17.7 第四次精化\t434 17.8 总结\t436 17.9 参考资料\t437 第 18章 一些问题\t438 18.1 练习\t438 18.1.1 银行\t438 18.1.2 生日记录册\t438 18.1.3 有一行为0的数值矩阵\t439 18.1.4 有序矩阵检索\t439 18.1.5 名人问题\t439 18.1.6 在两个有交集的有穷数值集合里找公共元素\t440 18.1.7 简单的访问控制系统\t441 18.1.8 简单的图书馆\t441 18.1.9 简单的电路\t441 18.1.10 闹钟\t442 18.1.11 连续信号的分析\t442 18.2 项目\t443 18.2.1 旅馆的电子钥匙系统\t443 18.2.2 Earley分析器\t444 18.2.3 Schorr-Wait算法\t446 18.2.4 线性表封装\t447 18.2.5 队列的并发访问\t447 18.2.6 几乎线性的排序\t448 18.2.7 终止性检查\t449 18.2.8 分布式互斥\t449 18.2.9 电梯\t452 18.2.10 业务交易协议\t453 18.3 数学的开发\t454 18.3.1 良构集合和关系\t454 18.3.2 不动点\t456 18.3.3 递归\t457 18.3.4 传递闭包\t457 18.3.5 过滤器和超过滤器\t458 18.3.6 拓扑\t458 18.3.7 Cantor-Bernstein定理\t460 18.3.8 Zermelo定理\t460 18.4 参考资料\t462 |