“固定偏可计算函数的可接受编号。对任意 $m,n\ge1$,存在总可计算函数”
形式陈述 ​
有限字母表上的全函数
称为可计算,若存在确定性图灵机
若函数只在某个有效编码的对象域
语言
是可计算全函数。这个对应要求成员与非成员两侧都停机;若只在
直觉
可计算函数把算法从“接受或拒绝一个语言”的二值形式推广到产生任意有限输出,是算法可实现性的模型无关核心。图灵机不必一次写出整个答案,可以通过有限步符号操作逐步构造结果;停机时输出带上的内容才是函数值。总性则像一份覆盖整个输入域的终止合同:每个输入都必须沿某条有限计算轨迹抵达答案,不能把发散当作隐藏的第三种返回值。
这一区分也解释了为什么“程序能算出我关心的那些例子”还不够。若输入域声明为全部
例子与边界
函数 1 的机器计算;二进制编码需处理进位,但对每个有限输入仍会结束。加法、最大公约数、字符串反转、语法树求值,以及把有限图编码映到其连通分量列表,都是可计算全函数。这些例子显示输入、输出表示同样重要:若所谓编码无法有效解码,字符串上的形式变换便不能自动代表对象上的算法。
可计算不意味着高效。Ackermann 函数在每个自然数输入上都有值且可由算法求出,却增长得极快;一个穷举算法也可能需要难以承受的时间。复杂性理论正是在总可计算的基础上再限制资源,而不是把“慢”重新归为“不可计算”。
存在定义明确却不可计算的全函数。例如令
边界还包括故意返回错误标记的程序。若机器对非法或失败输入返回 error 并停机,它计算的是到扩展输出域
推论与应用
可计算全函数为映射归约提供实例翻译器:若变换可能在某些源实例上发散,就不能保证归约算法完成。布尔输出的全函数对应语言判定;部分可计算函数的定义域则对应语言识别。这一总函数/部分函数分层让终止义务、语言分类和程序语义各自落在正确位置。
图灵机、递归函数与 λ 演算对有效计算给出等价刻画,并支撑Church–Turing 论题。在具体数学结构上谈“可计算”时,还需随结构一起给出有效表示;仅声明抽象对象之间存在一个集合论函数,无法产生可执行过程。
参考资料
- Hartley Rogers Jr., Theory of Recursive Functions and Effective Computability, MIT Press, 1987,Chs. 1–14。
- Robert I. Soare, Turing Computability: Theory and Applications, Springer, 2016,Chs. 1–5。