Skip to content

可计算函数

Computable function · Recursive function

有图灵机对每个合法输入都停机并输出其值的全函数。

条目类型
定义

形式陈述

有限字母表上的全函数

f:ΣΣ

称为可计算,若存在确定性图灵机 M,使每个输入 xΣ 上的计算都在有限步后停机,并输出 f(x)。这里既要求输出正确,也要求总会返回;只在一部分输入上给出结果、在其余输入上可能永不停止的过程,定义的是部分可计算函数,不是本页的对象。

若函数只在某个有效编码的对象域 D 上讨论,可把合法编码组成的集合视为输入域,并要求机器对每个合法编码停机;同时要说明非法编码怎样处理,或明确它们不在函数定义域内。自然数、元组与代数对象都需先采用有效编码,不同编码若能由总可计算变换互相转换,就给出同一对象层面的可计算性。多元函数也可通过可计算配对编码化为一元函数。

语言 L 可判定当且仅当其特征函数

χL(x)={1,xL,0,xL

是可计算全函数。这个对应要求成员与非成员两侧都停机;若只在 xL 时返回 1,则刻画的是可识别性和部分计算。

直觉

可计算函数把算法从“接受或拒绝一个语言”的二值形式推广到产生任意有限输出,是算法可实现性的模型无关核心。图灵机不必一次写出整个答案,可以通过有限步符号操作逐步构造结果;停机时输出带上的内容才是函数值。总性则像一份覆盖整个输入域的终止合同:每个输入都必须沿某条有限计算轨迹抵达答案,不能把发散当作隐藏的第三种返回值。

这一区分也解释了为什么“程序能算出我关心的那些例子”还不够。若输入域声明为全部 Σ,机器在某个罕见输入上无限循环,得到的仍只是部分函数。反过来,运行时间极长不损害可计算性,只要每个固定输入最终停机;效率要由后续时间、空间复杂度另外衡量。

例子与边界

函数 f(n)=n+1 在一元编码下可由扫描输入末尾并再写一个 1 的机器计算;二进制编码需处理进位,但对每个有限输入仍会结束。加法、最大公约数、字符串反转、语法树求值,以及把有限图编码映到其连通分量列表,都是可计算全函数。这些例子显示输入、输出表示同样重要:若所谓编码无法有效解码,字符串上的形式变换便不能自动代表对象上的算法。

可计算不意味着高效。Ackermann 函数在每个自然数输入上都有值且可由算法求出,却增长得极快;一个穷举算法也可能需要难以承受的时间。复杂性理论正是在总可计算的基础上再限制资源,而不是把“慢”重新归为“不可计算”。

存在定义明确却不可计算的全函数。例如令 h(e,x)=1 当编号为 e 的机器在输入 x 上停机,否则为 0。每对 (e,x) 都有唯一的布尔值,但若 h 可计算,就得到停机问题判定器。这里“数学上处处有值”只说明它是全函数,不蕴含存在能在每个输入上把该值算出来的算法。

边界还包括故意返回错误标记的程序。若机器对非法或失败输入返回 error 并停机,它计算的是到扩展输出域 Σ{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。
关系图谱14 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。