第1章 引论 1
1.1 软件工程 1
1.2 软件生存期 1
1.3 早期工作的重要性 2
1.4 规格说明及其形式化 3
1.5 一些重要的形式化规格说明语言 4
1.6 关于本书使用的Z语言 4
第2章 命题逻辑 6
2.1 命题 6
2.2 合取 7
2.3 析取 8
2.4 蕴含 9
2.5 等价 11
2.6 否定 13
2.7 永真式与矛盾式 15
第3章 谓词逻辑 17
3.1 谓词演算 17
3.2 量词与作用域 18
3.3 代换 19
3.4 全称量词的引入与消去 20
3.5 存在量词的引入与消去 21
第4章 相等与确定性的描述 23
4.1 相等性 23
4.2 一点规则 24
4.3 数量概念的表达与唯一量词 25
4.4 对象的确定性描述 26
第5章 集合 29
5.1 集合及其定义方法 29
5.1.1 集合的枚举定义法 29
5.1.2 集合理解定义—利用谓词定义集合 31
5.2 幂集 32
5.3 笛卡儿积 33
5.4 并集、交集和差集 33
5.5 类型 34
第6章 对象的定义 36
6.1 声明 36
6.2 省略法定义 37
6.3 公理定义 38
6.4 类属定义 39
第7章 关系 42
7.1 声明 42
7.2 定义域和值域 43
7.3 关系上的操作 43
7.3.1 限制与缩减 44
7.3.2 关系求逆 44
7.3.3 关系的复合 45
7.3.4 关系的闭包 46
7.3.5 关系的映象(image) 47
第8章 函数 49
8.1 偏函数和全函数 49
8.2 函数的λ表示法 50
8.3 内射、满射与双射 51
8.4 有限函数 52
8.5 函数性质小结 53
8.6 函数上的操作 54
第9章 序列 56
9.1 序列的有关概念 56
9.2 序列的形式化定义 58
9.3 序列上的操作 59
9.4 序列上的函数 61
9.5 结构归纳法 62
9.6 袋 65
第10章 递归定义的类型 67
10.1 从自然数的定义谈起 67
10.2 递归定义的类型 68
10.3 原始递归 71
第11章 构型(schema)与规格说明的结构化 74
11.1 构型的表示记号 74
11.2 一个应用例子的非形式描述 76
11.3 描述抽象状态的构型 76
11.4 描述操作的构型 78
11.5 作为声明使用的构型 79
11.6 作为谓词使用的构型 80
11.7 重命名 81
11.8 类属构型 82
11.9 构型演算 82
11.9.1 构型的包含 82
11.9.2 构型的修饰 83
11.9.3 构型的析取运算 84
11.9.4 构型的合取运算 86
11.9.5 构型的否定运算 87
11.9.6 构型的隐藏运算 88
11.9.7 构型的复合运算 89
11.9.8 构型的前置条件 92
11.10 规格说明的提升方法 95
11.10.1 几个操作分解的简单例子 95
第12章 一个规格说明的实例——文件系统 101
12.1 非形式的描述——程序设计接口 101
12.2 文件上的操作的形式描述 101
12.3 文件系统的形式化规格说明 104
12.4 形式化分析与推理 107
第13章 数据求精理论 110
13.1 什么是求精 110
13.2 关系的求精 112
13.3 关系求精的进一步讨论 113
13.4 相同状态上的操作的求精 114
13.5 数据类型与数据求精 115
13.6 模拟关系与数据求精 117
13.7 模拟条件的宽松与解开 119
第14章 操作求精 125
14.1 关系与操作构型 125
14.2 向前模拟 126
14.3 向后模拟 132
第15章 类型理论 138
15.1 预备知识 138
15.1.1 命题和集合 138
15.1.2 表达式理论 139
15.1.3 Martin-L?f类型理论 139
15.2 多型集合 140
15.2.1 基本规则 140
15.2.2 集合族的笛氏积和不交和 141
15.2.3 两个集合的笛氏积和不交和 144
15.2.4 各种集合 146
15.2.5 相等性集合 149
15.2.6 小集合之集合 151
15.2.7 良序 153
15.2.8 一般树 156
15.3 子集合 158
15.3.1 子集合一般理论 158
15.3.2 命题常元 161
15.4 单型集合 162
15.4.1 类型 162
15.4.2 类型对集合的定义 165
第16章 时序逻辑 167
16.1 XYZ系统简介 167
16.2 时序逻辑语言XYZ/E的基础部分 168
16.2.1 基本概念 168
16.2.2 状态转换与单元 172
16.2.3 三种不同形式的控制结构 178
16.2.4 Horn子句语言XYZ/PE0 183
16.2.5 指针 186
16.3 时序逻辑语言XYZ/E的基层模块 188
16.3.1 程序框架 188
16.3.2 过程与函数 191
16.3.3 包块 195
16.4 时序逻辑语言XYZ/E的并发成分 196
16.4.1 进程与并行语句 196
16.4.2 通信 198