Skip to content

部分函数

Partial function

只在定义域某个子集上赋值、允许部分输入无输出的函数。

条目类型
定义

形式陈述

A,B 为集合。部分函数 f:AB 由定义域 dom(f)A 与一个普通函数 dom(f)B 构成;等价地,其图 GfA×B 满足每个 aA 至多对应一个 bB。当 dom(f)=A 时它就是全函数。若 f:ABg:BC,则 gf 只在那些 adom(f)f(a)dom(g) 的点上有定义。

直觉

部分函数把“输入没有对应输出”纳入定义本身,而不是额外发明一个普通值,适合描述尚未终止、前置条件不满足或搜索失败的程序,只接受部分输入的解析器,以及未必存在的代数运算。它与返回 null 的全函数不同:null 仍是陪域中的一个值,而部分函数在该点根本没有函数值。把定义域显式写成 DX,可以分离“计算结果是什么”和“哪些输入上有结果”两个问题。

例子与边界

实数上的 x1/x 可视为 RR,定义域为 R{0};数组查找也可建模为从键到元素的部分函数。把未定义统一编码为 可得到 AB{},但只有在 不与合法输出混淆并保留相应语义时才等价。

列表取首元素函数 head 只在非空列表上有值:head([a1,,an])=a1,但 head([]) 未定义。若把返回类型改为 option 并令空列表返回 None,就得到一个不同的全函数;这说明“未定义”与“返回失败值”是两种建模选择。

部分函数仍要求每个定义域内输入最多对应一个输出;一个输入可产生两个或更多合法结果的是关系或多值函数,不能仅靠“部分”二字表达。把未定义点随意补成默认值会改变等式、复合与可计算性问题,必须明确这种全化选择。

推论与应用

函数 的通常定义可视为定义域等于整个源集合的特例,部分函数则常与 关系 区分使用,并由此连接函数论、可计算性与程序语义。在可计算性中,部分可计算函数 用不终止或“发散”表示未定义,连接到可识别语言;偏代数用它表达只在满足前提时存在的运算,数据库与 API 规范也借它区分缺失、失败和正常值,而程序语义可用它刻画可能发散的程序含义。

参考资料
  • Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013,Chs. 0–10。
  • John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 1–9。
关系图谱10 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系

被这些条目使用