“操作语义把存储 $\sigma$ 纳入状态机的运行配置。设位置集合为 $\operatorname{Loc}$、值集合为 $\operatorname{Val}$,则存储是有限部分函数 $\…”
形式陈述 ​
设
直觉
部分函数把“输入没有对应输出”纳入定义本身,而不是额外发明一个普通值,适合描述尚未终止、前置条件不满足或搜索失败的程序,只接受部分输入的解析器,以及未必存在的代数运算。它与返回 null 的全函数不同:null 仍是陪域中的一个值,而部分函数在该点根本没有函数值。把定义域显式写成
例子与边界
实数上的
列表取首元素函数 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。