组合者和计算的故事GydF4y2Ba

事情的抽象表示GydF4y2Ba

一些脚注可能会说,“原则上你可以使用组合符。”但这句话的意思往往是“但你可能不想这么做。”是的,组合符非常抽象,在很多方面都很难理解。但是追溯它们被发明以来的几百年的历史,我已经意识到它们实际上对我们现代计算概念的发展是多么重要——事实上,我自己也对它做出了贡献。GydF4y2Ba

用正式的、象征性的方式来表现事物的想法由来已久GydF4y2Ba亚里士多德的逻辑GydF4y2Ba和GydF4y2Ba欧几里得几何GydF4y2Ba.到了15世纪,有了代数GydF4y2Ba1840年代布尔代数GydF4y2Ba.这些都是一个正式的系统,允许人们纯粹在系统内进行扣除。但从某种意义上说,每一种都最终将自己视为特定事物的模型。逻辑是用来建模论证的结构,欧几里得的几何学是空间的性质,代数是数字的性质;布尔代数渴望建立“思维法则”的模型。GydF4y2Ba

但是,是否有一些更为普遍和基本的基础设施:某种抽象系统,最终可以建模或表示任何东西?今天我们明白了这就是计算。现在越来越清楚的是,现代计算概念是所有知识史上最强大的思想之一,其影响才刚刚开始显现。GydF4y2Ba

但我们最后是怎么做到的呢?combinator扮演着重要的角色,将它们编织进绵延一个多世纪的复杂思想织锦中。GydF4y2Ba

故事的主要部分开始于19世纪。在18世纪和18世纪的过程中,数学发展了一个越来越复杂的过程GydF4y2Ba更精细的形式结构GydF4y2Ba这一点似乎越来越重要。但数学到底是什么?它是一种描述世界的正式方式,还是一种不涉及世界而可能存在的东西?GydF4y2Ba

非欧几里德几何学、群论和超限数等学科的发展,似乎只要从头开始假设抽象公理,然后经过一个演绎过程,就可以完成有意义的数学。但是,所有的数学事实上都只是一个演绎的故事,甚至可能最终可以从看似较低层次的逻辑推导出来吗?GydF4y2Ba

但如果是这样,数字和算术会是什么呢?不知何故,它们必须“由纯逻辑构建”。今天,我们将这些努力视为基于某些“逻辑指令”的“机器代码”中数字和算术的“编写程序”。但在当时,所有关于它的东西和想法都必须被发明出来。GydF4y2Ba

什么是数学和逻辑制造的?GydF4y2Ba

在真正深入研究“从逻辑中构建数学”的概念之前,必须有“写数学”和“写逻辑”的方法。起初,一切都只是文字和普通的语言。但到17世纪末GydF4y2Ba数学符号GydF4y2Ba像+,=,>这样的新概念已经建立了一段时间GydF4y2Ba布尔代数GydF4y2Ba-倾向于仅仅利用现有的符号。然而,到了19世纪末,人们显然需要扩展和概括数学的写作方式。GydF4y2Ba

除了代数变量,比如GydF4y2BaXGydF4y2Ba在美国,有符号函数的概念GydF4y2BaFGydF4y2Ba,如GydF4y2BaFGydF4y2Ba(GydF4y2BaXGydF4y2Ba).在逻辑中,字母的概念由来已久(GydF4y2BaP.GydF4y2Ba那GydF4y2Ba问:GydF4y2Ba,…)代表主张(“现在下雨了”)。但现在需要有量词的符号(“全部”)GydF4y2BaXGydF4y2Ba“某某”或“存在”GydF4y2BaXGydF4y2Ba以致……)。此外,与数学中的符号函数类似,还有符号逻辑谓词:而不仅仅是像这样的显式语句GydF4y2BaXGydF4y2Ba>GydF4y2BayGydF4y2Ba还有一些人GydF4y2BaP.GydF4y2Ba(GydF4y2BaXGydF4y2Ba那GydF4y2BayGydF4y2Ba)GydF4y2Ba象征性的GydF4y2BaP.GydF4y2Ba.GydF4y2Ba

建立必要的符号和提出从逻辑构造算术的实际方案的第一次全面努力是GydF4y2Ba弗雷格GydF4y2Ba1879年GydF4y2Ba概念文字GydF4y2Ba(“概念脚本”):GydF4y2Ba

弗雷格的begriffsschrift点击放大GydF4y2Ba弗雷格的begriffsschrift点击放大GydF4y2Ba

而且,是的,它不容易阅读,也不容易排版,一开始它没有给人留下太多的印象,但随着时间的推移,它的符号变得更加简洁GydF4y2BaGiuseppe Peano.GydF4y2Ba的GydF4y2Ba公式GydF4y2Ba19世纪90年代的一个项目,它不是从逻辑开始,而是从一组特定的公理开始GydF4y2BaPeano公理GydF4y2Ba”):GydF4y2Ba

GPeano的Formulario项目点击放大GydF4y2Ba皮亚诺的公式项目-点击放大GydF4y2Ba

然后在1910年GydF4y2BaAlfred WhiteheadGydF4y2Ba和GydF4y2Ba伯特兰·罗素GydF4y2Ba开始出版他们的2000页GydF4y2Ba数学原理GydF4y2Ba——这几乎是由于它的重量和雄心(尽管我今天会认为语言设计存在着荒唐的错误),它推广了从“逻辑的简单性”建立“数学的复杂性”的可能性:GydF4y2Ba

怀特黑德和罗素的数学原理点击放大GydF4y2Ba

试图表现数学的内容是一回事,但表现数学的基础设施和过程也是一个问题。假设有人选择了一些公理。怎么知道它们是否一致呢?要证明所有能证明的东西都涉及到什么呢?GydF4y2Ba

在1890年代GydF4y2Ba大卫希尔伯特GydF4y2Ba开始发展这方面的想法,特别是在欧几里得几何及其公理的形式主义收紧的背景下GydF4y2Ba数学原理GydF4y2Ba,希尔伯特更加认真地使用基于逻辑的思想来发展“元数学”——特别是导致了诸如“决策问题”之类的东西的形成(GydF4y2BaentscheidungsproblusGydF4y2Ba)的问题,给定一个公理系统,是否有一个明确的程序来证明或反驳与它有关的任何陈述。GydF4y2Ba

但是,虽然逻辑和数学之间的联系对人们对数学哲学的人们感兴趣,但更明显的数学发展是GydF4y2Ba普适代数GydF4y2Ba-其中,数学不同领域的公理仅通过给出适当的代数式关系来指定。(碰巧的是,1898年的书以这个名称推出了宇宙代数。)GydF4y2Ba《泛代数论》GydF4y2Ba阿尔弗雷德·怀特黑德,后来GydF4y2Ba数学原理GydF4y2Ba名气。)GydF4y2Ba

但有一个领域是代数和逻辑思想交叉的:加强布尔代数,特别是为它找到更简单的基础。逻辑几乎总是以逻辑的形式表述的GydF4y2Ba及GydF4y2Ba那GydF4y2Ba或GydF4y2Ba和GydF4y2Ba不GydF4y2Ba.但是在1912年GydF4y2Ba亨利·谢弗GydF4y2Ba- 简化GydF4y2Ba数学原理GydF4y2Ba则,GydF4y2Ba与非门GydF4y2Ba(或GydF4y2Ba也不GydF4y2Ba)GydF4y2Ba足够了GydF4y2Ba(结果是GydF4y2Ba查尔斯·皮尔斯GydF4y2Ba在19世纪80年代就已经注意到了同样的事情。)GydF4y2Ba

因此,这就确立了逻辑的符号基本上可以像人们想象的那样简单。但它的实际结构和公理呢?谢弗谈到需要五条“代数式”公理。但是通过基于逻辑推理的公理GydF4y2Ba让·尼科德在1917年设法把它归结为一条公理GydF4y2Ba.(碰巧的是,我终于GydF4y2Ba2000年完成了这项工作GydF4y2Ba通过为逻辑找到最简单的“代数式”公理GydF4y2Ba单一公理:GydF4y2Ba((GydF4y2BaP.GydF4y2Ba·GydF4y2Ba问:GydF4y2Ba)·GydF4y2BaR.GydF4y2Ba)·(GydF4y2BaP.GydF4y2Ba·((GydF4y2BaP.GydF4y2Ba·GydF4y2BaR.GydF4y2Ba)·GydF4y2BaP.GydF4y2Ba))GydF4y2BaGydF4y2BaR.GydF4y2Ba.)GydF4y2Ba

在某种意义上,最大的问题是“数学最终是由什么组成的?”现在我们知道,普通的命题逻辑可以由非常简单的元素构成。那么数学中使用的其他东西呢,比如函数和谓词?有没有一种简单的方法来建立这些呢?GydF4y2Ba

弗雷格、怀特黑德和罗素等人都曾关注过构造特定的东西——比如集合或数字——这些东西有直接的数学意义。但希尔伯特在20世纪10年代后期的工作开始强调,转而关注元数学和“数学机制”——实际上是研究数学的纯符号基础结构如何结合在一起(通过证明等),而不受任何直接的“外部”数学意义的影响。GydF4y2Ba

差不多GydF4y2Ba亚里士多德和后来的逻辑学家GydF4y2Ba用命题逻辑为论证定义了一个独立于其主题的“符号结构”,希尔伯特的程序也设想了一个独立于特定数学主题的数学“符号结构”。GydF4y2Ba

这就是最终为组合器的发明奠定基础的原因。GydF4y2Ba

组合器到达GydF4y2Ba

我们不知道花了多长时间GydF4y2Ba摩西·舍芬克尔GydF4y2Ba想出组合词。从我们GydF4y2Ba知道他的个人历史吗GydF4y2Ba,它可能已经多年了十年。但它也可能一直短短几周。GydF4y2Ba

定义组合子不涉及高等数学或高等逻辑,但钻研数学逻辑的技术细节层次,认识到甚至可以想象一切都可以用它们来定义,这是一种抽象还原论的最高成就。GydF4y2Ba

有GydF4y2Ba有很多我们不知道的GydF4y2Ba关于Schönfinkel的个人信息。但他在1920年12月7日的演讲基础上写了一篇11页的论文,介绍了组合符,非常清楚。GydF4y2Ba

这篇论文的标题是“关于数学逻辑的构建块”(德语原文是“O220ber die Bausteine der mathematischen Logik”),换句话说,它的目标是讨论可以从中构建数学逻辑的“原子”。Schönfinkel解释说,根据希尔伯特公理化方法的精神,从尽可能少的概念构建一切;然后他说,他想做的是“找出那些概念,从中我们将能够最好地构建有关科学分支的所有其他概念”。GydF4y2Ba

他的第一步是解释希尔伯特,白头,罗素和弗赖尔特全部在标准方面建立数学逻辑GydF4y2Ba及GydF4y2Ba那GydF4y2Ba或GydF4y2Ba那GydF4y2Ba不GydF4y2Ba但是谢弗最近能够证明,只有一个连接词(用一个笔划“|”)和我们现在所说的连接词GydF4y2Ba与非门GydF4y2Ba)是足够的:GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

但除了这些关系的“内容”,我认为Schönfinkel试图通过例子来传达其他东西:所有这些逻辑连接词最终都可以被认为是具有特定“论证功能”的“抽象符号结构”的例子。GydF4y2BaFGydF4y2Ba[GydF4y2BaXGydF4y2Ba那GydF4y2BayGydF4y2Ba]) 形式。GydF4y2Ba

接下来的几段将讨论量词“为了所有”(∀)和“存在”(∃)如何也可以简化为谢弗中风(即:谢弗中风)。GydF4y2Ba与非门GydF4y2Ba)但是,接着传来了振奋人心的呼声:“我们迄今为止所取得的成功……鼓励我们尝试进一步的进步。”然后,他准备好接受他解释的大想法,“乍一看,肯定显得非常大胆”。他建议“通过适当的简化,消除命题、函数和变量的剩余基本概念”。GydF4y2Ba

他解释说,这只适用于“任意的、逻辑上一般的命题”,或者,正如我们现在所说的,适用于没有指定具体含义的纯符号结构。换句话说,他的目标是创建一个通用框架,用于对任意符号表达式进行操作,而不依赖于它们的解释。GydF4y2Ba

他解释说,无论是从“方法论角度”实现“最大可能的概念一致性”,还是从某种哲学或美学角度来看,这都是有价值的。GydF4y2Ba

从某种意义上说,他在1920年解释了什么 - 这是一个是核心部分的东西GydF4y2Ba计算语言设计GydF4y2Ba我在过去的40年里所做的一切都可以用一种象征性的表达方式来表达GydF4y2Ba巨大的价值GydF4y2Ba这种统一性。GydF4y2Ba

但作为一个“语言设计师”,Schönfinkel是一个极端的极简主义者。他想要尽可能多地摆脱概念——特别是他不想要变量,他解释说,变量“只是将某些参数位置和运算符描述为属于一起的符号”;“仅仅是辅助概念”。GydF4y2Ba

今天,我们有各种各样的数学符号,至少在某种程度上是“无变量”的(想想无坐标符号,范畴理论等),但在1920年,数学就像它被写的那样充满了变量。我们需要一个严肃的想法来看看如何摆脱它们。这就是Schönfinkel开始变得“更有象征意义”的原因。GydF4y2Ba

他解释说他要做一种“函数演算”(GydF4y2BaFunktionalkülGydF4y2Ba)他说,通常函数只是定义其参数域和值域之间的某种对应关系。但他说,他将对此进行推广,并允许(“无实体的”)函数以参数和函数值的形式出现。换句话说,他发明了我们现在称之为高阶函数的东西,函数可以“象征性地”作用于其他函数。GydF4y2Ba

在传统微积分和代数式数学的背景下,这是一个奇怪的想法。但实际上,这是一个关于计算和计算结构的想法,它比启发它的数学目标更抽象,最终更普遍。GydF4y2Ba

但回到Schönfinkel的论文。他的下一步是解释,一旦函数可以有其他函数作为参数,函数就只需要接受一个参数。在现代(GydF4y2Ba沃尔夫拉姆语GydF4y2Ba)符号,他说你永远不需要GydF4y2Baf[x,y]GydF4y2Ba;你可以随时做到这一切GydF4y2Baf[x][y]GydF4y2Ba.GydF4y2Ba

在某种程度上是耍花招,他设置了他的符号,以便GydF4y2BaFXYZ.GydF4y2Ba(看起来像一个有三个参数的函数GydF4y2Baf (x, y, z)GydF4y2Ba)实际上意味着(GydF4y2Ba外汇GydF4y2Ba)GydF4y2BayGydF4y2Ba)GydF4y2BaZ.GydF4y2Ba)(即。GydF4y2Baf [x] [y] [z]GydF4y2Ba).(换句话说 - 关于现代标准功能符号 - 他采取了一些令人困惑GydF4y2Ba要左关联的函数应用程序GydF4y2Ba.)GydF4y2Ba

再说一次,这是一个奇怪的想法,尽管实际上弗雷格多年前也有过类似的想法(现在这个想法通常被称为“咖喱”GydF4y2BaHaskell CurryGydF4y2Ba我们将在后面讨论他)。但是,有了他的“函数演算”设置,所有函数只需要一个参数,Schönfinkel已经准备好迎接他的重大结果了。GydF4y2Ba

他将有效地论证,通过组合一小组特殊函数,他可以构造任何可能的符号函数——或者至少是谓词逻辑所需的任何东西。他称它们为“具有非常普遍性质的特殊功能的序列”。最初有五个:恒等函数(GydF4y2BaIdentitätsfunktion.GydF4y2Ba)GydF4y2Ba一世GydF4y2Ba,则常数函数(GydF4y2Ba康斯坦斯芬奇酒店GydF4y2Ba)GydF4y2BaCGydF4y2Ba(我们现在称之为GydF4y2BaK.GydF4y2Ba),交换功能(GydF4y2BaVertauschungsfunktionGydF4y2Ba)GydF4y2BaT.GydF4y2Ba,组成函数(GydF4y2BaZusammensetzungsfunktionGydF4y2Ba)GydF4y2BaZ.GydF4y2Ba,以及融合函数(GydF4y2BaVerschmelzungsfunktionGydF4y2Ba)GydF4y2BaS.GydF4y2Ba.GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

然后他就跑去定义我们要做的GydF4y2Ba现在呼叫组合者GydF4y2Ba这些定义看起来简单而直接。但为了有效地理解它们,Schönfinkel必须去除逻辑和数学历史发展带来的各种概念包袱。GydF4y2Ba

甚至谈论身份组合者也不完全简单。Schönfinkel仔细解释了GydF4y2BaI x = xGydF4y2Ba,相等是直接的符号或结构相等,或者如他所说,“等号不应被视为表示逻辑等价,因为它通常在逻辑命题演算中定义,但表示左侧和右侧的表达式表示相同的东西,即函数值GydF4y2BalxGydF4y2Ba总是与参数值相同吗GydF4y2BaXGydF4y2Ba,无论我们可以替代GydF4y2BaXGydF4y2Ba“然后他在括号里加了一句,”例如,GydF4y2Ba我GydF4y2Ba会等于GydF4y2Ba一世GydF4y2Ba”. 是的,对于一些习惯于数学概念的人来说,函数接受数字这样的值,然后返回数字,这有点令人兴奋。GydF4y2Ba

接下来,他解释了他所称的恒常性组合符GydF4y2BaCGydF4y2Ba(尽管它的德语开头是GydF4y2BaK.GydF4y2Ba),我们现在称之为GydF4y2BaK.GydF4y2Ba.他说,让我们假设参数值是任意的,没有限制,不管这个值是多少,函数值总是固定的值GydF4y2Ba一种GydF4y2Ba”. 当他说“武断”时,他真的是这么想的:这不仅仅是一个数字或什么的;这就是我们现在认为的任何象征性表达。GydF4y2Ba

首先,他写作(GydF4y2BaC A.GydF4y2Ba)GydF4y2BayGydF4y2Ba=GydF4y2Ba一种GydF4y2Ba,即“恒定性函数”的值GydF4y2BaC A.GydF4y2Ba操作在任何GydF4y2BayGydF4y2Ba是GydF4y2Ba一种GydF4y2Ba“,然后他说”让GydF4y2Ba一种GydF4y2Ba也要可变”,并定义(GydF4y2BaC xGydF4y2Ba)GydF4y2BayGydF4y2Ba=GydF4y2BaXGydF4y2Ba或GydF4y2BaCxyGydF4y2Ba=GydF4y2BaXGydF4y2Ba.很有帮助的是,他补充道:“在实际应用中GydF4y2BaCGydF4y2Ba用于允许引入数量GydF4y2BaXGydF4y2Ba作为“盲”变量。”GydF4y2Ba

那他就要走了GydF4y2BaT.GydF4y2Ba.在现代表示法中,这个定义是GydF4y2BaT.GydF4y2Ba[GydF4y2BaFGydF4y2Ba][GydF4y2BaXGydF4y2Ba][GydF4y2BayGydF4y2Ba] =GydF4y2BaFGydF4y2Ba[GydF4y2BayGydF4y2Ba][GydF4y2BaXGydF4y2Ba](即。GydF4y2BaT.GydF4y2Ba本质上是GydF4y2BareverseApplied.GydF4y2Ba).(他将定义写成(GydF4y2BaT.GydF4y2BaϕGydF4y2Ba)GydF4y2BaxyGydF4y2Ba=GydF4y2BaϕGydF4y2BayxGydF4y2Ba,说明括号可以省略。)他证明……的想法是正确的GydF4y2BaT.GydF4y2Ba通过说“函数GydF4y2BaT.GydF4y2Ba使改变表达中术语的顺序成为可能,这样它在一定程度上弥补了交换律的缺失"GydF4y2Ba

接下来是合成组合子GydF4y2BaZ.GydF4y2Ba.他解释说:“众所周知,在(数学)分析中,我们笼统地说‘函数中的函数’……,他的意思是当时(和现在)写这样的东西很常见GydF4y2BaFGydF4y2Ba(GydF4y2BaGGydF4y2Ba(GydF4y2BaXGydF4y2Ba))。但后来他“变得象征性”,并定义了一个组合函数,它可以象征性地作用于任意两个函数GydF4y2BaFGydF4y2Ba和GydF4y2BaGGydF4y2Ba:GydF4y2BaZ.GydF4y2Ba[GydF4y2BaFGydF4y2Ba][GydF4y2BaGGydF4y2Ba][GydF4y2BaXGydF4y2Ba] =GydF4y2BaFGydF4y2Ba[GydF4y2BaGGydF4y2Ba[GydF4y2BaXGydF4y2Ba]]。他解释说,GydF4y2BaZ.GydF4y2Ba允许一个表达式中的“移位括号”:即表达式中的对象可能是什么,GydF4y2BaZ.GydF4y2Ba允许将[][][]转换为[[]]等。但如果这看起来太抽象和象征性,他试图用一种更“代数”的方式来解释GydF4y2BaZ.GydF4y2Ba“有点像结合律”(不过,他补充说,实际的结合律并不满足)。GydF4y2Ba

终于来了GydF4y2Ba之作GydF4y2Ba:GydF4y2BaS.GydF4y2Ba组合器(Schönfinkel称之为“融合函数”):GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

他不需要太长时间来定义它。他基本上说:考虑一下。GydF4y2Ba外汇GydF4y2Ba)(GydF4y2BagxGydF4y2Ba)(即。GydF4y2Bag f [x] [[x]]GydF4y2Ba).这实际上只是一个函数GydF4y2BaXGydF4y2Ba”。但是什么函数?它不是由GydF4y2BaFGydF4y2Ba和GydF4y2BaGGydF4y2Ba;他称之为"聚变"他定义了GydF4y2BaS.GydF4y2Bacombinator来创建它:GydF4y2BaS.GydF4y2Ba[GydF4y2BaFGydF4y2Ba][GydF4y2BaGGydF4y2Ba][GydF4y2BaXGydF4y2Ba] =GydF4y2BaFGydF4y2Ba[GydF4y2BaXGydF4y2Ba][GydF4y2BaGGydF4y2Ba[GydF4y2BaXGydF4y2Ba]]。GydF4y2Ba

很明显Schönfinkel知道这种“象征性的体操”很难让人理解。他继续说:“通过一个实际的例子使这个函数更容易理解是明智的。”他说GydF4y2BafxyGydF4y2Ba(即。GydF4y2Baf[x][y]GydF4y2Ba日志GydF4y2BaXGydF4y2BayGydF4y2Ba(即。GydF4y2Ba日志GydF4y2Ba[x,y]GydF4y2Ba),GydF4y2Ba广州GydF4y2Ba(即。GydF4y2Bag[z]GydF4y2Ba)为1 +GydF4y2BaZ.GydF4y2Ba.然后GydF4y2BaSfgxGydF4y2Ba= (GydF4y2Ba外汇GydF4y2Ba)(GydF4y2BagxGydF4y2Ba)=原木GydF4y2BaXGydF4y2Ba(1 +GydF4y2BaXGydF4y2Ba)(即。GydF4y2BaS[f][g][x]=f[x][g[x]]=GydF4y2Ba日志GydF4y2Ba[x, 1 + x]GydF4y2Ba).好吧,为什么要这样做并不明显,我也不急着讲GydF4y2BaS.GydF4y2Ba一种GydF4y2BaWolfram语言中的内置函数GydF4y2Ba.GydF4y2Ba

但Schönfinkel解释说,为他“的实际使用”GydF4y2BaS.GydF4y2Ba这将使我们能够减少一个变量的出现次数,并在一定程度上减少一个特定函数的出现次数,从几个变为一个”。GydF4y2Ba

根据五个基本对象设置所有内容GydF4y2Ba一世GydF4y2Ba那GydF4y2BaCGydF4y2Ba(现在GydF4y2BaK.GydF4y2Ba),GydF4y2BaT.GydF4y2Ba那GydF4y2BaZ.GydF4y2Ba和GydF4y2BaS.GydF4y2Ba可能已经足够令人印象深刻和极简主义了。但Schönfinkel意识到他可以走得更远:GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba
Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

首先,他是这么说的GydF4y2Ba一世GydF4y2Ba=GydF4y2Ba鳞状细胞癌GydF4y2Ba(或者,在现代符号中,GydF4y2Bas [k] [k]GydF4y2Ba).换句话说,GydF4y2Bas[k][k][x]GydF4y2Ba象征性的GydF4y2BaXGydF4y2Ba等于GydF4y2BaXGydF4y2Ba(自GydF4y2Bas[k][k][x]GydF4y2Ba就变成了GydF4y2Bak [x] [k [x]]GydF4y2Ba通过使用定义GydF4y2BaS.GydF4y2Ba,这变成了GydF4y2BaXGydF4y2Ba通过使用定义GydF4y2BaCGydF4y2Ba).他指出,这个特别的裁减是由一个GydF4y2Ba阿尔弗雷德·博斯科维茨GydF4y2Ba(我们知道他当时是个学生);他说GydF4y2Ba之后赴苏黎世与贝奈斯GydF4y2Ba(他更像是一位同事)在“之前的某段时间”注意到GydF4y2Ba一世GydF4y2Ba= (GydF4y2BaSCGydF4y2Ba)(GydF4y2BaCC.GydF4y2Ba)(即。GydF4y2Bas[k][k[k]]GydF4y2Ba)今天,我们当然可以使用计算机来列举所有可能的特定大小的组合表达式,并找出最小的缩减量。但在Schönfinkel的时代,这更像是手工解决一个难题。GydF4y2Ba

Schönfinkel继续,并证明了这一点GydF4y2BaZ.GydF4y2Ba也可以减少:GydF4y2BaZ.GydF4y2Ba=GydF4y2BaS.GydF4y2Ba(GydF4y2BaCSGydF4y2Ba)GydF4y2BaCGydF4y2Ba(即。GydF4y2Bas[k[s]][k]GydF4y2Ba).是的,一个非常简单的Wolfram语言程序可以在几毫秒内验证这是最简单的形式。GydF4y2Ba

好的,那怎么办GydF4y2BaT.GydF4y2Ba?Schönfinkel给出了8个步骤来证明这一点GydF4y2BaT.GydF4y2Ba=GydF4y2BaS.GydF4y2Ba(GydF4y2BazzGydF4y2Ba)(GydF4y2BaCC.GydF4y2Ba)(即。GydF4y2Ba(年代[k [s]] [k] [s [k [s]] [k]] [s]] [k [k]]GydF4y2Ba).但是这是最简单的形式GydF4y2BaT.GydF4y2Ba是的,没有。但是(用我编写的非常简单的2行Wolfram语言程序)我的现代计算机确实花了几分钟来确定最简单的形式是什么。GydF4y2Ba

答案是,它没有像Schönfinkel那样的12码,而是9码。实际上,有6个尺寸为9的案例都是可行的:GydF4y2Bas[s[k[s][s[k[k][s]][k[k]]GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaKSGydF4y2Ba)(GydF4y2BaS.GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba)GydF4y2BaS.GydF4y2Ba))(GydF4y2Ba乐GydF4y2Ba)和其他五个。是的,需要一些简化步骤来证明它们是有效的(其他尺寸为9的情况)GydF4y2BaS.GydF4y2Ba(GydF4y2BaSSKGydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba))))GydF4y2BaS.GydF4y2Ba那GydF4y2BaS.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaKSGydF4y2Ba)GydF4y2BaK.GydF4y2Ba))GydF4y2BaS.GydF4y2Ba)(GydF4y2Ba乐GydF4y2Ba),GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaKSGydF4y2Ba)GydF4y2BaK.GydF4y2Ba)(GydF4y2Ba乐GydF4y2Ba)))GydF4y2BaS.GydF4y2Ba那GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba))) (GydF4y2BaS.GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba)GydF4y2BaS.GydF4y2Ba),GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba)))GydF4y2BaK.GydF4y2Ba))GydF4y2BaS.GydF4y2Ba所有这些都有更复杂的减少):GydF4y2Ba

combinatore volutionplot.GydF4y2Ba
& # 10005GydF4y2Ba

CloudGet[”https://www.wolframcloud.com/obj/sw-blog/Combinators/\Programs.wl“];combinationevolutionplot[combinationfixedpointlist[s[s[k[s]][s[k[k]][s]][k[k]][g][g][x]],“StatesDisplay”]GydF4y2Ba

但是,好吧,Schönfinkel想要对他构建的这些对象做什么呢?正如他论文的标题所暗示的那样,他想用它们来构建数学逻辑。他开始说:“现在让我们把我们的结果应用到一个特殊的情况,即逻辑演算的情况,在这个情况下,基本元素是个体,函数是命题函数。”我认为这句话很有意义。Schönfinkel没有一种方式来表达它GydF4y2Ba通用计算概念GydF4y2Ba但他似乎已经意识到,他所做的是相当普遍的,甚至超越了能够代表一种特定的逻辑。GydF4y2Ba

尽管如此,他还是举了一个例子,他在文章的开头解释了我们现在称之为量词的词∀ 及∃ 两者都可以用一种“量化”的方式来表示吗GydF4y2Ba与非门GydF4y2Ba“他写道GydF4y2Ba:GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

但现在他想“组合化”一切,所以他引入了一个新的组合器GydF4y2Ba你GydF4y2Ba,并将其定义为表示他的“量化”GydF4y2Ba与非门GydF4y2Ba”:GydF4y2BaUfgGydF4y2Ba=GydF4y2Ba外汇GydF4y2BagxGydF4y2Ba(他称为GydF4y2Ba你GydF4y2Ba“不相容函数”很有趣GydF4y2Ba语言描述GydF4y2Ba的GydF4y2Ba与非门GydF4y2Ba):GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2BaSchönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

“这是一个显著的事实,”他说,“现在,逻辑的每一个公式都可以通过……仅仅通过GydF4y2BaCGydF4y2Ba那GydF4y2BaS.GydF4y2Ba和GydF4y2Ba你GydF4y2Ba所以他说,任何来自数理逻辑的表达式,都可以写成某种组合式表达式GydF4y2BaS.GydF4y2Ba那GydF4y2BaCGydF4y2Ba(现在GydF4y2BaK.GydF4y2Ba),GydF4y2Ba你GydF4y2Ba他说,如果有“for all”这样的量词GydF4y2BaXGydF4y2Ba...总有可能使用组合符来摆脱“绑定变量”。GydF4y2BaXGydF4y2Ba等等。他说他“不会在这里给出完整的演示”,而是以一个例子来满足自己。(不幸的是,由于他的生活轨迹仍然不清楚,他从未发表过他的“完整演示”。)GydF4y2Ba

但是,好吧,他取得了什么成就呢?他基本上证明了任何可能出现在谓词逻辑中的表达式(使用逻辑连接词、量词、变量等)都可以被简化为纯粹的组合子表达式GydF4y2BaS.GydF4y2Ba那GydF4y2BaCGydF4y2Ba(现在GydF4y2BaK.GydF4y2Ba),GydF4y2Ba你GydF4y2Ba.GydF4y2Ba

他需要这个吗GydF4y2Ba你GydF4y2Ba?不完全是。但是他必须有一些方法来用数学或逻辑的“意义”来表示事物,他的组合运算器将根据这些意义进行操作。今天最明显要做的事情就是对真与假进行表示。而且,更重要的是GydF4y2Ba用组合子来表示GydF4y2Ba.例如,如果我们GydF4y2BaK.GydF4y2Ba代表真实,以及GydF4y2BaSKGydF4y2Ba(GydF4y2Bas[k]GydF4y2Ba)来表示错误GydF4y2Ba及GydF4y2Ba可以表示为GydF4y2BaSSKGydF4y2Ba(GydF4y2Bas [s] [k]GydF4y2Ba),GydF4y2Ba或GydF4y2Ba作为GydF4y2BaS.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba)GydF4y2BaS.GydF4y2Ba(GydF4y2BaSKGydF4y2Ba)GydF4y2Ba(GydF4y2Bas[s[s][s][s[k]]GydF4y2Ba)GydF4y2Ba和GydF4y2Ba与非门GydF4y2Ba作为GydF4y2BaS.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2Ba乐GydF4y2Ba))))))GydF4y2BaS.GydF4y2Ba(GydF4y2Bas[s[k[s[s][k[k][k][k][k][s]GydF4y2Ba)GydF4y2Ba.Schönfinkel在将所有东西简化为他的“积木”方面取得了惊人的进展。但是,是的,他错过了最后一步。GydF4y2Ba

但是考虑到他已经设法把一切都减少到GydF4y2BaS.GydF4y2Ba那GydF4y2BaCGydF4y2Ba和GydF4y2Ba你GydF4y2Ba他想他应该试着走得更远。所以他认为GydF4y2Ba一个对象GydF4y2BajGydF4y2Ba那将是一个单一的组成部分GydF4y2BaS.GydF4y2Ba和GydF4y2BaCGydF4y2Ba:GydF4y2BaJJGydF4y2Ba=GydF4y2BaS.GydF4y2Ba和GydF4y2BajGydF4y2Ba(GydF4y2BaJJGydF4y2Ba) =GydF4y2BaCGydF4y2Ba.GydF4y2Ba

Schönfinkel的“Über Bausteine der mathematischgik”-点击放大GydF4y2Ba

与GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba你可以直接指向一个表达式的任何部分,看看它是否减少了GydF4y2BajGydF4y2Ba这有点复杂。用现代Wolfram语言来说,你可以GydF4y2Ba将规则表述为GydF4y2Ba{j [j] [x _] [y_] [z_]GydF4y2Ba→GydF4y2Bax [z] [y [z]],j [j [j]] [x _] [y_]GydF4y2Ba→GydF4y2Bax}GydF4y2Ba(订单问题)但要应用这些需要模式匹配“群集GydF4y2BajGydF4y2Ba而不是只看单身GydF4y2BaS.GydF4y2Ba'沙GydF4y2BaK.GydF4y2Ba一次。GydF4y2Ba

但尽管Schönfinkel观察到这一“最终减少”为GydF4y2BajGydF4y2Ba没有成功,把一切都归结到GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba已经很了不起了。在论文的开头,Schönfinkel描述了他的目标。然后他说:“在我看来,我们刚刚设定的目标也可以实现,这在极端意义上是值得注意的;事实上,这可以通过减少到三个基本标志来实现。”(论文确实提到了三个基本标志,大概算起来)GydF4y2Ba你GydF4y2Ba以及GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba.)GydF4y2Ba

我敢肯定,Schönfinkel希望复制所有丰富的数学逻辑,他需要一套非常复杂的积木。当然,像Frege、Whitehead和Russell这样的人使用了最终非常复杂的设置。Schönfinkel设法突破了所有的复杂性,以表明简单的积木是有用的但后来他发现了另外一件事:那实际上只是两个积木(GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba)够了。GydF4y2Ba

用现代的术语来说,我们可以说Schönfinkel成功地构建了一个具有通用计算能力的系统。这本身就很神奇。但更令人惊讶的是,他发现他可以用这么简单的设置做到这一点。GydF4y2Ba

我确信Schönfinkel非常惊讶。在这里,我个人觉得与他有某种共同之处。因为在我自己对计算宇宙的探索中,我反复发现,只有非常简单的系统才能具备高度复杂的行为和通用计算能力。甚至在爆炸之后四十年来,我一直对这些系统的简单程度感到惊讶。GydF4y2Ba

对我来说,这已经变成了一般的原则 - 这GydF4y2Ba计算等价原则GydF4y2Ba-还有一个完整的概念框架。Schönfinkel没有这样的想法。但从某种意义上说,他是一个足够好的科学家,他仍然设法发现了他发现的东西,几十年后我们可以将其视为计算等价原则的另一个证据。GydF4y2Ba

一个世纪之后看Schönfinkel的论文,这不仅仅对于它发现的东西而言,也是如此清晰,简单地呈现出来。现在已经过了一点符号(当然当然,原文是用德语编写的,这不再是曾经是奖学金的领先语言)。但在大多数情况下,纸张似乎似乎是完全的现代化。除了当然,现在它可以在象征性表达和计算方面被Couched,而不是数学逻辑。GydF4y2Ba

他们的数学是什么?GydF4y2Ba

组合词很难理解,而且还不清楚有多少人在他们第一次被介绍时就理解了它们,更不用说理解它们的含义了。这不是一个好迹象,当GydF4y2BaSchonfinkel的论文GydF4y2Ba1924年出现在帮助为最终出版做准备的人身上(GydF4y2Ba海因里希BehmannGydF4y2Ba)在结尾加上了他自己的三段话,这三段话很混乱。和SchonfinkelGydF4y2Ba唯一其他发表的论文GydF4y2Ba-1927年与保罗·伯奈斯(Paul Bernays)合著的这本书甚至没有提到组合子,尽管它们可以非常有益地用于讨论手头的主题(数理逻辑中的决策问题)。GydF4y2Ba

但是在1927年,组合子(如果不是Schönfinkel对它们的认可的话)有了一笔可观的好运GydF4y2BaHaskell CurryGydF4y2Ba之后,他花了50多年的时间研究他称之为“组合符”的东西,并把它们传播出去。GydF4y2Ba

在某种程度上,我认为人们可以把库里和他的弟子们对组合符所做的主要工作看作是对它们进行“数学化”的努力。Schönfinkel以一种相当直接的“结构性”方式展示了组合符。但是他的行为的数学解释是什么,以及组合子一般是如何工作的?什么样的数学形式主义可以捕捉Schönfinkel替换的结构思想?例如,对组合子来说,等式的真正含义是什么?GydF4y2Ba

最后,组合子基本上是计算结构,充满了所有GydF4y2Ba“无约束计算”现象GydF4y2Ba-像GydF4y2Ba不可思议GydF4y2Ba和GydF4y2Ba计算不可约性GydF4y2Ba.它是不可避免的,数学是通常设想的数学只能在“破解”中。GydF4y2Ba

但是在20世纪20年代和30年代,人们还没有理解计算的概念和能力,人们认为数学的思想和工具将用于分析组合符这样的形式系统。这并不是说数学方法对组合符毫无用处。GydF4y2Ba

不像GydF4y2Ba蜂窝自动机GydF4y2Ba,甚至GydF4y2Ba图灵机GydF4y2Ba,有一个直接的原因GydF4y2Ba组合子的结构复杂性GydF4y2Ba,以及它们精巧的树状结构、等价性等。因此,在不需要面对全尺寸计算的原始特征(如计算不可约性)的情况下,解决这个问题需要多年的努力。GydF4y2Ba

最后,组合子充满了计算不可约性。但它们也有计算可约性的层次,其中一些层次与已经建立起来的数学和数学逻辑所要处理的事情相一致。这与我们最近的研究产生了奇怪的共鸣GydF4y2Ba物理项目GydF4y2Ba.GydF4y2Ba

在我们基于超图重写的模型中,也存在计算不可约性的基础。但与组合符一样,我们的模型在结构上有一定的复杂性。与此相关的还有计算可约性的层次。但我们的模型值得注意的是,其中一些层次——以及人们可以构建来理解它们的形式主义——有一个直接的解释:它们基本上是GydF4y2Ba18l18luck新利 ,即广义相对论和量子力学。GydF4y2Ba

组合子的工作方式完全不同,因此它们不会立即与这种解释保持一致。但在组合子中发现的一个重要特性(即GydF4y2Ba合流,与我们的因果不变性有关GydF4y2Ba)对我们的模型至关重要,它们与物理学的对应关系,以及最终我们感知宇宙规律的整体能力,即使面对计算的不可约性。GydF4y2Ba

不过,让我们回到Schönfinkel的论文之后,关于组合子的故事。Schönfinkel基本上是以一种新颖的,非常直接的,结构化的方式建立起来的。但库里想要与数学逻辑和一般数学的更传统的思想联系起来。和后GydF4y2Ba第一篇论文(发表于1929年)GydF4y2Ba这本书几乎记录了他最初的想法,以及他为理解Schönfinkel所做的努力。1930年,库里开始做一些事情,比如为组合子制定公理,并希望证明数学性质的一般定理,比如等式。GydF4y2Ba

如果不了解通用计算及其与通用计算的关系,我们还不清楚最终处理组合子会有多复杂。库里继续努力,发表了更多的论文,尝试用他的组合法则定义集合理论。但1934年,灾难来了。它不是关于计算或不确定性的东西;相反的是GydF4y2Ba斯蒂芬•克林GydF4y2Ba和GydF4y2Baj·巴克利伐木工人GydF4y2Ba展示了公理咖喱已经提出尝试,并“收紧Schönfinkel”只是简单的不一致。GydF4y2Ba

对于Kleene和Rosser来说,它提供了更多的证据证明需要Russell's(最初相当粗糙)类型的概念,并导致他们更复杂的公理系统,并远离组合。但库里并没有被吓倒。他修改了他的公理系统,并最终持续了几十年,以看看可以用数学方法证明什么是关于组合和类似的东西。GydF4y2Ba

但早在20世纪30年代初,围绕数理逻辑就有了更大的发展,很快就会与组合运算交叉。GydF4y2Ba

哥德尔定理与可计算性GydF4y2Ba

如何表示数学的基本结构?早在20世纪20年代,没有人认真考虑过使用组合符。取而代之的是三个“大品牌”:GydF4y2Ba数学原理GydF4y2Ba集合理论和希尔伯特程序。正在寻找关系,正在填补细节,正在寻找问题。但人们普遍认为,进展正在取得。GydF4y2Ba

相当于界限可能撒谎的地方并不清楚。例如,可以指定从较低级基元的“构造任何功能”的方法?递归的基本思想非常老(想:GydF4y2Ba斐波那契GydF4y2Ba).但在20世纪20年代早期,有一个相当正式的概念GydF4y2Ba原始递归GydF4y2Ba函数总是从先前的值中找到它们的值。但是所有的“数学”函数都可以这样构造吗?GydF4y2Ba

到了1926年,人们知道这是行不通的GydF4y2Ba阿克曼函数GydF4y2Ba是一个合理的“数学”函数,但它不是原始的递归函数。这意味着必须对定义进行广义化(例如GydF4y2Ba一般递归函数GydF4y2Ba它不仅回顾了早期的价值,而且可以“展望未来,直到……””)。但是,数学可以“机械地”永远从适当的原语中构建出来,这个想法似乎没有任何基本问题。GydF4y2Ba

但1931年来了GydF4y2BaGödel的定理GydF4y2Ba.识别悖论和矛盾,并通过改变公理找到修补它们的方法,这是一个悠久的传统。但是Gödel的定理是基于GydF4y2Ba皮亚诺当时的标准公理GydF4y2Ba为算术(被Gödel标记为片段GydF4y2Ba数学原理GydF4y2Ba).它表明存在一个根本的问题。GydF4y2Ba

从本质上讲,哥德尔采取了矛盾的声明“这一陈述是无法动工的”,并表明它可以纯粹是关于算术的陈述 - 大致是关于适当整数方程存在解决方案的陈述。基本上,哥德尔必须做些什么来实现这一目标是创建一个能够编译的“编译器”,可以将像“这个陈述是无法移动的”成算术的东西。GydF4y2Ba

在他的论文中,基本上可以看到他建立了不同的能力(例如,通过Gödel编号将任意表达式表示为数字,使用一般递归检查条件,等等),最终达到“足够高的水平”来表示他想要的语句:GydF4y2Ba

Gödel的“关于数学原理和相关系统的不可确定命题”-点击放大GydF4y2BaGödel的“关于数学原理和相关系统的不可确定命题”-点击放大GydF4y2Ba

Gödel的定理是什么意思?对于数学的基础来说,这意味着机械证明“所有数学定理”的想法是行不通的。因为它表明,至少有一个命题是它自己承认无法证明的,但它仍然是一个“关于算术的命题”,从某种意义上说,它可以“编译成算术”。GydF4y2Ba

这对于数学基础来说是一件大事。但实际上,哥德尔定理有着更重要的意义,尽管它在当时还没有得到承认。哥德尔利用数论和逻辑的基本原理来构建一个计算系统,在这个系统中,人们可以像“此声明无法证明”,以及GydF4y2Ba用算术运算GydF4y2Ba”。GydF4y2Ba

然而,Gödel所拥有的并不是一个精确的通用系统(毕竟,它实际上只需要处理一条语句)。但直接的问题是:如果这个表述在算术上有问题,那么希尔伯特的一般“决策问题”(GydF4y2BaentscheidungsproblusGydF4y2Ba)对于任何公理系统?GydF4y2Ba

然而,为了讨论“一般决策问题”,我们需要一些关于如何决策的一般概念。我们应该使用什么样的最终原语?Schönfinkel(与Paul Bernays合著)-在他另一篇发表的论文中,他在1927年写了一篇关于决策问题的限制性案例,但似乎没有想到使用组合算子来研究它。GydF4y2Ba

到1934年,Gödel谈到了一般递归性(即通过一般递归的可定义性)GydF4y2Ba西德尼教堂GydF4y2Ba斯蒂芬·克莱恩正在介绍GydF4y2BaλGydF4y2Ba可定义性GydF4y2Ba.然后在1936年GydF4y2Ba阿兰图灵GydF4y2Ba介绍GydF4y2Ba图灵机GydF4y2Ba.所有这些方法都涉及到设置某些原语,然后表明可以将大量的东西“编译”成这些原语。实际上,通过思考让它自己编译,希尔伯特GydF4y2BaentscheidungsproblusGydF4y2Ba无法解决。GydF4y2Ba

也许在这些方面没有一个单一的结果会如此重要。但很快就确定了所有三种系统都是完全等效的:它们可以表示的计算集是相同的,这是通过证明一个系统可以模仿另一个系统而建立的。从这一发现中,最终出现了现代的通用计算及其对技术和科学的所有影响。GydF4y2Ba

然而,在早期,实际上还有一个第四等同的系统基于字符串重写 - 这是GydF4y2Ba埃米尔·波斯特发明GydF4y2Ba1920 - 1。哦,还有组合符。GydF4y2Ba

lambda微积分GydF4y2Ba

建立数学逻辑的正确“语言”是什么?自从复杂的GydF4y2Ba数学原理GydF4y2Ba.但在1930年左右,阿隆佐·丘奇想要一个新的、更干净的环境。他需要有个办法(就像弗雷格和GydF4y2Ba数学原理GydF4y2Ba在他之前所做的)代表“GydF4y2Ba纯函数GydF4y2Ba”。他就是这样发明的GydF4y2BaλGydF4y2Ba.GydF4y2Ba

今天在Wolfram语言中GydF4y2Ba作用GydF4y2Ba[x,f [x]]GydF4y2Ba或GydF4y2BaXGydF4y2BaGydF4y2Baf (x)GydF4y2Ba(或各种速记)。教会最初GydF4y2BaλGydF4y2BaXGydF4y2Ba[GydF4y2BamGydF4y2Ba]:GydF4y2Ba

教会的“一套逻辑基础的假设 - 点击放大GydF4y2Ba

但最值得注意的是,在书的第一页,他定义了GydF4y2BaλGydF4y2Ba,他引用了Schönfinkel的combinator纸。(好吧,具体来说,他引用它是因为他想使用Schönfinkel发明的设备,我们现在称之为currying。)-GydF4y2Baf[x][y]GydF4y2Ba代替GydF4y2Baf[x,y]GydF4y2Ba——尽管讽刺的是,他没有提到库里。)在他1932年的论文中(显然是基于1928-9年的研究)GydF4y2BaλGydF4y2Ba几乎是一个次要节目——主要的节目是对数学逻辑的37个形式假设的介绍:GydF4y2Ba

37个正式假设的介绍点击放大GydF4y2Ba

在明年,J. Barkley Rosser试图用他自己的组合者重新重新咖喱的“组合逻辑” - 并展示它们如何对应于Lambda表达方式:GydF4y2Ba

J.Barkley Rosser的组合器点击放大GydF4y2Ba

1935年,lambda微积分在Church的GydF4y2Ba初等数论的一个无法解决的问题GydF4y2Ba,其中他介绍了任何“可有效计算”的函数GydF4y2BaλGydF4y2Ba,然后用。定义整数GydF4y2BaλGydF4y2Ba的(“GydF4y2Ba教堂数字GydF4y2Ba”)GydF4y2Ba

教会的“基本数字理论”的“一个无法解决的问题” - 为扩大点击GydF4y2Ba

然后证明了确定等价的问题GydF4y2BaλGydF4y2Ba表达式是不可判定的。GydF4y2Ba

不久之后GydF4y2Ba图灵GydF4y2Ba出版了他的《可计算数及其应用》GydF4y2BaentscheidungsproblusGydF4y2Ba“他介绍了他更明显的机械师GydF4y2Ba图灵机模型GydF4y2Ba计算能力。在本文的主要部分,没有lambda或组合子。但到了1936年底,图灵已经去普林斯顿成为丘奇的一名学生,并添加了一张便条,显示了他的图灵机器和丘奇的lambda微积分之间的对应关系。GydF4y2Ba

到了第二年,当图灵写他那相当深奥的“基于序数的逻辑系统”的时候,他到处都在使用lambda演算。在他写的文件的开头GydF4y2Ba一世GydF4y2Ba→GydF4y2BaλGydF4y2BaXGydF4y2Ba[GydF4y2BaXGydF4y2Ba很快,他就把lambda和组合子混在一起了。事实上,他已经发表了一篇一页纸的论文,介绍了定点组合子GydF4y2BaΘGydF4y2Ba(是的,还有GydF4y2BaK.GydF4y2Ba在标题中是指Schönfinkel的GydF4y2BaK.GydF4y2Bacombinator):GydF4y2Ba

图灵的“在lambda-k转换中的p函数” - 为扩大单击GydF4y2Ba

丘奇在1941年的《lambda转换的演算》一书中总结了lambda演算的现状,他再次广泛地使用了组合子。Schonfinkel的GydF4y2BaK.GydF4y2Ba是突出的。但是Schönfinkel的GydF4y2BaS.GydF4y2Ba而事实上丘奇也有自己的GydF4y2BaS.GydF4y2Ba组合者GydF4y2BaS.GydF4y2Ba[GydF4y2BaNGydF4y2Ba][GydF4y2BaFGydF4y2Ba][GydF4y2BaXGydF4y2Ba]GydF4y2Ba→GydF4y2BaFGydF4y2Ba[GydF4y2BaNGydF4y2Ba[GydF4y2BaFGydF4y2Ba][GydF4y2BaXGydF4y2Ba]]GydF4y2Ba它实现了教会数字系统的继承者。他还经常使用一些其他的“基本组合词”。GydF4y2Ba

最后,组合子和lambda演算是完全等价的,在它们之间转换是相当容易的——但是有一个奇怪的权衡。在lambda演算中,可以命名变量,这有利于人类的可读性,但在正式级别上可能会导致问题。在组合符中,事情在形式上要干净得多,但人们得到的表达式可能是完全无法理解的。GydF4y2Ba

重点是,在lambda表达式中GydF4y2BaλGydF4y2BaXGydF4y2BaλGydF4y2BayGydF4y2BaXGydF4y2Ba[GydF4y2BayGydF4y2Ba一个正在命名变量(这里GydF4y2BaXGydF4y2Ba和GydF4y2BayGydF4y2Ba),但实际上这些名称只是占位符:它们是什么并不重要;它们只是显示了不同论点的走向。在这种简单的情况下,一切都很好。但如果用GydF4y2BayGydF4y2Ba另一个lambda表达式,比如说GydF4y2BaλGydF4y2BaXGydF4y2BaFGydF4y2Ba[GydF4y2BaXGydF4y2Ba]那是什么GydF4y2BaXGydF4y2Ba?是一样的吗GydF4y2BaXGydF4y2Ba在实践中,有各种各样的重命名方案可供使用,但它们往往非常粗糙,事情很快就会纠结起来。如果要对lambda演算进行正式证明,这可能是一个大问题,事实上,一开始还不清楚它是否会被修改erail介绍了lambda微积分的整个概念。GydF4y2Ba

这就是为什么Lambda微积分与组合者之间的对应关系很重要。使用组合者没有变量,因此没有变量名称要纠结。因此,如果人们可以表明可以将某些东西转换为组合者 - 即使一个人从不查找生成的潜在很长而丑陋的组合表达式,它也知道一个人的安全问题。GydF4y2Ba

不过,还有许多其他复杂的问题。其中突出的问题是什么时候可以认为组合子表达式相等。假设你有一个组合子表达式,比如GydF4y2Ba(年代[s [s] [k]]] [k]GydF4y2Ba.好吧,你可以反复应用组合子的规则来变换和减少它。它通常会在一个固定点结束,不再应用规则。但一个基本问题是,规则的应用顺序是否重要。1936年,Church和RosserGydF4y2Ba事实证明不是这样GydF4y2Ba.GydF4y2Ba

实际上,他们特别证明的是微积分的类似结果。他们画了一张图来表示可以被约化的不同顺序,并表明无论走哪条路都是一样的:GydF4y2Ba

lambda演算的类似结果GydF4y2Ba

这看起来像是一个细节。但事实证明,他们的结论的一般化适用于所有类型的系统。在做计算(或GydF4y2Ba自动证明定理GydF4y2Ba)而是“无论你走哪条路都无所谓;你总是会得到同样的结果。”这是很重要的。但最近又出现了另一个重要的应用。事实证明,我们称之为" Church-Rosser性质"的泛化GydF4y2Ba因果不变性GydF4y2Ba在我们GydF4y2Ba物理项目GydF4y2Ba.GydF4y2Ba

而这是导致我们的模型,以相对主义的不变性,一般协方差,量子力学的客观现实以及物理学的其他中心特征。GydF4y2Ba

实际计算GydF4y2Ba

回顾起来,20世纪30年代最伟大的成就之一就是通用计算概念的诞生。但当时所做的都是用数学逻辑来表述的任何理论结构在思考数学基础之外的实际应用都是很不明显的。但就在希尔伯特等人从理论上讨论数学机械化的时候,越来越多的实际机器被制造出来进行数学计算。GydF4y2Ba

我们知道即使在古代(至少一个)简单GydF4y2Ba基于齿轮的机械计算装置GydF4y2Ba存在。16世纪中期开始建造算术计算器,到19世纪末,算术计算器被广泛使用。起初它们是机械式的,但到了20世纪30年代,大多数是机电式的,并且开始出现可以将执行不同算术运算的单元链接在一起的系统。到194年底基于电子技术的这种相当复杂的系统正在建造中。GydF4y2Ba

早在19世纪30年代GydF4y2Ba查尔斯·巴贝奇曾设想过一个“分析引擎”GydF4y2Ba哪一个可以根据穿孔卡片指定的“程序”进行不同的操作GydF4y2BaAda LovelaceGydF4y2Ba他意识到这样一台机器具有广泛的“计算”潜力。但是到了20世纪30年代,一个世纪已经过去了,这种情况与正在进行的理论发展没有任何联系,计算系统的实际工程是在没有任何特定的总体理论框架的情况下完成的。GydF4y2Ba

尽管如此,随着电子设备变得越来越复杂,心理学的科学兴趣也越来越浓厚,发生了一些其他的事情:开始出现了一种想法(有时与控制论的名称有关),即电子技术可能以某种方式再现大脑等事物的工作方式。20世纪30年代中期GydF4y2Ba克劳德香农GydF4y2Ba在1943年,他证明了布尔代数可以表示开关电路是如何工作的GydF4y2Ba沃伦麦卡洛克GydF4y2Ba和GydF4y2Ba沃尔特皮特GydF4y2Ba提出了一个理想化的神经网络模型,该模型用接近数学逻辑的术语来描述。GydF4y2Ba

同时到了20世纪40年代中期GydF4y2Ba约翰·冯·诺依曼GydF4y2Ba他开始为实用的电子计算机提出类似数学的规范,包括它们的程序可能以电子方式存储的方式。一开始,他提到了很多类似大脑的“器官”和“抑制性连接”,基本上没有提到数学逻辑的概念。但到了20世纪40年代末,冯·诺伊曼开始在概念上讨论Gödel定理和图灵机之间的联系,艾伦·图灵开始接触实际的电子计算机,人们开始广泛理解通用计算机和通用计算的概念。GydF4y2Ba

在20世纪50年代,现在将被称为计算的理论和对与人工智能相关性的乐观乐观的爆发感兴趣。相当于“混凝土”的计算模型,各种各样的“跨学科工作”,如有限自动机,图灵机,GydF4y2Ba蜂窝自动机GydF4y2Ba和理想化的神经网络。然而,更多的“摘要”方法,如递归函数,λ微积分和组合者 - 然而,对数学逻辑的研究人员来说几乎限制。GydF4y2Ba

20世纪50年代后期,当早期编程语言开始出现时,对实用计算机的思考开始变得更加抽象。人们理解,语言的语法可以递归地指定,而实际的递归(函数能够自己调用)正好潜入到语言的规范中GydF4y2Ba阿尔戈60GydF4y2Ba.但是程序运行的结构是怎样的呢?大部分集中在数组上(有时相当优雅,比如GydF4y2BaAPLGydF4y2Ba),偶尔,字符串。GydF4y2Ba

但有一个明显的例外GydF4y2Ba口齿不清GydF4y2Ba中所描述的,GydF4y2Ba约翰·麦卡锡GydF4y2Ba1960年的论文“符号表达式的递归函数及其机器计算,第一部分”(第二部分未编写)。当时人们对人工智能持乐观态度,其想法是创造一种“实现人工智能”的语言,并进行“机械定理证明”等工作。麦卡锡描述为基于“递归函数形式主义”的一个关键思想是使用树结构符号表达式(“GydF4y2BaS.GydF4y2Ba表达式”)。(在最初的论文中,现在是Wolfram语言风格GydF4y2Baf (g [x]]GydF4y2Ba“GydF4y2BamGydF4y2Ba表达“符号,用方形括号完成,用作规范的一部分,但Quintesential-Lisp样(GydF4y2BaFGydF4y2Ba(GydF4y2BaGxGydF4y2Ba))当LISP实际实现时,符号就赢了。)GydF4y2Ba

麦卡锡的“符号表达式的递归函数及其机器计算,第一部分”-点击放大GydF4y2Ba

LISP中的一个问题是如何将“表达式”(被视为表示事物的表达式)转化为函数(做事情的函数)。基本的计划是利用丘奇的想法GydF4y2BaλGydF4y2Ba符号。但是当它来实现这一点时,当然,名称碰撞的麻烦,最终以非常忏悔的方式处理。麦卡锡所以知道组合者吗?答案是肯定的,因为他的1960年表明:GydF4y2Ba

麦卡锡的“符号表达式的递归函数及其机器计算,第一部分”-点击放大GydF4y2Ba

事实上,直到现在我才知道麦卡锡曾经考虑过combinator,在我认识他的这些年里,我想我从来没有亲自和他谈过这些。但对麦卡锡来说,就像丘奇一样,组合符是一种“安慰的后盾”,确保使用lambda是可以的,如果变量命名出了严重的问题,至少在原则上总有一种方法可以解决所有问题。GydF4y2Ba

在计算机和计算机语言的实际发展过程中,甚至连lambdas(更不用说组合词)也没有多少人听说过(除了在一个小的人工智能圈子里)直到20世纪80年代。即使在当时,为了贴近硬件和构建程序,人们往往希望给每样东西赋予一种“数据类型”——这与“使用任何表达式”是不一致的,这也无济于事标准组合器和lambdas的方法。但从20世纪80年代开始,特别是随着GydF4y2Ba函数式编程GydF4y2Ba-至少,lambdas在可视性和实际应用方面稳步提高。GydF4y2Ba

组合子呢?偶尔为了证明原则会有GydF4y2Ba硬件系统GydF4y2Ba开发的,本机实现Schönfinkel的组合符。或者,特别是在现代,会有一个GydF4y2Ba深奥的语言GydF4y2Ba这在混淆时使用了某种有目的的努力。尽管如此,有关计算的基础的显着人士仍然存在着一个显着的人,或者在一次或另一个教授组合者或写一篇关于他们的论文。而近年来,“组合者”一词变得更加流行,以描述一个“纯粹的适用”功能。GydF4y2Ba

但总的来说,最初由组合子产生的重要思想最终被吸收到实际计算中,通过相当迂回的途径,而没有直接参考它们的起源,或组合子的特定结构。GydF4y2Ba

组合子文化GydF4y2Ba

100年来,组合器一直是一个晦涩的学术话题,尤其是在lambda微积分方面,它介于理论计算机科学、数学逻辑和某种程度上的数学形式主义(如范畴理论)之间。很多已经完成的工作都可以从某种程度上追溯到哈斯克尔·库里或阿朗佐·丘奇的影响——特别是通过GydF4y2Ba他们的学生GydF4y2Ba那GydF4y2BagrandstudentsGydF4y2Ba那GydF4y2Ba曾孙GydF4y2Ba等。在早期,大部分工作都集中在美国,但到了20世纪60年代,大量移民涌入欧洲,尤其是荷兰。GydF4y2Ba

但是,尽管它们都是抽象和晦涩的,但在少数情况下,组合学家已经突破了一些更接近主流的东西。其中一次是流行的逻辑益智书GydF4y2Ba模仿一只知更鸟GydF4y2Ba,1985年由GydF4y2Ba雷蒙德·斯穆里安GydF4y2Ba-阿朗佐·丘奇以前的学生书的开头是这样的:“一座魔法森林里居住着会说话的鸟儿”,接着讲述了一个故事,基本上是关于“装扮”成鸟儿互相称呼的组合者(GydF4y2BaS.GydF4y2Ba是“椋鸟”,GydF4y2BaK.GydF4y2Ba“红隼”-结尾有一个方便的“谁是谁的鸟”。这本书致力于“纪念Haskell Curry,组合逻辑的早期先驱和狂热的鸟类观察者”。GydF4y2Ba

《嘲笑一只知更鸟》(Raymond smullyan)——点击放大GydF4y2Ba《嘲笑一只知更鸟》(Raymond smullyan)——点击放大GydF4y2Ba

然后是GydF4y2BaY组合器GydF4y2Ba.最初的GydF4y2BayGydF4y2Bacombinator产生于柯里在20世纪30年代关于combinators公理系统一致性的工作,并明确出现在他1958年的经典著作中:GydF4y2Ba

由Haskell B. Curry和Robert的组合逻辑 - 点击放大GydF4y2Ba由Haskell B. Curry和Robert的组合逻辑 - 点击放大GydF4y2Ba

他称之为“悖论组合子”,因为它是以一种类似于各种悖论的自指方式递归定义的GydF4y2BaSSKGydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaK.GydF4y2Ba(GydF4y2Ba党卫军GydF4y2Ba(GydF4y2BaS.GydF4y2Ba(GydF4y2BaSSKGydF4y2Ba))))GydF4y2BaK.GydF4y2Ba)它最显著的特点是,根据Schönfinkel的组合变换规则,它永远不会稳定到某个特定的“值”,而是永远保持增长。GydF4y2Ba

那么在二零零五年,GydF4y2Ba保罗•格雷厄姆GydF4y2Ba-他长期以来一直热衷于函数式编程,LISP决定为他命名GydF4y2Ba新的(现在非常有名的)创业加速器GydF4y2Ba“Y Combinator”。我记得我问他为什么这么叫它。“因为,”他说,“没有人能理解GydF4y2BayGydF4y2Ba选择符”。GydF4y2Ba

从那时起看我自己的档案,我找到了一封我发了一封电子邮件GydF4y2Bacombinator爱好者GydF4y2Ba和我一起工作的人:GydF4y2Ba

电邮至Matthew SzudzikGydF4y2Ba

接着,基本上,我们的定理证明器可以证明基本性质GydF4y2BayGydF4y2Ba组合者“(GydF4y2BaV6GydF4y2Ba听起来很古老;我们现在就要发布了GydF4y2Bav12.2GydF4y2Ba):GydF4y2Ba

证明Y组合者的基本属性GydF4y2Ba

去年我有另一个意外遇到组合者。我曾GydF4y2Ba给我一本书GydF4y2Ba这是由Alan TINGE拥有的,在它中,我发现了一张纸 - 我被认为是兰布斯和组合者覆盖的(但这不是GydF4y2Ba这GydF4y2BayGydF4y2Bacombinator):GydF4y2Ba

Alan Turing书中的注释点击放大GydF4y2Ba

这需要相当多的侦查(GydF4y2Ba我写了很多关于它的文章GydF4y2Ba) - 但我最终发现这篇论文是由图灵的学生写的GydF4y2Ba罗宾·甘迪GydF4y2Ba.但我从来没有想过为什么他正在做的组合者......GydF4y2Ba

设计符号语言GydF4y2Ba

我认为我首先在1979年左右发现了组合者,通过在一个名为一本名为的书中查看Schönfinkel的原始纸张GydF4y2Ba从弗雷格到哥德尔:一本数理逻辑的原著GydF4y2Ba(通过一个特定的GydF4y2Ba让·范·海耶诺特GydF4y2Ba).Schönfinkel的论文最终如何出现在那本书中是一个有趣的问题,这GydF4y2Ba我会在别处写的GydF4y2Ba.我这本书的书脊在Schönfinkel的报纸上被打破了很久,在不同的时间,我回到报纸上,总觉得有更多的东西需要理解。GydF4y2Ba

但GydF4y2Ba为什么我要在1979年研究这些东西呢GydF4y2Ba?我想回想起来,我可以说我从事的一项活动可以追溯到弗雷格甚至GydF4y2Ba莱布尼兹GydF4y2Ba当前位置我试图找到一个表示数学和其他方面的基本框架。但我的目标不是哲学,而是一个非常实用的目标:我试图构建一种计算机语言,能够在数学和其他方面进行一般计算。GydF4y2Ba

我当时的应用领域是物理学,我主要的方法论经验也来自物理学。结果是,就像试图从基本粒子的角度来理解世界一样,我想从最基本的元素的角度来理解计算。但我也有很多使用计算机进行数学计算的实际经验。我很快就提出了一个理论,关于计算的基本原理。GydF4y2Ba

它从代数表达式上的变换的实际问题开始(turn sin(2GydF4y2BaXGydF4y2Ba)变成2罪(GydF4y2BaXGydF4y2Ba)因为(GydF4y2BaXGydF4y2Ba), 等等。)。但很快就成为了一般的想法:通过对象征性表达的转换来计算。这是为了工作吗?我想尽可能地理解,尽可能真正的计算 - 从那时起,我的历史就在数学逻辑中。我在书籍和论文中看到的大部分数学逻辑我发现了深奥,沉浸在有时可怕的普通的复杂性。但这些人真的在做什么?我更容易让我有一个明确的理论,我可以基本上是减少学家科学。那东西GydF4y2Ba数学原理GydF4y2Ba?那些关于重写系统的想法?是的,我可以看到如何将它们代表为符号表达式转换规则。GydF4y2Ba

事情就是这样GydF4y2Ba我是来设计SMP的GydF4y2Ba:“GydF4y2Ba符号操作程序GydF4y2Ba——都基于符号表达式的转换规则。表示数学关系很容易(GydF4y2Ba$ xGydF4y2Ba是一个模式变量,现在在Wolfram语言是GydF4y2Bax_GydF4y2Ba仅在左侧):GydF4y2Ba

符号操作程序GydF4y2Ba

或基本逻辑:GydF4y2Ba

符号操作程序GydF4y2Ba

或者,在这方面,Schönfinkel想要捕捉的谓词逻辑:GydF4y2Ba

符号操作程序GydF4y2Ba

是的,它可以模拟一台图灵机(注意最后出现的磁带作为转换规则表示):GydF4y2Ba

符号操作程序GydF4y2Ba

但我意识到的最重要的一点是,它确实能够用符号表达式和它们的转换规则来表示基本上任何东西。是的,考虑“将函数应用于事物”是非常有用的(例如,SMP有它的lambda版本),但将符号表达式看作“存在”就更有效了(“GydF4y2BaXGydF4y2Ba不一定要有价值“)-就像世界上的事物一样,语言能够定义事物应该如何转换。GydF4y2Ba

回想起来,这一切似乎都非常像组合符的核心理念,但有一个重要的例外:所有的东西都是由“纯粹的结构元素”(例如)构建的GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba,有一整套“原始对象”,旨在具有直接可理解的含义(如GydF4y2Ba加上GydF4y2Ba那GydF4y2Ba次GydF4y2Ba等)。事实上,我在语言设计中看到的大部分任务是思考人们可能想要做的计算,然后尝试“深入”寻找“基本粒子”——或者这些计算可能来自的原始对象。GydF4y2Ba

随着时间的推移,我逐渐意识到这样做并不是说原则上人们可以用什么来构造计算,而是更多的是关于GydF4y2Ba架起通向人类思考事物的桥梁GydF4y2Ba.至关重要的是潜在的结构象征性表达式 - 可以代表任何东西。但我越来越多地实现了计算语言所需的是,以精确的计算形式封装的方法是我们人类能够理解的方式所考虑的事情。能够做到这一点的重要组成部分是利用最终一直是核心,使我们的整个智力发展成为可能的核心:人类语言的想法。GydF4y2Ba

人类语言给了我们一种方式来象征性地谈论世界:给事物起象征性的名字,然后用这些名字来建造事物。在GydF4y2Ba设计计算语言GydF4y2Ba我们的目标是利用这一点:使用人类已经知道和理解的东西,但能够用一种精确的计算方式来表示它,这种计算方式能够经受实际计算的考验,这种计算可以由计算机自动完成。GydF4y2Ba

这可能不是巧合,我发现的符号表达式的树结构是计算语言的成功基础,有点像树结构的理想化版本(思考解析树或句子图解)。我们可以这样看待人类语言。建立通用计算还有其他方法,但这似乎是最直接符合我们思考事物方式的方法。GydF4y2Ba

而且,是的,最终所有这些符号表达式都可以像组合子一样从像GydF4y2BaS.GydF4y2Ba和GydF4y2BaK.GydF4y2Ba——没有直接的人类意义。但这就像一个没有名词的世界——一个任何事物都没有名称的世界——所有事物的表示都必须从头开始构建。但是,人类语言的核心思想——现在也是计算语言的核心思想——是能够有抽象层,人们可以给事物命名,然后仅仅通过名称来指代它们,而不必考虑它们是如何“内部”构建的。GydF4y2Ba

在某种意义上,我们可以看到像frege -和Schönfinkel-as这样的人的目标是“简化”数学(或世界)中存在的东西,并把它变成“纯逻辑”。而结构部分正是计算机语言得以实现的原因。但在我的计算语言的概念中,整个想法是拥有与世界和我们人类思考它的方式有关的内容。GydF4y2Ba

在过去的几十年里,我一直惊讶于用符号表达和转换来表达事物的想法是多么强大和成功。在Wolfram语言和现在使用它的所有系统中发生的一切的背后,最终都只是符号表达根据特定规则进行转换,并达到表示计算结果的固定点,就像Schönfinkel原始论文中的那些例子一样。GydF4y2Ba

Schönfinkel设置的一个重要特征是,一个人不仅仅拥有像这样的“功能”GydF4y2BaFGydF4y2Ba[GydF4y2BaXGydF4y2Ba],甚至只是嵌套函数,如GydF4y2BaFGydF4y2Ba[GydF4y2BaGGydF4y2Ba[GydF4y2BaXGydF4y2Ba]]。相反,我们可以使用一些结构来代替“函数名”(比如GydF4y2BaFGydF4y2Ba)一个人可以有一个完整的复杂的象征结构。虽然这在SMP中当然是可能的,但并没有太多的东西围绕它构建。但是当我醒来的时候GydF4y2Ba开始设计现在的Wolfram语言GydF4y2Ba1986年,我确定表达式的“头”(我称之为“头”)本身可以是任意表达式。GydF4y2Ba

当MathematicaGydF4y2Ba1988年首次发射GydF4y2Ba我很高兴看到不止一个来自数理逻辑的人立即想到实现组合运算。定义如下:GydF4y2Ba

s [x _] [y _] [z_]:= x [z] [y [z]]GydF4y2Ba
& # 10005GydF4y2Ba

清除[s,k];s [x _] [y _] [z_]:= x [z] [y [z]]GydF4y2Ba

k(间)[y_]: = xGydF4y2Ba
& # 10005GydF4y2Ba

k(间)[y_]: = xGydF4y2Ba

然后组合器“只工作”(至少当它们到达一个固定点时):GydF4y2Ba

(年代[k [s]] [s [k [k]] [s [k [s]] [k]]]] [s [k [s [s [k] [k]]]] [k]][一][b] [c]GydF4y2Ba
& # 10005GydF4y2Ba

(年代[k [s]] [s [k [k]] [s [k [s]] [k]]]] [s [k [s [s [k] [k]]]] [k]][一][b] [c]GydF4y2Ba

但是“复合符号头”的想法呢?在SMP中,我已经用它们来做一些简单的事情,比如表示导数(用Wolfram语言)GydF4y2Baf'[x]GydF4y2Ba是GydF4y2Ba派生词GydF4y2Ba[1] [f][x]GydF4y2Ba).但令我感兴趣的是,随着几十年过去,越来越多的人完成了GydF4y2Ba复合头GydF4y2Ba”。有时,有人认为它们是某种操作的嵌套,或将修饰符嵌套到符号对象。但是,他们越来越多地成为一种代表“高阶构造” - 效果的方法,这些东西产生了产生的东西的东西,最终得到一个想要的具体对象。GydF4y2Ba

我不认为我们大多数人特别擅长遵循这种抽象链,至少在没有某种“导轨”的情况下是这样。多年来,我一直很感兴趣地看到,我们是如何逐步为越来越长的抽象链构建导轨的。首先是这样的事情GydF4y2Ba作用GydF4y2Ba那GydF4y2Ba申请GydF4y2Ba那GydF4y2Ba地图GydF4y2Ba.然后GydF4y2Ba巢GydF4y2Ba那GydF4y2Ba折叠GydF4y2Ba那GydF4y2Ba定点GydF4y2Ba那GydF4y2Ba映射线程GydF4y2Ba.但直到最近GydF4y2Ba嵌套图GydF4y2Ba那GydF4y2BaFoldPairGydF4y2Ba那GydF4y2Ba子地图GydF4y2Ba等等即使从开始有直接的“头部操纵”功能GydF4y2Ba操作GydF4y2Ba和GydF4y2Ba通过GydF4y2Ba.但与更多GydF4y2Ba“类数组”操作GydF4y2Ba对于列表操纵,他们缓慢捕获。GydF4y2Ba

从某种意义上说,组合符是“符号头脑操作”的终极故事:在应用于任何事物之前,任何事物都可以应用于任何事物。而且,是的,它很难跟踪发生了什么——这就是为什么“命名导轨”是如此重要,也是为什么它们的设计具有挑战性。但是,似乎随着我们对事物理解的逐步发展,我们慢慢地能够走得更远一些,实际上是在构建一种结构和力量,这种结构和力量是一个世纪前组合者以一种与人类无关的方式首次向我们展示的。GydF4y2Ba

计算宇宙中的组合子GydF4y2Ba

组合器的发明是为了一个明确的目的:如Schönfinkel所说,为逻辑提供构建块。这与我们现在所知的计算的其他模型是一样的。所有这些模型都是“为一个目的而构建的”但归根结底,计算和程序都是抽象的东西,原则上可以在不考虑任何特定目的的情况下对其进行研究。人们可能有特定的理由去研究某种程序的运行速度,或者可以证明什么。但是,纯自然科学的类比:研究什么程序呢那就是“自然做”?GydF4y2Ba

20世纪80年代初,我对此非常感兴趣GydF4y2Ba我们可以将其视为“程序的自然科学”。我的兴趣最初来自于一个关于普通自然科学的问题。自然界一个非常引人注目的特征是它在我们看来是多么的复杂。但这种复杂性到底从何而来?大自然通过什么样的机制产生它?我很快意识到,在试图解决这个问题时,我需要一个尽可能多的基础来制作模型。为此,我转向了程序,开始研究“野外程序”可能会做什么。GydF4y2Ba

自从GydF4y2Ba伽利略GydF4y2Ba和GydF4y2Ba牛顿GydF4y2Ba数学方程一直是人们最终想象制作自然模型的主要方式。从表面上看,它们的实数和连续的特性似乎与通常计算的离散元素和离散选择截然不同。但也许部分是通过我自己在计算机上象征性地做数学的经验,我没有看到真正的冲突,我开始认为程序是一种对传统科学建模方法的概括。GydF4y2Ba

但是大自然会使用什么样的程序呢?我决定开始探索所有的可能性:从最简单的程序开始的整个“计算宇宙”。我提出了一个特别简单的设置,其中包括一行单元格,其值为0或1,并根据相邻单元格的值进行并行更新。我很快就知道,像这样的系统实际上是GydF4y2Ba以“细胞自动机”的名义进行研究GydF4y2Ba在20世纪50年代(尤其是在2D领域)作为潜在的计算模型,尽管由于似乎不是很“人类可编程”而失去了人们的青睐。GydF4y2Ba

我最初的假设是,对于简单的程序,我只能看到简单的行为。但是用我的细胞自动机,做实际的计算机实验和可视化结果非常容易。虽然在很多情况下我看到的是简单的行为,但我也看到了一些非常令人惊讶的事情:在某些情况下-GydF4y2Ba即使规则很简单GydF4y2Ba——GydF4y2Ba生成的行为可能非常复杂:GydF4y2Ba

GraphicsRowGydF4y2Ba
& # 10005GydF4y2Ba

GraphicsRow[label [ArrayPlot[CellularAutomaton[#, {{1}, 0}, {80, All}]], RulePlot[CellularAutomaton[#]] & /@ {150,30,73}, ImageSize -> {Full, Automatic}, Spacings -> 0]GydF4y2Ba

我花了很多年才接受这个现象,它逐渐影响了我对科学、计算和许多其他事物的思考方式。起初,我几乎只在细胞自动机中研究它。我与细胞自动机可以模拟的真实系统建立了联系。我试着去理解现有的数学和其他方法对我所看到的东西能说些什么。慢慢地,我开始形成一般的概念来解释发生了什么,比如计算不可约性和GydF4y2Ba计算等价原则GydF4y2Ba.GydF4y2Ba

但是,在20世纪90年代初,我用Wolfram语言武装起来,我决定我应该试着看看我在细胞自动机中发现的现象如何在其他类型的计算系统中发挥作用GydF4y2Ba我的档案GydF4y2Ba记录1992年4月4日,我开始看组合者。GydF4y2Ba

我似乎已经回过神来好几次了,但在1994年7月10日的一本笔记本上(是的,它仍然运行良好),有:GydF4y2Ba

Mathematica笔记本,1994年7月10日GydF4y2Ba

一个由Schönfinkel的随机选择的组合符GydF4y2BaS.GydF4y2Ba'沙GydF4y2BaK.GydF4y2Ba开始表现出复杂的行为。我似乎有很多笔记本从简单的组合定义开始,然后开始探索:GydF4y2Ba

从简单的组合子定义开始——并进行探索GydF4y2Ba

有一些看起来像是来自“计算自然主义者的野外笔记本”的页面:GydF4y2Ba

“计算博物学家的野外笔记本”中的页面GydF4y2Ba

还有一些人试图用与细胞自动机相同的方式来形象化组合子:GydF4y2Ba

试图以与细胞自动机相同的方式来形象化组合子GydF4y2Ba

但最终的结果是,是的,就像图灵机,字符串替换系统和我在计算领域探索的所有其他系统一样,组合子做的事情和我最初在细胞自动机中发现的完全一样。combinator不仅仅是可以用来做事情的系统。即使在“野外”,它们也能自发地做非常有趣和复杂的事情。GydF4y2Ba

我包括GydF4y2Ba几页GydF4y2Ba在我关于“符号系统”一章的末尾,我称之为“符号系统”(本质上是lambdas)GydF4y2Ba简单程序的世界GydF4y2Ba“在GydF4y2Ba一种新的科学GydF4y2Ba(是的,尤其是阅读GydF4y2Ba笔记GydF4y2Ba现在,我再次意识到还有很多事情需要探索……:GydF4y2Ba

一种新型科学中的“符号系统”——点击放大GydF4y2Ba

在这本书的后面,我特别谈到GydF4y2Ba关于Schönfinkel的组合子与计算通用性阈值的关系。但在展示它们的做法之前,我说:GydF4y2Ba

组合子最初是作为一种理想化的方式来表示逻辑中定义的函数结构,实际上在1920年首次被引入——比图灵机早了16年。但是,尽管在过去的80年里对它们进行了一些研究,但它们在很大程度上仍被视为相当模糊和不相干的概念"GydF4y2Ba

多么“无关紧要”它们应该被视为存在吗?当然,这取决于它们的用途。作为计算宇宙中需要探索的东西,细胞自动机具有巨大的优势,可以立即可视化。对于组合器,找到任何方法将它们的行为忠实地转化为适合人类感知的东西都是一个挑战。sinc计算等价性原则意味着一般的计算特性不依赖于不同系统的细节,有一种倾向认为,即使在研究计算宇宙时,组合子“也不值得费心”。GydF4y2Ba

然而,在过去的20多年里,细胞自动机突出地展示了一件事,那就是任何足够简单的系统最终都将是一个GydF4y2Ba有用的模型GydF4y2Ba.软体动物色素沉淀。催化过程。道路交通流。所有这些都有简单的元胞自动机模型。组合子呢?如果没有良好的可视化,就很难说“这看起来像是组合行为”。即使100年过去了,它们还是有点陌生。但是当涉及到捕获某个系统的一些大规模表达式或树行为时,如果组合子非常适合的话,我不会感到惊讶。GydF4y2Ba

当我们看到计算世界时,其中一个重要的想法是“挖掘”它,不仅是为了可以作为事物模型的程序,也为了在某种程度上对某些技术目的有用的程序。是的,你可以想象专门将一些已知的程序“编译”到组合器中。但问题是,“自然产生的组合子”是否能以某种方式被确定为对某些特定目的有用。他们能提供某种新型的分布式加密协议吗?它们对规划分布式计算系统有帮助吗?它们是否可以作为建立分子尺度计算的基础,比如树状分子?我不知道。但找出答案会很有趣。随着组合器进入第二个世纪,它们提供了一种独特的“计算原料”,可以从计算世界中挖掘。GydF4y2Ba

combinator All the Way Down?GydF4y2Ba

宇宙的基本组成是什么?在很长一段时间里,人们认为它必须由一些基本的数学东西来描述。的确,就在组合子被发明的时候广义相对论和量子力学这两大理论刚刚发展起来。事实上,似乎物理学和数学都进展得很好,人们喜欢GydF4y2Ba大卫·希尔伯特想象GydF4y2Ba也许这两个问题都可以完全解决,而且可能有一个类似数学的物理学公理基础,可以像他想象的那样“机械地探索”数学。GydF4y2Ba

但事实并非如此。GydF4y2BaGödel的定理GydF4y2Ba似乎粉碎了数学“完全机械探索”的想法。尽管在研究广义相对论和量子力学的结果方面取得了巨大的技术进步,但人们对其背后可能存在的问题却知之甚少。电脑(包括像GydF4y2BaMathematicaGydF4y2Ba)在探索现有的物理学理论时,这些理论无疑是有用的。但物理学并没有显示出任何“基本上是计算性的”的特殊迹象,事实上,现有的理论在结构上似乎与计算过程不太兼容。GydF4y2Ba

但当我探索计算宇宙,看到即使是非常简单的规则也会产生丰富复杂的行为时,GydF4y2Ba我开始怀疑是否可能GydF4y2Ba从根本上说,宇宙可能是计算性的。我开始GydF4y2Ba制作具体的模型GydF4y2Ba空间和时间是由离散点的演化网络形成的。我意识到GydF4y2Ba出现的想法GydF4y2Ba在20世纪30年代和40年代对组合子和lambda演算的研究中,可能有直接的关联。GydF4y2Ba

像组合符(或lambda微积分)一样,我的模型具有允许许多可能的进化路径的特性。就像组合子(或lambda微积分)一样,至少我的一些模型有一个显著的特点,那就是在某种意义上,它与选择的路径无关;最终的结果总是一样的。对于组合符来说,这种“Church-Rosser”或“汇合点”特征是允许一个确定的固定点,可以被认为是计算的结果。在我的宇宙模型中,这不仅仅是停止——事物更微妙一些——但我称之为因果不变性的概括恰恰是导致相对论不变性和广义相对论有效性的原因。GydF4y2Ba

多年来,我在基础物理学方面的工作萎靡不振——这是其他优先事项的牺牲品,也是向一个成熟领域引入新范式的艰苦努力的牺牲品。但就在一年前——GydF4y2Ba在两位才华横溢的年轻物理学家的帮助下GydF4y2Ba- 我又开始了,GydF4y2Ba18l18luck新利 .GydF4y2Ba

我一直不太满意我的想法,即宇宙中的所有事物都用一种特殊的巨大图表来表示。但现在我想象,也许它更像是一个巨大的符号表达式,或者,确切地说,像一个包含了大量元素之间关系的表达式——实际上,是一种巨大的超图。在某种程度上,这是一个非常类似于组合的概念。GydF4y2Ba

在一个GydF4y2Ba技术水平,它与一般组合者表达不一样GydF4y2Ba:它基本上只是一个单层,而不是一棵树。事实上,这似乎让物理宇宙由近似于均匀(流形)空间的东西组成,而不是到处显示某种层次结构的树状结构。GydF4y2Ba

但说到宇宙随时间的发展,它基本上就像组合子表达式的变换。而现在越来越清楚的是,不同路径的存在——以及它们的最终等效——不仅是相对论现象的原因,也是量子力学的原因。值得注意的是,许多概念最初是在组合子和lambda微积分的背景下被发现的,现在直接为物理理论提供了信息。正规形式(基本不动点)是相关的GydF4y2Ba“时间停止”的黑洞GydF4y2Ba.临界对引理与量子力学中的测量有关。等等。GydF4y2Ba

在实际计算和计算语言的创建过程中,正是在组合子的原始结构上添加了“有意义的名称”,使它们变成了我们使用的强大的符号表达式。但在理解“宇宙的数据结构”时,我们在某种意义上回到了更像是“原始组合符”的东西。因为现在所有那些组成宇宙的“空间原子”都没有了有意义的名字;他们更喜欢GydF4y2BaS.GydF4y2Ba'沙GydF4y2BaK.GydF4y2Ba在一个巨大的组合者表达中,独特但都是一样的。GydF4y2Ba

在传统的、数学的物理学观点中,总有这样一种感觉:通过“适当聪明的数学”,就有可能在任何物理系统中“弄清楚将会发生什么”。但一旦人们认为物理从根本上就是计算的,那就不是人们所能期待的了。GydF4y2Ba

就像具有普适计算能力的组合子在某种意义上不能用数学“破解”一样,宇宙也是如此。事实上,在我们的模型中,这就是时间的进步:它是一个不可阻挡的、不可简化的计算过程,与代表宇宙的符号表达式的反复转换有关。GydF4y2Ba

当希尔伯特第一次设想物理学可以简化为数学时,他可能认为这意味着物理学可以被“解决”。但是,通过反映普遍计算的哥德尔定理,很明显数学本身不能被“解决”。但现在实际上,我们有了一个理论“将物理简化为数学”,哥德尔定理现象的结果在我们的宇宙中是非常重要的:它导致了一个有意义的时间概念。GydF4y2Ba

摩西Schönfinkel想象他正在用组合符寻找“逻辑的基石”。也许正是他所提出的简单性使得它几乎不可避免地不仅仅是关于逻辑的:它是一种更普遍的东西。可以表示计算的东西。它具有我们如何表现物质世界的“机器代码”的萌芽。GydF4y2Ba

从某种意义上说,它将组合符“人性化”,使它们在计算机语言等目的就是与人类联系的事物中发挥作用。但在其他一些地方,我们不可避免地要处理一些更像是大规模“未加工的组合器”的东西。物理学就是其中之一。但还有其他原因。在分布式计算。也许在生物学,经济学和其他领域。GydF4y2Ba

有一些特定的问题,比如一个人是在处理树(比如组合子),还是超图(比如我们的物理模型),或者其他什么。但重要的是,很多想法,特别是我们所说的GydF4y2Ba多路系统GydF4y2Ba-带着组合器出现。是的,对于我们人类来说,组合词往往不是最容易理解其中思想的地方。但值得注意的事实是,它们存在于组合子中,而组合子现在已经有一个世纪了。GydF4y2Ba

我不确定是否会有一个重要的领域,只有组合人才能成为主导力量。但一个世纪以来,组合人拥有许多重要思想的精髓。也许在某种程度上,它们注定永远是脚注。但从某种意义上说,它们也是卓越事物生长的种子或根源。而且sGydF4y2Ba组合人进入了他们的第二个世纪GydF4y2Ba似乎可以肯定的是,还会有更多的人从中成长。GydF4y2Ba

组合子的参考书目GydF4y2Ba

发布在:GydF4y2Ba计算科学GydF4y2Ba那GydF4y2Ba历史的视角GydF4y2Ba那GydF4y2Ba语言与沟通GydF4y2Ba那GydF4y2Ba数学GydF4y2Ba

4评论GydF4y2Ba

  1. 令人惊讶的是,没有关于编译函数式语言到组合器的任何内容:所有的“传统”组合器都来自于此,再加上超级组合器和分类组合器。结论:它应该更长!GydF4y2Ba

    西蒙•汤普森GydF4y2Ba
  2. 谢谢你写这个。我认为在CS社区中,组合符没有得到足够的关注!GydF4y2Ba

    有一件事你没有花很多时间去研究,Schöenfinkel的组合符不仅在理论上很有趣,在实践中也被证明是有用的。1979年,David Turner使用它们来实现函数式语言SASL。Simon Peyton Jones的书《函数式编程语言的实现》涵盖了Turner的方法(基本上是将lambda演算转换为组合逻辑),并提供了语言实现社区如何使用这种方法的更多历史。(这本书已经绝版,但可以在网上免费阅读,关于S-K组合符的那一章绝对值得一读。)GydF4y2Ba

    继续实用性的思路,我在我的论文《Functional Genetic Programming and Exhaustive》中使用了它们。程序搜索与组合表达式”,这基本上表明,如果你不需要担心变量,它会更容易自动生成程序(机器不关心一个大的组合表达式是否难以为人类阅读)。GydF4y2Ba

    m或e recently, as an homage to such a foundational idea in computer science, and also to the 1980s computer that gave me my own start (the 16K Sinclair ZX Spectrum from 1982), I wrote a simple interactive S-K combinator program system that could run that old 8-bit micro (https://github.com/imneme/mini -sk.GydF4y2Ba).也许有点傻,但很有趣。GydF4y2Ba

    最后,任何对这些问题感兴趣的人都应该看看约翰·特罗普的GydF4y2Ba
    “Lambda演算与组合逻辑游乐场”在线(GydF4y2Bahttps://tromp.github.io/cl/cl.htmlGydF4y2Ba),它有很多关于最小计算系统的思想。GydF4y2Ba

    梅丽莎·奥尼尔GydF4y2Ba
  3. 对美的追求阻碍了对组合空间的正确探索吗?最短的组合子的组成很快就变成了一团难以理解的混乱。“大型”组合符(超出手写的范围)可以嵌入元信息,这些元信息在组成时可以保持另一种叙事,而不会影响计算结果。GydF4y2Ba

    想象你有一个年代和K self-annotate减少自己的图组成,称为xS和xK,和一些额外的“检验”组合子让你混合一些底层的计算以及随之而来的元信息,说combinator xX简单地删除元信息,这样S = xX xS。GydF4y2Ba

    然后,i=SCC,但是席=!XS XC XC由于不同的元信息,但是XX席=XX XS XC XC。GydF4y2Ba

    这个自我注释的例子是愚蠢的,可能是错误的,我只是想说明这个想法。理想情况下,您希望元信息有效载荷维护,人类可以使用,同时仍然受益于组合者提供的无所畏惧的“纠结”。GydF4y2Ba

    例如,元信息可用于“解非”Inversef(F(x))。GydF4y2Ba

    安德鲁·拉芬斯佩格GydF4y2Ba
  4. 我一直对计算科学很感兴趣,我相信量子方法的研究将对未来的计算产生新的影响。GydF4y2Ba

    艾德格拉姆GydF4y2Ba
Baidu