热门问题
时间线
聊天
视角

邱奇数

来自维基百科,自由的百科全书

Remove ads

邱奇编码是把数据和运算符嵌入到lambda演算内的一种方式,最常见的形式即邱奇数,它使用lambda符号表示自然数。方法得名于阿隆佐·邱奇,他首先以这种方法把数据编码到lambda演算中。

透过邱奇编码,在其他符号系统中通常被认定为基本的项(比如整数、布尔值、有序对、列表和tagged unions)都会被映射到高阶函数。在无型别lambda演算,函数是唯一的原始型别

邱奇编码本身并非用来实践原始型别,而是透过它来展现我们不须额外原始型别即可表达计算。

很多学数学的学生熟悉可计算函数集合的哥德尔编号;邱奇编码是定义在lambda抽象而不是自然数上的等价运算。

用途

直接实现邱奇编码会将某些访问操作的时间复杂度从降低到(其中是数据结构的大小),这使得该编码方式在实际应用中受到限制。[1]研究表明可以通过针对性优化解决这个问题,但大多数函数式编程语言选择扩展其中间表示以包含代数数据类型[2] 尽管如此,邱奇编码仍常用于理论论证,因为它在部分求值定理证明中具有自然表示优势。[1]通过使用高阶类型可以对操作进行类型标注,[3]并能便捷地实现原始递归[1]由于函数被假定为唯一的原始数据类型,这种设定简化了许多证明过程。

邱奇编码具有表示完整性但仅限于表征层面。需要额外函数将这种表示转换为通用数据类型以供人工解读。由于邱奇定理等价性不可判定,通常无法判断两个函数是否具有外延等价性。转换过程可能需要通过某种方式应用函数来提取其表征值,或者以λ项字面量的形式查找其值。λ演算通常被解释为使用内涵等价性。由于等价性的内涵定义与外延定义存在差异,在结果解释方面可能存在潜在问题

Remove ads

邱奇数

邱奇数为使用邱奇编码的自然数表示法,而用以表示自然数高阶函数是个任意函数映射到它自身的n函数复合之函数,简言之,数的“值”即等价于参数被函数包裹的次数。

不论邱奇数为何,其都是接受两个参数的函数。邱奇数012、... 在λ演算中的定义如下:

0 不应用函数开始, 1 应用函数一次, 2 应用函数两次, 3 应用函数三次,依此类推

邱奇数3表示对任意给定函数应用三次的操作。当输入函数被提供时,首先应用于初始参数,然后连续应用于自身结果。最终结果并非数字3(除非初始参数恰好为0且函数为后继函数)。邱奇数3的本质是函数的应用次数,而非计算结果本身。其核心意义在于“重复三次”的动作,这正是“三次”概念的直观体现

就是说,自然数被表示为邱奇数n,它对于任何lambda-项FX有着性质:

n F X =β Fn X
Remove ads

使用邱奇数的计算

在 lambda 演算中,数值函数被表示为在邱奇数上的相应函数。这些函数在大多数函数式语言中可以通过 lambda 项的直接变换来实现(服从于类型约束)(请参阅将lambda表达式转换为函数)。

加法函数 利用了恒等式

后继函数 β-等价于(plus 1)。

乘法函数 利用了恒等式

指数函数 通过邱奇数定义给出:将定义中的代入可得,因此:

对应的lambda表达式为:

前驱函数 的实现较为复杂:

邱奇数通过n次应用函数来运作。前驱函数需要返回一个应用参数n-1次的函数。这通过构建包含fx的容器来实现,该容器以省略第一次函数应用的方式初始化(详见前驱函数推导)。

基于前驱函数可定义减法函数:

Remove ads
Loading content...
Loading content...
Loading content...
Loading content...
Loading content...

邱奇布尔值

谓词

邱奇序对

列表编码

参见

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads