换言之,其他结构

2020-06-16 00:04:54

记者:你能给我们一个概括性的解释,说明为什么范畴理论如此有用吗?

威廉·劳维尔:日常的人类活动,比如在溪边的山坡上盖房子,铺设电话导管网络,在太阳能系统中导航,都需要有可行的计划。计划任何这样的事业都需要发展对空间的思考。每一次发展都涉及到许多思维步骤和许多与之相关的空间几何结构。由于空间思维的多步性,必须采取独特的数学手段使其可靠。只有明确的思维原则(逻辑)和明确的空间原则(几何)才能保证可靠性。60年前由Eilenberg和Mac Lane发明的[范畴论]所取得的巨大进步使得逻辑和几何的原理变得清晰;这是通过发现逻辑和几何的共同形式来实现的,从而使两者之间的关系原理也是明确的。他们解决了2300年前亚里士多德解决的一个问题,当时亚里士多德在明确概念范畴方面取得了初步进展。在21世纪,他们的解决方案不仅适用于平面几何和中世纪三段论,而且适用于变换的无限维空间、数据的“空间”,以及每天被应用数千次的其他概念性工具。逻辑原理和几何原理的形式都是由分类学家发现的,它们依赖于空间之间的变换和思想内变换的“自然性”。

我一直在开发一个OCaml库,用于将计算上有用的代数结构表示为可组合的模块。1该库涉及大量模块级编程,并且仿照Haskell在其类型类中对这些结构的表示。我用来在OCaml模块中表示这些结构的技术已经被许多人演示和开发,我正在借鉴(和参考)他们的工作。我唯一的贡献就是花时间浏览了Haskell类型类树,并利用这些技术将结构移植到推荐的、测试的和打包的OCaml库中。

到目前为止,我已经实现了一个不平凡的通用结构核心,并且我已经在我的OCaml移植中使用了这些结构。我目前正在做图书馆出版前所需的收尾工作。

这个库的临时名称是ALG,是“代数”的缩写,是“代数结构”的缩写。然而,与一位经验丰富的OCaml贡献者进行了一次卓有成效的讨论,让我确信我应该注意Opam包库名称空间中的房地产价格。alg是一个相当昂贵的字符串:它很简短,在字母表的早期,而且足够唤起人们的回忆,它可能会被用来做很多其他的事情。相比之下,我正在开发的库只是试验性的2,我最初的实现很可能是完全不完美的3。我应该殖民如此珍贵的符号情节似乎并不合适。所以我一直在找一个更合适的名字。

为什么名字很重要?为什么不选择一些笨重而明确的短语,比如实验代数结构,或者是一个可爱的,含糊意义的混合体,就像猫头鹰一样?

陈词滥调的反问句“名字里有什么?”通常被用来诋毁名字,但它取自“罗密欧与朱丽叶”中的这段著名的话:

哦,罗密欧,罗密欧!为什么你是罗密欧?否认你的父亲,拒绝你的名字;或者,如果你不愿意,只要发誓我的爱,我就不再是卡布利特家的人了

“你的名字才是我的敌人,你虽然不是蒙塔哥人,但你是你自己。蒙太古是什么?”它既不属于人的手,也不属于脚,也不属于手臂,也不属于脸,也不属于人的其他部位。不,换个名字吧!名字里有什么?我们称玫瑰为其他名字的东西闻起来也一样香;因此,如果罗密欧没有罗密欧,他就会保留他没有那个头衔就应该拥有的那种可爱的完美。罗密欧,去掉你的名字吧,为了那个不属于你的名字,我愿意接受自己的一切。

我相信你的话:只要叫我一声爱,我就会受到新的洗礼;从今以后,我永远不会是罗密欧。

这段话并没有说明名字的无关紧要。相反,它提出了一个名字具有决定性重要性的场景。

罗密欧的名字将他标记为敌人,因为“曼塔格”将他标记为卡普莱特夫妇的敌人。有一句名言,“我们叫玫瑰/用其他任何名字闻起来都一样香”,清楚地宣称物体的感觉属性不受它们名字的影响(尽管我怀疑在玫瑰被称为“屎花”的世界里,它们可能闻起来有点像狗屎)。然而,整个交流都围绕着这样一个事实,即称谓词反映并帮助实现了现实中的重要结构。

名字的作用是加强社会秩序和指定归属感,这就是为什么朱丽叶把“拒绝你的父亲”和“拒绝他们的名字”连在一起,好像这两个行为是密不可分的。虽然名字不是人(或大多数其他东西)的本质属性(“那个名字不是你的一部分”),但它们仍然将人与他们自己的真实存在联系在一起。罗密欧和朱丽叶对家庭恩怨的反叛表明了自由选择的、二元的、浪漫的关系的独立价值。它甚至断言了这种个人二元结构比我们出生时所处的家庭和政治联系结构更有价值。根据朱丽叶的说法,这个人可以从他们继承的敌意的束缚中解脱出来,从他们的家庭(国家)的法西斯主义结构中解放出来,因为部落不是这个人的一部分:

“你的名字才是我的敌人,你虽然不是蒙塔哥人,但你是你自己。蒙太古是什么?”它既不属于人的手,也不属于脚,也不属于手臂,也不属于脸,也不属于人的其他部位。

然而,这个名字是这些法西斯主义结构的一部分,这就是为什么它似乎是通过放弃自己的名字--“啊,换个名字!”--而通过更名来重生“只要叫我爱,我就会受洗;/从今以后,我永远不会是罗密欧。”这就是为什么它会为这种解放买单。

思维通过语言4移动,并通过符号系统5找到自己的方式。这些系统暗示某些可能性,并排除其他可能性。因为名字的意义来自于它们在分化网络中的位置,命名在近邻思维的空间中设定了命名事物的位置。

名字里有什么?从命名的事物到关联思想和回忆网络中的一种情况的段落,它将人束缚在客观的、主观间的和纯粹主观的可能性结构中。

给一个新生儿(人、物或思想)取名几乎总是给它取别的名字。最初,没有任何事物或人可以给自己命名。作为规则,一个名字属于某个事物(“我的名字”、“你的名字”、“它的名字”)的一个前提条件是,有人首先“以”其他事物来“命名”它。根据亚里士多德在“诗学”中的定义,这就是隐喻的定义:“隐喻就是赋予该事物一个属于其他事物的名字”(1457b)。亚里士多德非常明确地指出,制造隐喻设定了命名事物与其命名的事物之间的关系,而且,这是一门不能教授的艺术:

到目前为止,最伟大的事情就是成为隐喻大师。这是不能从别人那里学到的东西;它也是天才的标志,因为一个好的比喻意味着对不同之处的相似之处有一种直观的感觉。

我在这里假设,只有通过识别结构对应才能认识到“异同中的相似之处”6.赋予A一个属于B的名字就是建立一种思维方式,这种方式有可能从考虑A的单一存在到B的存在(或广义到所有与该名称有关的事物)“传递思想”。这将A的思想带入了我们为B的思想的循环而形成的同一星座,因此命名是一种转换存在拓扑的言语行为,因为存在的连接性与思想的连接性是相互决定的,所以命名是一种言语行为,它转换了存在的拓扑结构,因为存在的连接性与思想的连接性是相互决定的。

当我们给一件东西取错名字时,我们就把它放错了有助于确定存在的复杂结构中。这会影响存在秩序的变形,并在事物的适当连接性上造成真正的破裂(至少在主体间性对现实的构成有贡献的情况下是这样)。做不好的比喻误导了思想,因为它实现了“不自然”的思想之间的关系,在某种意义上,它们破坏了“空间之间的转换和思维中的转换”的关系。

我不知道这是否会给读者(或我自己)带来任何洞察力,但它至少提供了一种解释,为什么很难命名,为什么它很重要。

这篇漫游记录了我在努力为这个新生的图书馆找到一个合适的名字时,浏览过的许多来源的痕迹。我的阅读使我浏览了哈斯克尔文件、维基百科文章、威廉·劳维尔的文章、赫尔曼·格拉斯曼的文章和关于赫尔曼·格拉斯曼的文章、我未完成的论文中的旧作(我在上面找到了亚里士多德的摘录)、无数的词典,我甚至遵循了莎士比亚最被高估的戏剧的陈词滥调。我设法说服自己,命名很重要:我相信,命名的隐喻性及其决定的情境性,将命名作为范畴论中追求和发展的形式技巧的诗意类比。共同关心的是发现(并改进)“自然性”,这种“自然性”允许存在(空间)的转变和思想的转变与和谐一致(我们可能希望和谐是最终的,而不是预先建立的)。

但是,这种漫无边际的方式能帮我想出一个合适的名字吗?是!。就在不久前,当我嘲笑自己花了多少时间在边缘地带挖掘,把可以说是无关紧要的联系串在一起,结果却空手而归时,我的想法以类似于以下顺序的方式缠绕着:

名字应该有助于将命名的事物置于其适当的关系中。在命名的行为中,我们帮助在思想结构中建立秩序,希望它们能以我们认为是好的和自然的方式反映和影响存在的结构。所以,想一想这个库到底是什么,它是如何工作的,它是做什么的。我们能给它起什么名字(首先必须属于其他东西的名字),才能帮助引导它与它所属的事物联系起来?

我让我的注意力漂浮在一些源代码上,然后-尤里卡-灵感袭来!我向您介绍ALG_STRUCTS。

乍一看,这个名字似乎非常明显:它只是“代数结构”的缩写!我注意到,在第一段中,Alg是这个短语的缩写-几个小时前的写作和学习。

仔细想想,你可能会意识到,它不仅是愚蠢的显而易见和过于字面上的,而且听起来也很长,很难听。它甚至看起来都不漂亮。

模块SOME_MODULE:SIG(*.类型声明和值规范.。*)end=struct(*.类型声明和值绑定.。*)结束。

这与80年代初开发的ML模块系统完全一致。ML模块系统的精神可以追溯到“给出理论的结构化描述”的努力,而要描述的理论是由Lawvere发展起来的“代数理论”。

在“标准ML的模块”中,提出了ML模块的所有最重要的方面,David McQueen写道:

这一建议是基于与Rod Burstallon为Hope[MAC81]中的模块进行的长期合作原型设计的成果,以及与Ravi Sethi和Gordon Plotkin[MAC82,MAC84]的理论研究,这些设计激发了他们的兴趣。Hope的模块设计反过来又受到Burstall和Goguen[BUR77]清晰规范语言的影响。

“[BUR77]”指的是Burstall和Goguen的论文“把理论放在一起制定规范”。第一行为:

理论的概念在数学中是一个松散的直观概念。应该有公理、推理规则和定理,但是表达它们的语言是可以选择的。…。我们选择了一个代数的理论概念,因为Lawvere(1963年)[参考了他1963年的论文Functorial Semantics of AlgebraicTheories(Lavili63_Funct_Seman_Algeb_Theor)]…。

一个理论是一个签名和一组方程,它们因等式和代换的自反性、传递性和对称性而闭合推理。

理论的解释是代数,其中代数是集合的集合,每一类一个集合,这些集合上的函数被分配给理论的每个算子。

sig指定签名,Burstall和Goguen将其定义为“一组排序名称和一组运算符符号,每个符号具有用于其参数的给定排序序列和用于其结果的排序序列(1047)”。这正是ML签名所指定的,尽管我们现在在他们说排序的地方说类型。

结构提供了一组方程式。方程的自反性、传递性和对称性由类型的λ演算处理。

我打算详细探讨这些连接的概念和含义,并已开始收集模块的注释。现在,我将把它留在这里:alg_structs的目标是提供一个计算有趣的代数结构库。它将这些结构表示为通过结构实现的模块和通过sigs指定的模块。ML模块系统的根源可以追溯到通过代数理论指定程序的努力。这个结构有点不平衡(也许是螺旋式上升?)。圆圈,我认为这是一个好兆头:名字中的双关语反映了类似结构的嵌套,我很乐意把它作为自然性的代理。

最后,这个名字是合适的,因为指定相对简单的代数结构所需的结构优势会让用户惊呼“所有这些该死的结构?!”下面是选项类型的半组实现的示例:

模块选项=struct模块make(S:s):s,类型为t=s.t Option.t=struct模块种子=结构类型t=s.t Option.t让op a b=匹配a,b与|None,b->;b|a,None->;a|某些a,某些b->;某些(S.op a b)End包括make(Seed)End。

[picado2007访谈]皮卡多,对F.William Lawvere的采访,“国际数学中心公报”,第12期,第23-27页(2007)。

亚里士多德,“亚里士多德全集:牛津修订本”,普林斯顿大学出版社(1984)。

[macqueen84_modul_ml]David MacQueen,Modules for Standard ML,NIL,in:The Procestions of the 1984 ACM Symferum on LISP and Functional Programming-LFP';84,由(1984)编辑的[macqueen84_moddul_ml][macqueen84_modul_ml]。

[Burstall:1977:ptt:1622943.1623045]Burstall&;Goguen,把理论结合起来制定规范,1045年至1058年,在:第五届国际人工智能联合会议论文集-第2卷中,由摩根·考夫曼出版公司编辑。(1977年)。

[Lawvere,代数理论的函数语义学],美国国家科学院学报,50(5),869-872(1963)。链接。多伊。

1在惯用的OCamland应用函数符和么半群中使用一元构造是非常常见的,尽管出现的频率较少。然而,我既没有遇到也没有发现任何已发布的OCaml库提供对诸如半群、可遍历/可折叠以及其他更奇异或更微妙的结构的支持。

2AFAIK,目前还没有任何证据表明代数结构的细粒度使用在OCaml中会像在Haskell中一样有效。

3我建立这个库的动机部分是为了提高我对代数结构的理解,这些代数结构被认为对计算很有用。

6有人可能会争辩说,识别出现在两个不同化合物中的相同或相似的性质并不是以结构对应为前提的。但我要回答的是,离散质量统一性的区分前提是一个结构操作,它清楚地表达了可能的质量的连续体。当然,这等同于我拒绝任何一种定性的原子主义。