fbpx
维基百科

SKI组合子演算

SKI组合子演算是一个计算系统,它是对无类型版本的Lambda演算的简约。这个系统声称在Lambda演算中所有运算都可以用三个组合子SKI来表达。

在这个系统中的所有函数可以只使用SKI的字母表和圆括号(分组符号)来表达。通常假定组合子是左结合的,从而在不影响执行次序的情况下精简表达式中的圆括号。

非形式定义

非正式的说,在这个系统中的组合子定义如下(x, y和z表示从函数S, K, I与规定值制作的表达式):

I接受一个参数并返回:

Ix → x

K接受两个参数,丢弃第二个,返回第一个:

Kxy → x

S是代换运算。它接受三个参数,把第一个参数应用于第三个,接着把它应用于把第二个应用于第三个的结果,返回最终的结果。更加清晰的:

Sxyz → xz(yz)

注意从这些定义可以证实SKI演算不是完全进行Lambda演算的计算的最小化系统,因为I可以用SK来表达。这可以通过比较下列表达式和上面的I的定义来证明:

SKKx → Kx(Kx) → x

事实上,只使用一个组合子定义一个完备的系统是可能的。一个例子是Chris Barker的组合子,定义如下:

ιx = xSK

形式定义

在系统中的项和推导可以被形式定义:

: 项的集合T用如下规则递归的定义。

  1. SKI是项。
  2. 如果τ1和τ2是项,则 (τ1τ2)是项。
  3. 不是由前两个规则得到的东西都不是项。

推导: 推导是用下列规则递归定义的项的有限序列(这里的所有希腊字母表示有效的项或带有完全平衡的圆括号的表达式):

  1. 如果Δ是结束于形如α(Iβ)ι的表达式的一个推导,则Δ尾随着项αβι是一个推导。
  2. 如果Δ是结束于形如α((Kβ)γ)ι的表达式的一个推导,则Δ尾随着项αβι是一个推导。
  3. 如果Δ是结束于形如α(((Sβ)γ)δ)ι的表达式的一个推导,则Δ尾随着项α((βδ)(γδ))ι是一个推导。

假定一个序列本来是一个有效的推导,则可以使用这些规则来扩展它。[1]Archive.is的存檔,存档日期2012-12-15

SKI表达式

自应用和递归

SII是接受一个参数并应用这个参数于自身的表达式:

SIIα → Iα(Iα) → αα

这个表达式的一个有趣的性质是它使表达式SII(SII)不可归约:

SII(SII) → I(SII)(I(SII)) → I(SII)(SII) → SII(SII)

这个表达式的另一个结果是它允许你写应用某个东西到其他某个东西的自应用的函数:

(S(Kα)(SII))β → Kαβ(SIIβ) → α(SIIβ) → α(ββ)

这个函数可以用来完成递归。如果 是应用 到其他某个东西的自应用的函数,则自应用  上递归的进行 。更加明确的,如果:

β = S(Kα,SII)则:
SIIβ → ββ → α(ββ) → α(α(ββ))→…

反转表达式

S(K(SI))K反转随后的两项:

S(K(SI))Kαβ →
K(SI)α(Kα)β →
SI(Kα)β →
Iβ(Kαβ) →
Iβα → βα

布尔逻辑

SKI组合子演算还可以用if-then-else结构的形式实现布尔逻辑。if-then-else结构由要么为T(真)要么为F(假)的一个布尔表达式和两个参数组成,使得:

Txy → x

Fxy → y

关键在这两个布尔表达式的定义之中。第一个表现如同我们的基本组合子之一:

T = K
Kxy → x

第二个也非常简单:

F = KI
KIxy → Iy → y

一旦定义了真和假,所有布尔逻辑都可以用if-then-else结构的形式来实现。

布尔运算NOT(它返回给定布尔值的对立值)表现如同带有假和真作为第二个和第三个值的if-then-else结构,所以可以实现为后缀运算:

NOT = (F)(T) =(KI,K)如果把它们放入if-then-else结构中,可以证实它有预期的结果:
(T)NOT=T(F)(T)=F
(F)NOT=F(F)(T)=T

布尔运算OR(如果围绕它的两个布尔值任何一个为真则它返回真)表现如同带有真作为第二个参数的if-then-else结构,所以可以实现为中缀运算:

OR = T = K

如果把它放入if-then-else结构中,可以证实它有预期的结果:

(T)OR(T)=T(T)(T)=T
(T)OR(F)=T(T)(F)=T
(F)OR(T)=F(T)(T)=T
(F)OR(F)=F(T)(F)=F

布尔运算AND(如果围绕它的两个布尔值两个都为真则它返回真)表现如同带有假作为第三个参数的if-then-else结构,所以它可以实现为后缀运算:

AND = F = KI

如果把它放入if-then-else结构中,可以证实它有预期的结果:

(T)(T)AND=T(T)(F)=T
(T)(F)AND=T(F)(F)=F
(F)(T)AND=F(T)(F)=F
(F)(F)AND=F(F)(F)=F

因为如此以SKI符号的方式定义了真,假,NOT(作为后缀运算符),OR(作为中缀运算符),AND(作为后缀运算符),这证明了SKI系统可以完全的表达布尔逻辑。

直覺邏輯

組合子KS對應於兩個周知的命題邏輯公理:

AK: A →(B → A)
AS:(A →(B → C))→((A → B) →(A → C))函數應用對應於肯定前件規則:

MP:從A和A → B推出B。

公理AKAS和規則MP對于直覺邏輯的蘊含片段是完備的。

参见

外部链接

  • S and K Combinators(页面存档备份,存于互联网档案馆
  • The SKI Combinator Calculus as a Universal SystemArchive.is的存檔,存档日期2012-12-15
  • Javascript SKI combinator interpreter(页面存档备份,存于互联网档案馆

ski组合子演算, 是一个计算系统, 它是对无类型版本的lambda演算的简约, 这个系统声称在lambda演算中所有运算都可以用三个组合子s, k和i来表达, 在这个系统中的所有函数可以只使用s, i的字母表和圆括号, 分组符号, 来表达, 通常假定组合子是左结合的, 从而在不影响执行次序的情况下精简表达式中的圆括号, 目录, 非形式定义, 形式定义, ski表达式, 自应用和递归, 反转表达式, 布尔逻辑, 直覺邏輯, 参见, 外部链接非形式定义, 编辑非正式的说, 在这个系统中的组合子定义如下, y和z表示从. SKI组合子演算是一个计算系统 它是对无类型版本的Lambda演算的简约 这个系统声称在Lambda演算中所有运算都可以用三个组合子S K和I来表达 在这个系统中的所有函数可以只使用S K I的字母表和圆括号 分组符号 来表达 通常假定组合子是左结合的 从而在不影响执行次序的情况下精简表达式中的圆括号 目录 1 非形式定义 2 形式定义 3 SKI表达式 3 1 自应用和递归 3 2 反转表达式 3 3 布尔逻辑 3 4 直覺邏輯 4 参见 5 外部链接非形式定义 编辑非正式的说 在这个系统中的组合子定义如下 x y和z表示从函数S K I与规定值制作的表达式 I接受一个参数并返回 Ix xK接受两个参数 丢弃第二个 返回第一个 Kxy xS是代换运算 它接受三个参数 把第一个参数应用于第三个 接着把它应用于把第二个应用于第三个的结果 返回最终的结果 更加清晰的 Sxyz xz yz 注意从这些定义可以证实SKI演算不是完全进行Lambda演算的计算的最小化系统 因为I可以用S和K来表达 这可以通过比较下列表达式和上面的I的定义来证明 SKKx Kx Kx x事实上 只使用一个组合子定义一个完备的系统是可能的 一个例子是Chris Barker的i displaystyle iota 组合子 定义如下 ix xSK形式定义 编辑在系统中的项和推导可以被形式定义 项 项的集合T用如下规则递归的定义 S K和I是项 如果t1和t2是项 则 t1t2 是项 不是由前两个规则得到的东西都不是项 推导 推导是用下列规则递归定义的项的有限序列 这里的所有希腊字母表示有效的项或带有完全平衡的圆括号的表达式 如果D是结束于形如a Ib i的表达式的一个推导 则D尾随着项abi是一个推导 如果D是结束于形如a Kb g i的表达式的一个推导 则D尾随着项abi是一个推导 如果D是结束于形如a Sb g d i的表达式的一个推导 则D尾随着项a bd gd i是一个推导 假定一个序列本来是一个有效的推导 则可以使用这些规则来扩展它 1 Archive is的存檔 存档日期2012 12 15SKI表达式 编辑自应用和递归 编辑 SII是接受一个参数并应用这个参数于自身的表达式 SIIa Ia Ia aa这个表达式的一个有趣的性质是它使表达式SII SII 不可归约 SII SII I SII I SII I SII SII SII SII 这个表达式的另一个结果是它允许你写应用某个东西到其他某个东西的自应用的函数 S Ka SII b Kab SIIb a SIIb a bb 这个函数可以用来完成递归 如果b displaystyle beta 是应用a displaystyle alpha 到其他某个东西的自应用的函数 则自应用b displaystyle beta 在b b displaystyle beta beta 上递归的进行a displaystyle alpha 更加明确的 如果 b S Ka SII 则 SIIb bb a bb a a bb 反转表达式 编辑 S K SI K反转随后的两项 S K SI Kab K SI a Ka b SI Ka b Ib Kab Iba ba布尔逻辑 编辑 SKI组合子演算还可以用if then else结构的形式实现布尔逻辑 if then else结构由要么为T 真 要么为F 假 的一个布尔表达式和两个参数组成 使得 Txy x和 Fxy y关键在这两个布尔表达式的定义之中 第一个表现如同我们的基本组合子之一 T K Kxy x第二个也非常简单 F KI KIxy Iy y一旦定义了真和假 所有布尔逻辑都可以用if then else结构的形式来实现 布尔运算NOT 它返回给定布尔值的对立值 表现如同带有假和真作为第二个和第三个值的if then else结构 所以可以实现为后缀运算 NOT F T KI K 如果把它们放入if then else结构中 可以证实它有预期的结果 T NOT T F T F F NOT F F T T布尔运算OR 如果围绕它的两个布尔值任何一个为真则它返回真 表现如同带有真作为第二个参数的if then else结构 所以可以实现为中缀运算 OR T K如果把它放入if then else结构中 可以证实它有预期的结果 T OR T T T T T T OR F T T F T F OR T F T T T F OR F F T F F布尔运算AND 如果围绕它的两个布尔值两个都为真则它返回真 表现如同带有假作为第三个参数的if then else结构 所以它可以实现为后缀运算 AND F KI如果把它放入if then else结构中 可以证实它有预期的结果 T T AND T T F T T F AND T F F F F T AND F T F F F F AND F F F F因为如此以SKI符号的方式定义了真 假 NOT 作为后缀运算符 OR 作为中缀运算符 AND 作为后缀运算符 这证明了SKI系统可以完全的表达布尔逻辑 直覺邏輯 编辑 組合子K和S對應於兩個周知的命題邏輯公理 AK A B A AS A B C A B A C 函數應用對應於肯定前件規則 MP 從A和A B推出B 公理AK和AS和規則MP對于直覺邏輯的蘊含片段是完備的 参见 编辑函数式编程 组合子逻辑 B C K W系统 邱奇數外部链接 编辑S and K Combinators 页面存档备份 存于互联网档案馆 The SKI Combinator Calculus as a Universal SystemArchive is的存檔 存档日期2012 12 15 Javascript SKI combinator interpreter 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title SKI组合子演算 amp oldid 64193287, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。