热门问题
时间线
聊天
视角
邱奇数
来自维基百科,自由的百科全书
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