可计算性和计算复杂度
第1章 引论
第2章 WHILE语言
第2.1节 WHILE数据和程序的句法
第2.1.1小节 二叉树作为数据值
定义2.1.1. 树的集合
定义如下:
- 原子是的一个元素;
- 每当和是的元素, 那么也是; 并且
- 是满足前述两点的最小集合.
定义2.1.2. 函数定义如下:其代表了一个数据值的大小(size).
第2.1.2小节 WHILE程序的句法
定义2.1.3. 令是不同的变量. 我们使用约定和. 那么, WHILE的句法由以下语法给出:这里的和是不需要相异的输入变量和输出变量.
我们使用缩进来指明和其他命令的作用域. 例如, 考虑以下两个命令:
while E do
C;
D
while E do
C;
D
第2.1.3小节 非形式化的语义
第2.1.4小节 真值和if-then-else
第2.1.5小节 列表
第2.1.6小节 数字
第2.1.7小节 句法糖: 一些有用的宏记号
第2.2节 WHILE程序的语义
第2.2.1小节 存储
第2.2.2小节 对于表达式的求值
第2.2.3小节 命令的执行
第2.2.4小节 WHILE程序的语义
第2.2.5小节 计算语义值
第2.3节 相等性与原子相等性的对比
第2.3.1小节 更多的句法糖
练习
引用
第3章 程序作为数据对象
第3.1节 编程语言和模拟
定义3.1.1. 一个
编程语言由以下资料构成:
- 两个集合, 和;
- 一个函数.
这里
是
的
语义函数, 其将每个
-程序
与一个相应的部分函数
联系起来.
如果
, 那么我们称
具有
程序作为数据(programs-as-data)的性质. 另外, 如果
, 那么我们称
具有
结对(pairing)性质.
定义3.1.2. 设. 语言可以模拟, 如果对于每个, 存在一个-程序使得对于每个, 我们有等价地: 可以模拟当且仅当存在一个完全函数满足对于每个-程序都有语言等价于语言, 记作, 如果语言和语言可以互相模拟.
这个定义表达了和可以计算相同函数的事实; 但是其并没有断言存在任何构造性的方式来获得一个等价于给定-程序的-程序. 本章的剩余部分关心的是模拟是如何计算性地完成的, 要么通过转换 (应用一个编译函数), 要么是通过解释. 然而, 首先我们需要一种方式来将程序视为数据对象.
第3.2节 在中表示程序
之前我们已经给过了和的句法. 假设我们想要将一个WHILE程序喂给另外一个WHILE程序作为输入. 目前这是不可行的, 仅仅是因为的元素并非中的对象. 因此, 我们现在需要对于WHILE程序给出一种程序作为数据表示.
定义3.2.1. 令代表的个相异元素. WHILE程序的表示
第4章 自解释: 和的通用程序
第5章 可计算理论的基本
第6章 元编程, 自应用, 和编译器生成
第7章 其他顺序计算模型
第8章 可计算概念的健壮性
第9章 函数式语言所施行的计算
第10章 一些自然的不可解问题
第11章 Hilbert第十问题
第12章 推理系统和Gödel不完备性定理
第13章 基于数字的可计算理论
第14章 更多可计算性的抽象方式