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