热门问题
时间线
聊天
视角
邱奇数
来自维基百科,自由的百科全书
Remove ads
邱奇编码是把数据和运算符嵌入到lambda演算内的一种方式,最常见的形式即邱奇数,它使用lambda符号表示自然数。方法得名于阿隆佐·邱奇,他首先以这种方法把数据编码到lambda演算中。
透过邱奇编码,在其他符号系统中通常被认定为基本的项(比如整数、布尔值、有序对、列表和tagged unions)都会被映射到高阶函数。在无型别lambda演算,函数是唯一的原始型别。
邱奇编码本身并非用来实践原始型别,而是透过它来展现我们不须额外原始型别即可表达计算。
用途
直接实现邱奇编码会将某些访问操作的时间复杂度从降低到(其中是数据结构的大小),这使得该编码方式在实际应用中受到限制。[1]研究表明可以通过针对性优化解决这个问题,但大多数函数式编程语言选择扩展其中间表示以包含代数数据类型。[2] 尽管如此,邱奇编码仍常用于理论论证,因为它在部分求值和定理证明中具有自然表示优势。[1]通过使用高阶类型可以对操作进行类型标注,[3]并能便捷地实现原始递归。[1]由于函数被假定为唯一的原始数据类型,这种设定简化了许多证明过程。
邱奇编码具有表示完整性但仅限于表征层面。需要额外函数将这种表示转换为通用数据类型以供人工解读。由于邱奇定理中等价性不可判定,通常无法判断两个函数是否具有外延等价性。转换过程可能需要通过某种方式应用函数来提取其表征值,或者以λ项字面量的形式查找其值。λ演算通常被解释为使用内涵等价性。由于等价性的内涵定义与外延定义存在差异,在结果解释方面可能存在潜在问题。
Remove ads
邱奇数
邱奇数为使用邱奇编码的自然数表示法,而用以表示自然数的高阶函数是个任意函数映射到它自身的n重函数复合之函数,简言之,数的“值”即等价于参数被函数包裹的次数。
不论邱奇数为何,其都是接受两个参数的函数。邱奇数0、1、2、... 在λ演算中的定义如下:
从 0 不应用函数开始, 1 应用函数一次, 2 应用函数两次, 3 应用函数三次,依此类推:
邱奇数3表示对任意给定函数应用三次的操作。当输入函数被提供时,首先应用于初始参数,然后连续应用于自身结果。最终结果并非数字3(除非初始参数恰好为0且函数为后继函数)。邱奇数3的本质是函数的应用次数,而非计算结果本身。其核心意义在于“重复三次”的动作,这正是“三次”概念的直观体现。
就是说,自然数被表示为邱奇数n,它对于任何lambda-项F
和X
有着性质:
- n
F X
=βFn X
。
Remove ads
在 lambda 演算中,数值函数被表示为在邱奇数上的相应函数。这些函数在大多数函数式语言中可以通过 lambda 项的直接变换来实现(服从于类型约束)(请参阅将lambda表达式转换为函数)。
加法函数 利用了恒等式 。
后继函数 β-等价于(plus 1)。
乘法函数 利用了恒等式 。
指数函数 通过邱奇数定义给出:将定义中的和代入可得,因此:
对应的lambda表达式为:
前驱函数 的实现较为复杂:
邱奇数通过n次应用函数来运作。前驱函数需要返回一个应用参数n-1次的函数。这通过构建包含f和x的容器来实现,该容器以省略第一次函数应用的方式初始化(详见前驱函数推导)。
基于前驱函数可定义减法函数:
Remove ads
邱奇布尔值
谓词
邱奇序对
列表编码
参见
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads