R链

来宾发帖人克里斯汀·威廉姆斯

自获得博士学位以来,Mike Stay一直在做一些非常酷的事情。他一直在与格雷格·梅雷迪斯,研究了π演算和Abramsky一起,然后进行了有影响力的研究与设计在软件行业之前,一些伟大的想法将他引入了权力下放的新领域。他们和一支伟大的团队正在发展R链,基于第页反射的小时伊格尔-o个序π-演算ρ-演算.

他们在第一年取得了重大进展,并于4月17日至18日举行了RChain开发者大会科罗拉多州博尔德。就在五个月前,第一次会议只有少数人参加;现在,这已经收到了一百多封信。程序员,风险 资本家、区块链爱好者、软件、金融和数学专家:来自全球各地的无数观点加入了新互联网的曙光。我们就说,这需要接受很多。这个项目是真正的交易–理念革命性,语言有力,建筑优雅;雄心勃勃,技术娴熟的开发人员实际上正在实现这一目标。没有必要大肆宣传:你会听说RChain的。

文档 ,github ,建筑

以下是文档中的内容:

开源RChain项目正在构建一个分散的、经济的、抗审查的公共计算基础设施和区块链。它将托管和执行通常被称为“智能合约”的程序。它将是可信的、可扩展的、并发的,并具有证明共识和内容交付。

权力下放运动雄心勃勃,将为新的社会和经济互动提供极好的机会。权力下放还为权力集中的大型组织中偶尔发生的滥用权力和腐败提供了一种平衡。权力下放支持自决和个人自我组织的权利。当然,一个权力更加分散的世界的现实也将面临挑战和问题,例如如何满足国际法、公益和同情的需要。

我们钦佩比特币、以太坊和其他平台的令人敬畏的创新,这些创新极大地提升了分散系统的状态,并开创了加密货币和智能合约的新时代。然而,我们也看到了一些症状,即这些项目没有使用最佳的工程和正式模型来进行扩展和正确性,以支持关键任务解决方案。关于伸缩性和可靠性的持续争论是基础架构问题的症状。例如,对于在地球上进行的所有区块链交易,坚持明确的序列化处理顺序是一种可扩展的设计吗?

成为区块链解决方案工业规模效用RChain必须以Facebook的规模提供内容交付,并以Visa的速度支持交易。在对许多区块链项目的当前状态进行尽职调查后,在与其他区块链开发人员进行深入合作后,在了解他们各自的路线图后,我们得出结论,当前和近期的区块链架构无法满足这些要求。2016年年中,我们决心构建一个更好的区块链架构。

与区块链行业一起,我们仍然处于这场去中心化运动的黎明。现在是时候放下坚实的建筑基础。对于那些认同这一雄心勃勃愿景的人来说,未来的旅程既富有挑战性,又值得一试,本文件总结了这一愿景以及我们如何努力实现这一愿景。

我们首先承认以下最低要求:

  • 动态、响应迅速且可证明正确的智能合约。
  • 同时执行独立智能合约。
  • 数据分离可减少其他独立令牌和智能合约的不必要数据复制。
  • 动态响应的点对点通信。
  • 计算非扩展共识/验证协议。

构建高质量的软件具有挑战性。更容易构建“聪明”的软件;然而,最终生成的软件往往质量很差,充满了错误,难以维护,也难以进化。继承和使用这样的软件对开发团队来说可能很可怕,更不用说他们的客户了。在构建一个支持任务关键型经济的开放源码系统时,我们拒绝最低限度的成功思维,而支持端到端正确性.

为了实现上述要求,我们的设计方法致力于:

  • 假设细粒度并发和动态网络拓扑的计算模型。
  • 一种可组合的动态资源寻址方案。
  • 函数式编程范式,因为它更自然地适应分布式和并行处理。
  • 利用模型检查和定理证明的正式验证的、正确构造的协议。
  • 内涵和组合原则。

RChain领先于业界几光年。为什么?它坚持通过构造更正具有数学的深度和严谨性。多年来,迈克和格雷格一直在发展原创想法用于分布式计算:特别是,作为分配定律的逻辑是一种“从计算演算的形式表示中导出空间行为类型系统的算法”。这是一种强大的集成方法操作语义翻译成一种语言,并证明可靠性具有单一的自然转化;它还提供了一种极具表现力的查询语言,您可以用它搜索整个世界,找到“做x的代码”。迈克在更高范畴理论方面的深厚背景使格雷格的思想得以形式化,格雷格在几十年来对计算世界进行了深入而全面的思考。在所有这些中,有一个概念是RChain的心脏和脉搏,它将系统统一为理性整体:ρ-微积分.

那么什么是好主意?首先,一些历史:早在80年代末,格雷格就开发了一种称为“4C”的计算模型分类:

完整性,
成分性,
(好主意)
复杂性、和
并发.

他发现没有一个同时具备这四个特征,并预测了其中一个的存在。几年后,米尔纳发明了π演算从那以后,它一直统治着这个网络计算的自然语言。它提出了一种完全不同的思维方式:π演算从根本上来说是并发的,而不是表示单个机器的顺序指令-过程或代理人沟通姓名或频道,计算通过相互作用个进程。语言简单但功能强大;它与博弈语义线性逻辑,已成为系统工程生物计算:请参阅用于区块链编程的移动流程结石.


这里是基本的语法变量x、y是名称,P、Q是过程:

P、 问:=0 |(νx)P |x?个?(y) ●●●●。P(P) |x!(y) 。P(P) |P|Q公司

(什么都不做|创建新x;在x上运行P|receive并绑定到y;在x上运行P |发送值y;运行P |并行运行P和Q)

计算引擎是与lambda演算的beta约简类似的基本约简,它是通信规则:

通信:x!(y) ●●●●。P|x?(z) ●●●●。 →P|Q[年/年]

(给定沿同一通道的并行输出和输入过程,值从输出传输到输入,并替换连续过程中出现的所有输入变量)

定义进程演算必须指定结构同余:这些表示进程之间的等价性,例如,({P},|,0)形成交换幺半群。


这个π演算在最基本的层面上,将计算改革为合作的活动。为什么这很重要?要有一个永久自由的互联网,我们必须能够在不依赖中央集权的情况下支持它。这是最简单的一点,但有许多深层次的原因,我还没有足够的知识来表达。这都是关于开放这是应用范畴理论的特点:历史上,我们发展了相互孤立、世界孤立的理论和实践,不得不虚构它们之间的相互联系和合作特别的; 这让我们不必要地与不足的系统作斗争,并限制了我们的思想和行动。

当然,在商店里做出重大改变的方式一定比通过冯·诺依曼瓶颈来回推送大量单词的方式要简单得多。这根管子不仅是一个问题数据流量的字面瓶颈,更重要的是,它是一个智力瓶颈,使我们一直被束缚在逐字逐句的思考中,而不是鼓励我们从手头任务的更大概念单元的角度思考。因此,编程基本上是规划和详细说明通过冯·诺依曼瓶颈的巨大文字流量,而这些流量中的大部分与重要数据本身无关,而是与在何处找到数据有关。-约翰·巴克斯,1977年ACM图灵奖

对这类问题已经有了各种缓解措施,但认知局限性仍然存在,需要彻底更新;这个π演算完全重新构想了社会中计算的本质,并开启了巨大的可能性。我们可以开始把许多相互交织的计算层想象成一个连贯的、流动的整体。虽然我在会议期间的许多会谈中都没有深入了解,但我开始意识到这确实是一次综合的创新:RChain几乎改革了计算的各个方面,从最高抽象一直到金属。如前所述,聚合架构是形式演算作为核心指导原则。有人担心,由于ρ-演算与传统语言如此不同,可能会有人抵制采用;但我们的时代是一个范式转变,呼唤一种新的思维方式,我们必须适应。

那么我们为什么要使用反射高阶π演算,ρ演算?因为传统π演算只有一个问题:它预设了原子名的可数无穷集合。这些不仅难以产生和管理,而且缺乏结构是一种巨大的浪费。在这方面,π演算是不完整的,直到Greg意识到可以用反射,一种强大的自我参照形式:

代码←→数据

咒语是名称是引用的进程; 这一理念渗透并指导了RChain的设计。无需导入无限多不透明、无意义的符号——代码本身就是清晰、有意义的语法。如果存在引用和取消引用(或“引用和取消引”)的内在方法,则可以将代码转换为数据,作为消息发送,然后再转换为代码;被称为“代码移动性”的人可以像电子邮件一样轻松地交流大型程序。这允许元编程在工业层面上,不仅人们编写程序,程序也编写程序。这对于创建强健的虚拟基础架构至关重要。

那么,如何使π演算具有反射性呢?通过求解递归方程的最小不动点,该方程按名称将过程参数化:

P[x]=0|x?(x) ●●●●。P[x]|x!(P[x])|P[x]|P[x]|@P[x]|*x

RP公司 =P【RP】

这让人想起Y组合子通过给定任何函数的不动点Yf=f(Yf)来启用递归。语法的最后两个术语是参考取消引用将代码转换为数据,将数据转换为代码。注意,我们没有为输出包含一个延续:ρ-演算是异步,意味着发送者没有得到消息已被接收的确认;这对于有效的并行计算很重要,对应于极化线性逻辑。我们采用名称是输出,进程是输入的约定。完成正式ρ-演算语法的最后两个修改是多输入图案匹配:


P、 Q:=0空进程

|对于(p1←x1,…,pn←xn)。P输入保护过程

|x!(@Q)输出名称

|*x取消引用,评估代码

|P|Q并行组合

x、 p:=@p名称或引用的进程

(每个“pi”都是一个“模式”或公式,用于收集频道“xi”上的术语-这非常有用和通用,并支持整个系统的强大功能)


很简单。当然,这还不是一种真正的编程语言,尽管它比纯λ-演算更有用。罗朗RChain的实际语言增加了一些基本功能:

ρ-演算+变量+有用的基本项+新名称构造+算术+模式匹配=Rholang

这里是规范,语法和语义、和可视化; e(电子)权智代码和示例在GitHub中学习合同设计在文档中,您甚至可以尝试对rchain.云! 对于那些不喜欢单击所有这些链接的人,让我们来看一个具体的示例合同Rholang中的基本程序:具有持久状态、关联代码和关联地址的进程。这是一个单元格,它存储一个值,直到被访问或更新:


合同单元格(获取、设置、状态)={
选择{
案例rtn<-get;v<-状态=>{
rtn!(*v)|状态!(*v)|单元格(获取、设置、状态)}
case newValue<-set;v<-状态=>{
状态!(*newValue)|单元格(获取、设置、状态)}

}}


参数是合同沟通的渠道。单元格从两种可能性中进行选择:要么正在访问,即有数据(返回通道)要接收得到然后输出到rtn并维护其状态和调用;或正在更新,即有数据(新值)要接收设置,然后它更新状态并再次调用自身。这表明了语言的本体如何实现自然递归,从而实现持久存储:状态是Cell“自言自语”的方式——因为Rholang的顺序方面是功能性的,一个“循环”数据以保持。存储层使用了类似的思想;语义可能与追踪单体范畴.

奇怪的是,ρ-演算的范畴语义被证明是难以捉摸的。一般认为λ:顺序:π:并发,后者确实是基本的,但Curry-Howard-Lanbek同构虽然已经取得了部分成功,但尚未规范化推广,包括函数范畴指称语义、线性逻辑和会话类型尽管ρ-演算具有强大的力量和普遍性,但它在数学中仍然有点神秘:这一事实应该引起任何关心逻辑、类型和类别作为抽象思维基础的人的兴趣。

现在,实际的系统建筑学由五层交织而成(文档中有更好的解释):


保管部:基于特殊K–“一种网络模式语言”。该层通过基本的d日数据库和查询-如果您没有找到要查找的内容,请将您本应执行的操作留在原处,当它到达时,该过程将继续。格雷格将这个想法描述为排中律.

[频道、模式、数据、延续]

RChain对资源–计算、内存、存储和网络,并线性计算它们的生产和消费。

执行:Rho虚拟机实例是ρ-演算的上下文减少存储元素的数量。整个状态区块链的一个重要术语是Rholang,它由一个事务更新:接收调用一个更改关键值的过程,并且必须通过协商一致来验证差异。键永久维护状态转换的整个历史记录。虽然目前基于Java VM,但它将以本机方式托管。

命名空间:一组渠道,即资源,由逻辑用于访问和权威主要意义在于可扩展性–用户不需要处理整个链,只需要处理相关的名称空间。”命名空间定义可以控制空间中发生的交互,例如,通过指定:接受的地址、命名空间或行为类型;最大或最小数据大小;或投入产出结构。”它们处理两个基本“竞争条件”的不确定性,即资源争夺:

x!(@Q1)|对于(ptrn<-x){P}|x!(第2季度)

对于(ptrn<-x){P1}|x!(@Q)|表示(ptrn<-x){P2}

与其他区块链的平面公钥相比,域与域名服务器并通过合成树结构对其进行扩展。作为命名通道的每个节点本身就是一个名称空间,因此可以通过精确控制归纳地建立定义。

共识:验证对一个big-Rholang-term状态的部分更改顺序;块结构应该保持为有向非循环图。算法是权益证明–在名称空间中验证的能力与一个人持有的“股份”有关。Greg通过纠结以及复杂的CASPER协议自然工作带RChain.

合同:“RChain合同是一个规范、行为良好且正式验证与其他此类程序交互的程序。”(K框架) ; (DAO攻击)“行为类型是一个对象的属性,它将对象绑定到一系列离散的操作模式。行为类型不仅约束输入和输出的结构,而且约束在不同条件下通信和(可能)并发过程之间允许的输入和输出顺序… 罗朗行为类型系统将使用模态逻辑运算符对术语进行迭代修饰,模态逻辑运算符是关于这些术语行为的命题。最终,数据信息流、资源访问等属性将具体化到一个可以在编译时检查的类型系统中。Rholang将支持的行为类型系统使得可以根据合同集合的代码是如何形成的以及它的行为来评估合同集合。因此,Rholang合同将语义提升到了类型级别的有利位置,在这里我们能够确定整个协议如何安全地进行接口。”(钢包)

那么你可以在RChain上构建什么呢?什么都行。

分散的应用程序:身份、声誉、代币、时间戳、金融服务、内容交付、交换、社交网络、市场、(分散自治)组织、游戏、预言(以太坊dApps),……新形式的代码尚待想象。它不仅仅是一个更好的互联网:RChain是一个理性全球社会的潜在抽象基础。该系统是一个普遍原则设计的极简主义框架;这是一幅画布,我们可以用它来探索世界应该如何真正运转。如果我们是开放的,有思想的,如果我们足够关心,我们可以学会做正确的事情。

该项目的规模不得而知,广泛采用可能是RChain面临的最大挑战之一。诚然,它是新的;但教育并不容易。对于一个认为(技术)进步是逐步提高规格或增加功能的公众心态来说,这是一个太大的改革;这是概念发展,对许多人来说是一个陌生的概念。这就是为什么这个规模较小但不断增长的社区至关重要。这篇文章什么都不是;我显然没有资格点击链接,阅读报纸,观看视频。雄心壮志的规模、洞察力的深度、设计的清晰性、理论与实践的统一——这是值得一看的。这是真的。水银将是完成12月。现在就发生了可以成为其中的一部分。学习,传播信息。参与进来; 加入讨论,甚至参与开发——RChain网站提供了您所需的所有资源。

世界上40%的人口生活在距离海洋100公里的范围内。格雷格指出,如果我们甚至无法处理今天的难民危机,那么当洪水上涨时,可能会发生什么?至少,我们迫切需要更好的大规模协调系统。我们会进入下一个千年吗?我们可以——只是意志的问题。

谢谢你的阅读。你太棒了。

37对R链

  1. 沃尔夫冈 说:

    也许我太挑剔了,但如果数学家和更多的计算机科学家能够停下来发明一种杂乱的新语言,这将大大有助于将一个新概念传播给更多的人,而不是通常的少数人。当然,人们可以将其归咎于革命性的性格,但这些事情与鲜为人知的概念联系得很少,而且充满了技术性的空谈,因此从一开始就钻研这个主题是一件持续的痛苦。为什么?对于专注于通信技术的人们来说,真的没有更好的方式来与人类同胞交流吗?

    • 新思想需要新语言。函数、夸克、概率分布、积分、加法……我们需要这些词,因为它们描述了以前没有词描述的东西。在你学会这些词所描述的新思想之前,这些词都没有意义。这需要真正的工作。

      尽管如此,我认为很重要的一点是要努力把事情解释清楚,至少如果它们足够重要,值得解释的话。这也需要真正的工作。

      作为其中的一部分,人们必须努力减少在任何交流中使用的生词数量,并清楚地解释每一个。很少有科学家和数学家这样做。他们通常对清晰沟通的挑战不感兴趣。

      当然,什么是“新词”取决于观众。但重要的是要记住,选择使用大量词汇意味着选择与少数观众交流。如果一个人自由地使用他所知道的所有术语,他最终会自言自语。

      • 是的,同意。谢谢你的关心,沃尔夫冈。清晰的沟通对于新想法的有效性至关重要。正如我所说,我没有资格解释所有这些,而这篇文章主要只是一个链接库。

        RChain社区规模虽小,但在不断壮大,有许多人正在一起学习所有这些新知识。如果你感兴趣,请询问任何在线讨论,例如“不和”。

        目前,主要是核心人员对RChain有全面的了解;而不是为了任何精英主义或懒惰&这只是许多大概念首次在实践中汇聚在一起。

        公众并不知道上个世纪在概念上取得的巨大进步,但最大的创新将基于最大的想法。很难弥合这一不断扩大的差距,唯一的长期解决方案是改善教育。

        在那之前,我们有像贝兹博士这样的公共教育工作者,他参与了最高的抽象,但完全反对技术胡言乱语,只专注于帮助我们一起学习。我希望你能从阅读他的博客中获益,就像很多人一样。

  2. 唾沫37 说:

    你吹捧rchain的复杂性模型。它在什么地方有记录吗?

    与跟踪单体范畴的联系很有趣。有更多信息吗?

    关于ρ-lang的不动点及其语义。将其视为一个受保护的固定点是否方便(https://doi.org/10.2168/LMCS-8(4:1)2012) ? 通过树的拓扑进行保护递归,为进行综合领域理论提供了一个方便的模型。

    • 很好的问题。追踪的单体在文档中与一篇名为“循环共享的递归”的论文联系在一起,所以我认为这是它们的理论基础。

      至于复杂性,我会问格雷格或迈克;据我所知,它不在主文档中,但可能位于GitHub上的某个位置。

      关于定点,我不太确定什么是“保护”递归,但它似乎很相关。上面,RP是由rho演算语法定义的区域方程的解。迈克或格雷格的另一个问题是,他们有时会阅读博客,所以我相信他们对这些评论会有很大帮助。谢谢您!

  3. 丹尼尔·西卡拉 说:

    很好的结束。我想更好地理解pi-calculus的语义。快速上下文:当我教学生如何编写函数时,我喜欢用一个类比来编写穿袜子的过程和穿鞋子的过程。这很好,因为它突出了交换性是如何失败的。你能想出一个类似的比喻来解释你最喜欢的微积分术语吗?我认为这会有帮助。

    • 这将是非常好的,也许是迈向pi-calculus的范畴语义的一步!

      我一直觉得pi-calculus很难理解,因为它所描述的世界并不是我所熟悉的世界。它是一个代理创建频道、通过这些频道发送消息、接收消息并根据这些频道采取行动的世界。迈克试图用邮箱向我解释。但它还没有卡住。

      维基百科给出了这样的解释:


      像素的核心是“名称”的概念。微积分的简单性在于名字作为“沟通渠道”和“变量”的双重作用。

      微积分中可用的过程结构如下:
      •“并发性”,编写P\mid Q公司,其中P(P)问是两个并发执行的进程或线程。

      •“沟通”,其中

      •“输入前缀”c\左(x\右)。P(P)是等待在名为的通信通道上发送消息的进程c(c)在作为P(P),将收到的名称绑定到名称x个。通常,此模型对期望从网络或标签进行通信的进程进行建模c(c)只能由转到c操作。

      •“输出前缀”\上划线{c}范围。P(P)描述了名称年在通道上发射c(c)继续之前P(P)通常,此模型要么在网络上发送消息,要么转到c操作。

      •“复制”,写入!\,P(P),这可能被视为一个始终可以创建新副本的过程P(P)。通常,此模型为网络服务或标签建模c(c)等待任意数量的转到c操作。

      •“创建新名称”,书面形式\左(右x)P,可以看作是分配新常量的过程x个在内部P(P)像素的常数仅由其名称定义,始终是通信信道。在流程中创建新名称也称为“限制”。

      •零流程,书面形式0是一个执行已完成且已停止的进程。


      我的眼睛在解释这个问题的过程中往往会感到茫然,因为它涉及到太多未定义的术语,这些术语都是根据它们之间的相互作用来定义的。这些注释本身并不是形式主义的一部分,但被认为是有用的,比如“像素的常数仅由其名称定义,始终是沟通渠道”。这些注释主要使我们很难分辨什么是真正的形式主义,什么是旁注。

      然而,我认为我们的研究小组应该学习这些东西,有了基督徒的支持,我敢打赌我们一定能做到!

      • 好主意,丹尼尔。思考π演算的类比是有趣且值得的。(参见Milner的《多元圆周率微积分:教程》)基本本体是有独立的代理通过通道发送和接收数据。一般来说,这很容易想象,但我们需要更具体的描述。

        我认为代理基本上是一个并行的自动机社区,而频道则是带有访问规则的无线电频率。代理对这些频道进行调谐以进行通话或收听,只要这两种情况都发生在频道上,就会进行通信。

        命令:x!(y) ●●●●。P|x?(z) 。Q→P | Q[y/z]

        两者都会忘记频道,“演讲者”会忘记数据,而“听众”会使用它接收到的信息,将其插入“行动计划”中的指定漏洞。

        这只是基本的当地活动。随着这一点的深入,它变得更加微妙。数据是什么,行动计划是什么?只是更多类型的潜在沟通。代理商和频道只是一个更大项目的一部分,整个故事发生在全球。因此,为了真正了解正在发生的事情,我们需要一个足够强大的类比来跨越这两个层面。

        我还没有找到这样的解释,如果有这样的解释的话,对每个人都会有很大帮助。如果没有,那就取决于我们如何更好地解释它。期待听到人们对如何理解这个勇敢的计算新世界的想法。

      • 米科·基维兰塔 说:

        圆周率形式让我想起了LabView编程语言。尽管该语言的目标是控制实验室硬件,但我很久以前就将其用于数值模拟,因为在8086处理器内存被冗长地分割成16位可寻址块时,该语言提供了对32位地址空间的透明访问。

        然而,和其他人一样,我很难掌握形式主义。

  4. 所以,我认为我在概念上喜欢这一点,尽管我很难看到它实际上有多深远。

    对我来说,问题已经开始于正确掌握π演算。我发现对它的大多数解释都相当模糊。

    尽管如此,正如我回忆的那样,关于ρ演算的论文相对来说是透明的。不过我读它已经有一段时间了。(很肯定那是在你上次提出这个项目后不久,除非我在其间错过了一些更新)所以我必须再读一遍,以提醒我它是如何工作的。

    我也曾尝试将其构建成球状,但最终放弃了,得出结论,它需要无限回归。

    我想问题可能出在打字上?我认为非类型化版本有效,但一旦类型发挥作用,我就很难在没有无限回归的情况下在球状体中构造任意函数类型。比如,a->b->c有效。我可以简单地通过直接合成,将a->b和b->c中的链(或任意这样的链)拼合在一起。但是(a->b)->c和类似的情况,其中函数需要一个函数作为输入,以获取由值引起的问题。据我回忆,这是有效的,因为globular中的函数会比正常值高出一个级别(当然,除非这个值恰好也是一个函数),而我无法让它们匹配,这样globular就很开心了。如果我要跨过这个障碍,我很确定我可以在球状中实现整个rho演算来玩弄它,并更好地理解它是如何与打字一起工作的。

    • 这太棒了!一旦你在Globular中使用它,我们希望看到结果。(每个人都应该看看globar.science,这是一个用字符串图构造证明的很好的在线工具)Baez博士和我对探索rho-calculus的高维重写非常感兴趣。

      对不起,但我不确定我是否确切地理解了无限回归是如何产生的。老实说,我没有想过手工构建类型系统,但我想了解这个过程。你能描述一下到目前为止你在环球影业做了什么吗?谢谢您。

      • 因此,为了明确起见,这是我试图在Globular中构建的论文:https://arxiv.org/abs/1704.03080f–具体来说,我尝试构建第7.2节中的Rho Combinator——如第9页所示的W-sorted。

        这甚至不是特别困难,尽管它相当乏味。特别是,因为没有多态性(至少我认为这就是我想要的)。

        我成功地构建了所有东西,除了带有类型的“for”

        北->(北->西)->西

        它以N和从N到W的函数作为输入来产生W。

        我的问题是,我现在设置它的方式是,N和W的维数比N->W低。我不能(据我所知)让它起作用,除非使(N->W)在与N和W相同的级别上成为显式类型。但是,(N->W),(再一次,据我所见),不能等同于通常的高维N->W。

        我必须补充一点,我在这方面非常业余。我的方法基本上是一直玩到一切正常为止。当时我确实花了很多时间,试图让它发挥作用。

        我不得不再次考虑这一点,但我的经历如下:

        最发达的,但我认为我实际上比必要的更高一个维度?我已经记不清了:

        http://globlar.science/1805.002

        我很确定我确实有更多,但我可能没有在沮丧中保存一些东西。这仅仅是每个对象的定义。证明0|P=P和P|Q=Q|P。正如您所看到的,由于缺乏建模能力,“for”完全缺失。

        我现在没时间了,但稍后我会解释更多。也许到那时你能弄清楚,但如果不能,那也没什么大不了的。没有任何解释就理解(我认为)有点费解。

      • 好的,我会尽可能深入地讨论。这可能意味着,我在告诉你一些你已经知道的东西。我只是不确定什么是重要的还是不重要的。此外,我自己的理解在这一点上是相当肤浅的,所以我可能会提出一些让我感到困惑的东西,但对你来说却是显而易见的。如果发生这种情况,我很抱歉。这也不是一个完美的项目,很快就会消失。一切都很混乱。请容忍我。

        因此,让我以我遇到的问题和我做出的设计决策作为前言:

        我记得我经常摆弄颜色,但因为我重复了几次(在新的尝试中让“for”工作),我最终不再那么麻烦了。如果你继续尽职尽责,合理地给所有东西重新着色,而不是依赖默认颜色,那么许多对象,尤其是高阶对象,将变得更容易识别。

        最大的问题,也是一个真正的阻碍,是上述无法表示“for”或任何需要函数类型作为另一个函数类型的输入的东西。稍后我会进一步讨论这个问题。

        另一个原因是缺乏类型多态性(我真的希望我正确地使用了这个短语),这要求我要么通过SKI组合符欺骗自己(在非类型化设置中这是没有问题的),要么构建一个不切实际的变体数量,每个实际类型组合一个。(我现在不确定,完全覆盖所需的集合实际上是否是有限的。我想这将取决于“for”的最终表示方式。)

        然后是方便与严格的问题。我可以通过依赖可逆性来最小化我需要的单个组件的数量。这也使得使用通常是非法的快捷方式构建某些对象变得更容易。为了方便起见,没关系。但你必须小心,不要毫无根据地使用这些选项(例如在证明过程中),这可能会导致对象没有实际意义主要是为了让事情轻巧灵活,我选择了这样做。我的1-细胞都是可逆的,更高的细胞更容易构建,但也有可能是胡说八道。在最终版本中,一旦所有概念都按预期工作,您可能会想手工制作这些不同的帽子和杯子以及其他东西,以避免滥用。通过结构和所有爵士乐纠正。
        尽管其中一件事是,这些1-细胞的可逆性实际上使任意复制和删除成为可能,这两个都是S和K组合子所需要的。这是我可以通过欺骗来克服多态性缺乏的一种方法。(我实际上还没有这么做。)

        最后,还有一个维度的问题,以及Global渲染事物的方式:

        基本上,如果我添加一些规则,比如手动交叉字符串的能力,我可以在二维中实现。
        我可以让它在三维空间中更容易实现,给我提供了我需要的大多数规则,但我仍然需要手动添加规则,字符串可以相互传递。(“交换”=“交换反向”)
        或者我可以在4个维度中实现,并且已经免费拥有所有这些规则。但代价是Globular达到了其渲染和用户界面的极限。

        在这张照片中,我选择了最干净、最短的四维版本证据(应用这些手动规则不需要太多的步骤),但为了让它做你想做的事,需要对界面和心理体操做很多额外的处理,甚至想知道你想要它做什么。(我很确定我已经有了3个单元版本,即使做了更多的证明。交换翻转规则实际上并不难手动添加,而且,至少对于简单的结构来说,它也不会带来太多混乱,所以与此相比,这可能是一个更好的权衡。)

        如果这些问题得到解决/改进,Globular实际上可以非常出色地进行此类视觉设计/手持设备系统。(假设我——或者任何人——找到了绕过第一个问题的方法,这可能不是一个球形问题,而是我缺乏想象力。)

        有了这些,让我们一步一步地,在几个投影中,来看看最简单的证明。
        这将是(P|0)=P。

        因此,由于我的对象最多是4个单元格,因此,证明是5个单元格。
        实际上最有趣的简化投影级别是投影级别2:

        切片0:https://imgur.com/xIOp6md

        这只是说“如果你有W类型的东西(红色字符串)放在环境中(浅蓝色环境),你可以对它应用(P|0)=P(浅灰色点),得到另一个W类型的东西。”
        顺便说一句,它是从下到上读的。输入上升为输出。

        投影级别1、切片(0,0)和切片(0,1):https://imgur.com/t90SV5T

        同样的想法,但这次是作为一个横截面。您从环境中的一个字符串开始,到环境中的字符串结束。

        这告诉我们的很少。但投影级别2,切片1实际上包含了定理的核心:

        https://imgur.com/K8c8O8P网址

        您有两条红色字符串,其中一条似乎从灰色区域开始,另一条从环境的底部开始。

        首先,灰色区域实际上是这里隐藏的四维内部的边界。所以说真的,浅灰色的圆点在的前面该边界嵌入到蓝色环境中,就像其他字符串一样。

        在投影级别1,切片(1,2)中,您可以从另一侧看到它:
        https://imgur.com/BZ95zYM网站
        此视图中的灰色区域实际上位于右侧。这里的白色区域是仍然不是在里面。
        要查看那个,我们必须一直到投影级别0。这就是Global渲染事物的方式成为问题的地方:
        切片(1,2,2),当悬停更改为切片(1、2、3)时:
        https://imgur.com/B7Wvm6B

        我们终于看到了“|”的内部,之前的白色区域现在位于右侧。它是粉红色的。
        粉色区域是指输入为W,输出为W的区域,当鼠标悬停在其中一个区域上时,这一点非常有用:它们被称为“W->W”。
        里面还有一个栗色的边界。该边界称为“W->W->W”,用于将两个粉红色区域粘合在一起。总之,它们实际上是“W->W->W”类型,就像“|”所要求的那样。
        事实上,通过这种方式,我可以将任何东西链接在一起,以构造任意类型,如N->W->W->N等。
        但是,尽管我尽了最大努力,我还是无法扩展它以允许“for”所需的类型。

        我想到的概念基本上有点像肥皂泡:每个输入都是泡泡的左侧,每个输出都是泡泡泡的右侧。如果您应用一个输入,您实际上会“弹出”最左侧的气泡,从而可以访问下一个气泡。(输入总是从左侧进行。)

        我试着允许泡泡的内部气泡,而不是只触摸“从左到右”,如该片段所示,以便将函数类型建模为输入,但我从未进行过类型检查。输出结果总是错误的。我需要一些技巧来满足球状体的要求,以便正确构建它。

        最后,这里还有一个问题:注意缺少红点。这就是我发布过渡片的原因。黄色矩形实际上显示了如何将0进程添加到Slice(1,2,2)和Slice(1,2,3)之间。
        在这个投影水平上,实际的像素-名称过程是完全看不见的。
        但事实上,这个矩形
        a) 出现在蓝色环境中,并且
        b) 位于最左侧气泡的左侧,
        这意味着,在所有较高的切片中,0进程都位于“”的前面,即它的第一个输入所在的位置。
        由于0进程已经位于正确的位置,因此可以立即消除它,覆盖“|”的一个分支。

        好的,这涵盖了所有细节。现在,就实际证据而言:
        返回投影级别2,切片1。

        从底部开始(链接提供投影级别1切片(1,n)的相应切片)

        0)任意进程P进入环境。https://imgur.com/t90SV5T
        1) 引入“|”,由两个气泡表示https://imgur.com/KY7ZTNe网站
        2) 引入0进程(已经在输入位置,在前面气泡的“前面”)https://imgur.com/BZ95zYM网站
        3) 将0进程应用于“|”的输入分支,同时消除这两个分支。我们只剩下一个气泡,P。https://imgur.com/hyl2Q6W

        0为W类型,“|”为W->W->W类型。
        将0应用于“|”将产生类型W->W的其余部分,因此只剩下该类型的单个气泡,没有W字符串。

        4)网址:https://imgur.com/6i8f6XA
        5) 将P移动到可接受为输入的位置。https://imgur.com/Se1tsQY网站

        球窝总是需要大量的人工推挤,从计算上来说,这实际上并没有什么意义。只有当您有准确的毕竟是比赛。我必须将进程放入这些特定位置的原因是,我以这种方式定义了应用程序操作。。

        6) 将P应用于“|”的其余部分,只留下W类型的内容。https://imgur.com/t90SV5T

        从技术上讲,我想我并没有真正要求输出W与输入W相同。我不确定是否有一种好的方法可以从球状体内部证明/要求这一点。所有这些都是一种无意义的、咖喱式的风格,我想术语应该是这样的。-我从不需要说出我需要的任何流程。它们只是作为环境输入的匿名字符串。识别整个特定进程的唯一方法是遵循字符串。

        我还没有在这里实现S、K、I组合词,部分原因是前面提到的缺乏多态性。我需要很多。但“Copy”和“Eat”单元格基本上是它的开始,分别对应于S和K组合符的关键子操作。
        为任何给定的类型组合实现它们都非常简单。但也很乏味。
        我过去已经在这里实现了(非类型化)SKI演算:http://globlar.science/11612.015v3
        给你一个主意,在那里需要做什么。看看那里的5格,看看模仿鸟是如何以无限循环结束的。
        转到投影级别1,切片(1,0),然后一步一步地转到切片(1,45),快速了解其工作原理。
        为了更好地了解为什么?它起作用了,请查看各种“应用”规则(始终在投影级别1上)。
        从概念上来说远的比我的rho复合器更直接。
        还有一个大大扩展的版本http://globlar.science/1805.003其中我添加了大量的组合子。我以前从未出版过,所以这可能意味着它还没有完成。例如,虽然Y组合符有效。那有点有趣。

        基本上,我对Rho组合子的处理方式大致相同。一旦一切正常,你就会得到同样的字符串结构。只是有一堆函数类型的气泡。

        因此,总结一下:
        我有什么(在此版本中):
        *单位定律(虽然不正确,因为我用了C而不是0。原则上很容易修复。)
        *交换性

        我本可以拥有的(但我从未抽出时间):
        *联想性(应该很容易)
        *ϵ评估

        我本可以拥有什么(但如果没有多态性,那就一团糟):
        *σS作用
        *κK作用
        *I作用
        *附录中的大多数计算。

        我没有什么(除非我有一个好主意):
        *ξ通信
        *附录中的第二个证明。
        (两者都包含“for”)

      • 非常感谢您的详细解释。你不是太明显了;我和其他许多人还不能流利地使用Global。所以,我将从一些基本问题开始。

        为什么N(名称)和W(过程)是3个单元?低维细胞建立了什么?它们是如何在4个细胞中使用的?

        谢谢;我们非常感谢您的演示。

        • 约翰的解释一针见血。请也阅读我对他的回答!

          喂,你能给我一些用Rho组合子写出的非平凡但不太长的程序吗?

          我想,如果你看到这样的东西,你已经知道它是如何一步一步地减少的,就像我在Globular中实现的那样,你会更容易掌握它的诀窍。

          (请注意,从技术上讲,我应该能够代表任何然而,Rho组合子允许您编写的程序,因为我必须手动切换导线,这实际上可能比手动写下解慢得多。这就是为什么它需要简单。)

      • 克里斯蒂安写道:

        为什么N(名称)和W(过程)是3个单元?

        我的模糊猜测是这样的。球状涉及n个类别。多亏了n类周期表,对称单体范畴C实际上是一个4范畴,即具有

        •一个0电池
        •一个单电池
        •一个2单元
        •C对象为3个单元格
        •C的形态为4个细胞。

        因此,在对称单体范畴中看起来像“物体”的东西需要是3个细胞,而看起来像“形态”的东西则需要是4个细胞,这是有道理的。然后是形态之间的方程式,或者更准确地说证明这些方程中,将有5个单元。克拉姆在下面写道:

        因此,证明是5个单元。

        我们需要一个4类,原因与计算时间时我们的宇宙是4维的完全相同。你需要两个维度的空间才能有足够的空间来切换两个东西,但3个维度的物体是顺时针还是逆时针移动并不重要;那么你需要时间的第四维度。换句话说,只有当你有4个或更多的时空维度时,粒子才能交换位置,而不会使路径变得混乱。

        所有这些都由n个范畴的周期表从代数上加以解释和推广。詹姆斯·多兰(James Dolan)和我在我写过的最重要的论文中提出了这一点,以及协同论和纠结假说:

        •约翰·贝兹和詹姆斯·多兰,高维代数与拓扑量子场论,熟练工人。数学。物理学。 36(1995), 6073–6105.

        • 这个解释完全正确,而且(毫不奇怪)比我所能说的要好得多。

          也就是说,所有这些都可以在3个单元格中完成,只要添加一条规则,即导线交叉可以颠倒顺序。

          此外,我只是再次思考了一下(之前,我只是试图解释球状训练中实际发生的事情,而不是重新考虑我的决定),我试着记住,为什么我首先要做这些泡沫概念的事情。

          据我所知(已经有几个月了),实际上我只是在试图解决问题时才这么做的,这显然是由此解决,即表示形式(a->b)->c等的类型。
          我不相信,这可能会成功。不过,我还不确定还有什么其他方法可以解决这个问题。

          我刚刚完成了一个完整的无类型的版本取消了整件事远的更简单、更透明。这一次,我选择了3个单元格加上提到的额外规则。我将做最后的润色(改进颜色等),然后我会发布并解释它。它看起来更像我在SKI组合演算上链接的其他项目。它本身也没有“|”的单体结构。(我不能只是得到但是,这些必须通过额外的规则来实现。

          无论如何,取决于我能多快做到这一点,请期待很快(今天或最坏的情况下,希望是明天)

          最后,我甚至不确定Globular是否会像我在这里那样被使用。

  5. 我把这个放在一个新的线程中,因为很明显,以前的线程已经达到了深度的极限。我希望Christian Williams能在这里找到它:

    这里有一个非常简单的,无类型的Rho组合器微积分的版本:

    http://globlar.science/1805.004

    首先,让我们逐级查看单元格:

    0单元格充当其他一切发生的环境。它只是一个背景,没有其他工作。

    为了方便起见,我跳过了1个单元格。要从0单元格构建1单元格,必须将0单元格作为源,然后再作为目标。要构建2-从0单元格中取出一个单元格,您必须获取0单元格,应用一次标识,然后获取那个作为源和目标。显然,任何进一步的身份应用程序都会生成一个更上一层的结果单元。稍后会详细介绍。

    有一个2单元代表我的单一类型“术语”。根据论文,我本可以为所有组合子使用另一种类型“1”。但据我所知,这在使事情变得不必要的复杂时没有任何好处。然而,这也是添加更多类型的地方。

    添加N和W很容易。问题再次以“for”开始,它要求输入一个函数N->W。然而,S-组合子更糟糕。它要求输入三种任意类型的Z->Y->X、Z->Y和Z,以及I认为也就是说,X、Y和Z不一定只有N和W。它们可以是这两种类型的任意嵌套函数,对吗?(如果不是-如果任何感兴趣的构造都需要有限数量的类型,那么这突然不再是一个问题。无论如何,这不是一个无法解决的问题。您仍然需要为每种类型提供一种线颜色。)这就是Globular中的类型多态性非常有用的地方。我认为这也与Global只在严格的情况下工作的想法背道而驰,有限的,有限的类别,对吗?(我确信类型多态性意味着一个拥有无限多对象的类别?)

    3个单元是所有组合子的所在地。但在那个阶段,这些只是名字。让他们打勾的是后来才出现的。您还将注意到,它们似乎都没有输入,只有一个输出。原因是,我选择了咖喱风格,很像报纸上的那样。它们的用法如下:

    网址:https://imgur.com/9ERYRaC

    (本例的特点是S-combinator有三个输入)这样做可以更容易地操作图表,但代价是隐藏任何给定的组合器实际需要多少输入。

    这个未结婚的S的版本(以及其他版本)看起来更像这样:

    https://imgur.com/3qwxb8R

    它总是需要三个输入,除非我用给定输入的每个组合或类似的东西定义了每个多输入组合器的几个版本。

    还有三个3格电池:

    分支是括号的替补。这对于将每个组合子与其输入连接起来也至关重要它起作用了确切地就像报纸上写的一样。您的术语看起来像二进制表达式树,对应于用括号线性书写的术语。那么前面的例子(网址:https://imgur.com/9ERYRaC)可以用任意输入X、Y、Z写为(((S X)Y)Z)。

    复制是一种中间结构,在应用S-组合词时出现。它复制了它下面的任何内容。不幸的是,它也是通信规则的一部分。这是我的一个方面真正地不喜欢当前的实现。稍后会详细介绍。

    Eat是一个中间结构,在应用K-combinator时出现。它会摧毁它下面的任何东西。

    接下来是4个单元。这是真正的机器。所有这些东西如何相互作用的规则。

    这里的第一条规则是通过,这是我选择将组合子实现为3个单元的结果。它允许导线相互穿过。4个细胞会自动遵循这一规则,但代价是球状物的易用性降低了。(一旦你掌握了所有可能操作的窍门,它对4个单元格的使用就出人意料了,但首先需要花很多时间来适应。)这也是我跳过1个单元格的原因。如果我的导线是1个单元,而组合子是2个单元,那么需要大量手动添加额外规则才能完成所有必要的移动。显然,我也可以跳过2个单元格来得到4个单元格的组合符、5个单元格的规则和6个单元格的证明。球窝支持5-和尤其地然而,6细胞在这一点上是有斑点的。如果我没记错的话,他们的目标是现在适当支持4细胞。这些工作很好!

    之后,我对三个结构并发规则进行了建模。(这次也是明确的。有了这个设置,我实际上无法从其他东西中证明它们。)

    如果你想自己构建东西,并且实际上不需要使用这些规则,我强烈建议暂时禁用这些规则的可逆性。尤其是0|P=P。那一个太令人讨厌了。单击错误通常会提示Globular在该位置插入一个随机的0-组合符。您可以通过再次单击来消除它,但如果它在100步的过程中发生20次,仍然很烦人。

    接下来是减员规则。

    S、 K,我很直截了当。我只保留它的输入,K放弃它的正确参数,S(从下到上)

    https://imgur.com/i04UKdM

    • 复制了第三个参数,
    • 将其应用于第一个和第二个,
    • 然后将第一个结果应用于第二个结果。

    然后,两个大问题:

    沟通一团糟。我真的不喜欢这样一个事实,即在这个初始状态中有一个复制项:

    https://imgur.com/IBNnp7C

    这个小小的细节让它有点脆弱:如果P-input不仅仅是一个通用输入,而且实际上有一些进一步的结构,那么在这个初始状态下您需要的复制分支将能够进一步深入。因此,如果你碰巧没有意识到,你实际上可以使用通信规则,那么现在,如果你继续复制,超出这一点,就不可能实际应用该规则。一种中途修复的方法是使所有复制规则可逆,因此,假设您除了复制之外没有做任何其他事情,您可以修复损坏。

    全球需求准确的(strict?)匹配以应用任何预定义规则。如果情况稍有好转,它将拒绝改变任何事情。问题是,我不知道如何告诉Globular,这里的输入应该是相同的。一个进程调用P,另一个进程可以提供它。

    为了更好地衡量,我实现了这个规则的两个稍微不同的版本。如果您意外复制了&-combinator,您至少可以继续使用通信:

    https://imgur.com/GPx4rKc

    相比之下,评估实际上相当直接。它在它的输出,在不重要的地方。(如果,不知何故,它会在输入,这和有副本一样糟糕。)

    在那之后,所有的规则都是抄袭和进食。相当重复。唯一的问题是,每个构造函数(Eat本身除外)都需要一个副本和一个Eat-rule。(复制也不需要复制规则。尽管如此需要左右吃。)

    最后,如附录所示,给出了六个计算结果。正如论文所建议的那样,[[P]]_x等被翻译为(K P)以使其有效。

    这些4单元身份都有相应的5单元证明,完全使用现有组件构建,这是一种从开始配置到结束配置的方法。

    让我们从中选择一个,并逐步详细地验证。
    我将仔细阅读我称之为“附录3证明”的内容。

    以下是初始配置:

    网址:https://imgur.com/4TmV133(投影级别1,切片(0,0))

    我认为,这实际上比以下内容更具可读性:
    ((S(S(K!))(S(K&)(KP)))(K Q))x)

    以下是最终配置:

    https://imgur.com/GbAawSr(投影级别1,切片(0,1))

    其可读性大约为:

    ((!(&P))Q)

    Eat细胞代表“要移除的东西”,所以它不会以手写的形式出现。然而,你无法摆脱它,因为否则,Globular会抱怨不匹配。以前有三种输入。不可能最后只有两个。我想,计算等价物应该类似于“被垃圾收集”?

    现在,让我们看一下整个证明的概述。(投影级别2,切片1):

    https://imgur.com/0xyEnGe(英文)

    这种尺寸很难阅读。我建议您自己检查一下,从Globular内部放大,以便更清楚地看到它。这基本上是整个证明的地图。你可能会注意到,有一个多余的步骤(具有讽刺意味的是,这是额外规则“通过”的意外应用),如果不基本上重建至少一半的证明,我很难摆脱(我认为),所以让我们忽略它。

    否则,我认为这个证明是最佳的。当然,每根电线几乎都是朝一个方向移动的,如果可能的话,这意味着很难再把它们拉紧了。

    为了习惯这种观点,我建议来回比较

    投影级别1,切片(1,i)

    当您遍历所有n个切片时,从0开始,对应于图中的每个更改

    投影级别2,切片1

    从下往上阅读时。

    因此,回到我们的初始配置:

    投影级别1,切片(1,0)
    https://imgur.com/4TmV133

    在这一点上,唯一可行的操作(忽略以任意方式围绕导线移动)是应用左上角的S-combinator。它是屏幕上唯一一个拥有全部(三个)输入的组合器,因此可以应用。
    将鼠标悬停在切片覆盖中的0上,可以看出,这正是将要发生的事情。

    实际完成后,我们降落在:

    切片(1,1):https://imgur.com/G4dTRDd

    S-combinator现在不见了,取而代之的是一个新的线交换器和一个副本。

    现在无法立即应用组合子。首先必须将一些事情转移到适当的情况中。如果你仔细检查,你会发现,只有下一个较低的S-组合子才是可约的。
    所以,让我们稍微移动一下,直到…

    切片(1,8):https://imgur.com/kJF3KBL网站

    S-combinator再次处于应用位置。
    注意,S-组合子总是需要至少三个像该图像中那样直接相邻的分支,才能成功应用。(这是因为我定义它的方式,尽管我认为考虑到我构建所有东西的方式,很难想出其他东西。)完成这项工作后,我们开始

    切片(1,9):https://imgur.com/jRUphgu网站

    这里,再一次,没有组合词是立即适用的。但是最顶级的K组合子现在看起来很有前途。K-组合子总是很好的,因为它们可以简化问题。所以,让我们四处走动,直到这个也就位:

    切片(1,18):https://imgur.com/RuTXPxY

    很可能已经有可能将四个巨大的分支e移动到K-combinator附近的位置,但它只需要两个输入,因此在这种配置中完成技巧所需的最小工作量就结束了。因此,让我们应用:

    切片(1,19):https://imgur.com/e7KQObJ网站

    现在有一个Eat,稍稍移动一下,它就会出现(这也是我犯下的错误,我过度翻转了交换器,所以从现在开始,少切一片是绝对必要的。)

    切片(1,21):https://imgur.com/vI5L6i5

    能够删除右下方Copy的左分支,从而大大简化了整体结构:

    切片(1,22):https://imgur.com/BdKEPaq网站

    接下来,进一步移动将使最后剩下的S-combinator就位:

    切片(1,31):https://imgur.com/uhSMvI0网址

    提交另一份副本。

    切片(1,32):https://imgur.com/NIQ09eq

    一群人在四处走动…

    切片(1,41):https://imgur.com/mwRNOfq

    …将使另一个K组合器就位,…

    切片(1,42):https://imgur.com/Gkw8QIe
    切片(1,43):https://imgur.com/KT8ongS
    切片(1,44):https://imgur.com/P4N0bwv

    …最终删除另一个副本。更多的重新配置最终将…

    切片(1,51):https://imgur.com/vzvGGxP

    …为我们准备另一个K-combinator,删除最后一个副本:

    切片(1,52):https://imgur.com/ybjHyyI网站
    切片(1,53):https://imgur.com/yzp2mlO
    切片(1,54):https://imgur.com/uA9mBGV

    最后一点混乱:

    切片(1,58):https://imgur.com/V6380kP

    最后剩下的K-combinator也可以应用,让我们回到我们的最终配置:

    切片(1,59):
    https://imgur.com/GbAawSr

    现在这更清楚了吗?这很乏味,但实际上很简单。对Globular进行了一些改进,实际上也可以消除很多单调乏味的事情!

    (我的便利功能愿望列表包括连续拖动等功能,因此,只要所讨论的动作是同一个动作,就可以通过一次拖动动作将物体移动到比单步更远的位置;多视图–为什么不(可选)同时具有两个或三个投影级别或切片?;和(可选)3D视图,这可能有助于可视化当前很难理解的一系列结构,尤其是对于更高的单元级别。)

    • 好东西,克拉姆!您可能在尝试在Globular中实现ρ演算时发现了一个问题:

      然而,S-组合子更糟糕。它需要三种任意类型的Z->Y->X、Z->Y和Z作为输入,我认为这意味着X、Y和Z不一定只有N和W。它们可以是这两种类型的任意嵌套函数,对吗?

      对,实际上它们可能是任意的术语全部的语言中的组合子。我说“可能”是因为我不知道ρ-微积分。但在SKI演算,一个学期递归定义为S、K、I或某种形式(t t’),其中t和t’是术语。那么,给定形式的任何术语

      ((((S t)t’)t“)

      我们可以将其改写为

      ((t t’)(t t”)

      这就是球状突的类型多态性非常有用的地方。

      我明白你的意思:说我们可以重写((((t)t')t“)as((t t')(t t“)不是重写特定表达式;这是一次改写规则无论t、t'和t“是什么,这都适用。这可能超出了Global的范围。

      我认为这也与Global只适用于严格的有限类别的想法背道而驰,对吗?(我确信类型多态性意味着一个拥有无限多对象的类别?)

      半严格有限生成的球函数n个-类别。它正在处理n个-类别而不仅仅是类别,因为它允许多个维度的单元格,而不仅仅是0和1。它们是半严格的,而不是严格的,因为虽然结合性和单位定律可以作为方程来成立,但交换定律只能维持同构。最重要的是,用户只能指定有限多个生成细胞(据我所知),从这些细胞中可以构建多少细胞是没有限制的。例如,如果你有一个0细胞x和一个1细胞f:x→x,那么你会立即得到无限多的1细胞f2,f等。

      但所有这些都不违背您的主要观点,即我们可能需要更大的灵活性来表达ρ演算,甚至SKI演算。这并不奇怪:没有人声称能够使用有限生成的笛卡尔闭范畴(它捕获了SKI演算和λ演算的某些方面)n个-类别。

    • 谢谢!

      我实现这一点的方式,一点也不困扰我,输入可以由任意组合器生成。这是毫无意义的(我想这个词应该是这样的),因为所有的组合子都不关心它们下面的内容:如果它们在正确的上下文中被应用,你可以应用它们。

      如果你检查S组合符的动作,它只需要一行中的三个分支,就在它的正上方。其他的组合子本身都不参与其中。实际上,它所做的只是重新排列连线

      我所关心的(或者,如果这是输入的话,我会关心的)是输入线的颜色。如果这是适当的,那么可以形成连接。否则,假设我以正确的方式实现所有规则,Global甚至不允许您构建它,从而强制执行类型约束。

      但是,我们仍然需要无限多的这种电线颜色——无限多家庭他们中的一个,去做。

      使用纯SKI组合子演算,至少如果你不关心类型,那实际上绝对可以。由于通信法中有一个令人讨厌的副本,所以这个非类型化的rho组合子演算也是如此。

      第二,我可以很方便地在Globular中写下无数种细胞类型,我认为一切都可以做到。

      顺便说一句,我实际上更新了球状训练:
      http://globlar.science/1805.004v2

      现在它又是基于4个单元的,因此少了一条显式规则
      清洁剂。(例如,我修复了我之前提到的多余移动。)

      如果您只需将所有单元格数(除了0个单元格)增加一个,那么前面的解释仍然适用于完全相同的方式。

      事实证明,对于这种东西来说,六格打样并不是问题。(或者可能是一个更新使Globular变得更加健壮了。我记得我以前遇到过一些问题。)

    • 克拉姆,你在类型方面说得很好,但我已经筋疲力尽了,我把你的评论移到了线程中的正确位置,这只能通过一些肮脏的技巧来完成。

      顺便说一句,有经验的博客作者所做的,为了避免专栏在长时间的讨论中变得越来越薄,就是点击答复按钮不在您回复的评论的底部,但在评论的底部比你回复的少缩进一个.

      这是一个树状结构。也许这会让人明白:要像你回复的人一样缩进,你不想成为他们的孩子,你想成为他们兄弟姐妹!

      我刚才采用了这种方法:这就是为什么这个评论没有你的意思。

      这对于简短的讨论来说是没有必要的。但是当专栏变得如此瘦小以至于你甚至不知道看见答复按钮位于您回复的评论底部,这显然是强制性的!

      这听起来可能很复杂,但不像处理5个类别那么困难。

    • 克拉姆写道:

      我所关心的(或者,如果这是输入的话,我会关心的)是输入线的颜色。如果这是适当的,那么可以形成连接。否则,假设我以正确的方式实现所有规则,Global甚至不允许您构建它,从而强制执行类型约束。

      好的,我想我明白了。我想你是说Globular的力量足以应付无类型的SKI演算(顺便说一下,这是原来的演算);只有在键入情况,因为人们想要多态的S、K和I的版本。

      对于范畴理论家来说(只有),一个更简单、更熟悉的例子出现在弱单体范畴中。人们经常在弱单体范畴中提到“联想子”,但实际上是指任何三重对象x、 y,z有一个结合子,一个态射

      \alpha_{x,y,z}:(x\otimes y)\otimesz到x\otimes(y\otimmess)

      如果现在想在Globular中实现弱单体范畴,那么(显然)需要为每三个对象明确地放置单独的关联器,当对象数量超过几个时,这会变得很烦人,并且真正地当有无限多的时候很烦人。

      我怀疑这种“多态性”可以在Globular之上发展,但现在Jamie Vicary专注于让任意维度的细胞以一种良好的方式工作。(在莱顿,他提到了他在这方面取得的一些重大进展。)

    • 好的,从现在开始我会这样回复
      谢谢你修复了一切!
      尽管如此,缩进本身对我来说并不是一个问题。这是因为一旦回复深度达到一定程度,就根本无法回复(按钮实际上不再显示)。(不是,按钮会也会消失。它在左边,柱子肯定比按钮所需的要宽得多)
      如果这是设计的,那么这可能早就应该发生了(“回复”应该只有所以你的建议成为唯一可能的行动方案。

      是的,这正是我一直在说的。这也是我所说的类型多态性!
      如果我没有,我真的很抱歉真正地把行话记下来很难听懂我的闲聊。总有一天,我真的需要学习所有这些东西,至少对基本知识有充分的了解。我想,我目前正在采取一种工程方法来处理这些事情:尝试一些东西,直到它奏效。所以我的语言肯定没有它可能的精确。

      在你的弱结合词同构中,右边的s是有意的吗?还是应该是z?

      适当的无限维细胞支持听起来很棒!从结构上看,这显然是合理的。

      顺便说一句,我正在为打字想出一个潜在的解决方案:
      无法定义无限多的导线?在上面放上任意数量的珠子!
      我会买一根带珠子的电线,而不是一根类型为N->W或其他什么的电线,我要买一根珠子为-o-o的电线,第一根是N,第二根是W。
      然后,树枝将首先“锁定”,只有当左右两侧的珠子匹配时,它们才会让东西从树枝上通过。
      基本上,在这样做的过程中,我会在Global中构建一个类型检查器。最后,在“完全检查”配置中,类型将再次被删除,但只有在没有类型错误的情况下,才允许删除所有类型。
      我想这相当于一个运行时检查,所以它并不漂亮,也许过于复杂。特别是,S-计算器仍然对这种方法提出了一些挑战(所有其他潜在的麻烦制造者——“for”、K和I,这样肯定会很好地工作)
      即使没有这些额外的麻烦,”真正地“讨厌”绝对是一个很好的表达方式。
      然而,这至少应该是可能的考虑到Global的当前状态。

      作为另一个并行的项目,我也在尝试用更强调分布式本质的方式展示Rho Calculus。我已经有了一些概念。我需要研究的是如何使流程相互识别。(基本上,为了避免前面提到的“通信规则中的烦人副本”)——一旦我很好地处理了这一点,我认为(非类型化的)Rho Calculus将得到另一种结构上非常不同的表示,更符合它的“精神”。
      我还不确定,但那可能会成为实际的罗微积分。不是组合器版本。
      (不过,类型化版本可能会出现与类型化组合子完全相同的问题)

      这两个项目都可能需要更长的时间。如果运气好的话,一旦再次出现关于rchain和Rho Lang的消息,他们就会做好准备。

    • 话虽如此,缩进本身对我来说并不是一个真正的问题。这是因为一旦回复深度达到一定水平,就根本没有回复的能力(按钮就不再显示了)。

      也许设计WordPress的人认为,只有当参与对话的人足够聪明,认为他们应该返回并点击之前的“回复”按钮时,对话才应该继续超过某一点。

      说真的,这是一个奇怪的设计缺陷。我可以调整允许缩进的迭代次数(如果缩进太高,文本就会变得异常瘦小),但我看不出我能做什么。

      在你的弱关联词同构中,右边的s是有意的吗?还是应该是z?

      不,那应该是z:我们只是移动括号。我会修好的。

      顺便说一句,我现在正在为打字准备一个潜在的解决方案:不能定义无限多的电线吗?在上面放上任意数量的珠子!

      这很聪明。如果它有效的话,你已经知道了如何证明一个有趣的数学结果:关于如何在没有多态性的系统中模拟多态性。

      我想这相当于一个运行时检查,所以它并不漂亮,也许过于复杂。

      嗯,“运行时检查”听起来很熟悉,所以也许这个数学结果的一个版本在理论计算机科学中是众所周知的,但由于您正在使用Globular,我认为它是关于n个类别的结果,在这种情况下它可能是新的。

      然而,这让我觉得你应该加入Global设计团队,帮助他们以一种非常好的内置方式实现多态性!

      但人们很容易感觉到其他人们应该做得更多:我明白为什么你会想把这个保持在爱好的水平上。

    • 约翰写道:

      嗯,“运行时检查”听起来很熟悉,所以也许这个数学结果的一个版本在理论计算机科学中是众所周知的,但由于您正在使用Globular,我认为它是关于n个类别的结果,在这种情况下它可能是新的。

      嗯,我想这更像是编译。

      基本上,我要做的是:

      分支机构是锁定一开始。他们需要满足输入类型在双方都匹配。
      如前所述,类型表示为这些导线上的珠子。
      我基本上是这样构建的,如果输出线上的珠和输入线上的匹配珠都击中分支的顶部,则可以删除它们。(如果不匹配,系统将锁定)
      如果珠子都被筛过了(目前我正在考虑用一个特殊的两边都需要的“解锁珠子”来做),树枝就会解锁。它还为下一个需要担心的锁定分支传播适当的输出类型(再次编码为beads)。

      我之所以说它有点像运行时检查,是因为系统实际上不允许您构造具有不匹配类型的东西。它只是不允许你执行因为类型不能完全消除。

      然而,最终的结果实际上又是一个完全没有类型的接线图。一旦最后一个珠子被去掉,所有的打字信息都被删除了,同样的东西就可以工作了,我现在已经开始工作了。这就像是,“检查一下,它是否有意义。然后忘记它为什么有意义,只是接受它确实有意义。”

      这有点像编译器会做的优化,对吧?如果类型与运行时无关,为什么要保留它们?编译器已经确保它按规定工作。只要相信编译器的话!
      如果类型不能如果不需要,编译器也会告诉您这一点(通过从不生成可执行文件,或者通过提供有用的错误消息来修复问题)。

      实际上,它的灵感来自我之前在Global中构建的一个简单的基于Zero/Succ的算术计算器。不同的是,我必须处理更复杂的规则(尤其是对于S组合符),而不仅仅是一个珠子类型N->N(以及一条线的最终珠子,即0:N),而是几个。

      不过,我不完全确定我的结果是否会构成一个通用的证明:我认为,仅仅为了让S-组合子工作,构建非常专业的珠子是不可避免的。这很可能更像是一个概念证明(存在性证明),而不是一个你可以逐步遵循的方案(通用证明)使任何情况都有效。

      至于加入开发团队,我想我可以提出功能要求。我相信杰米·维卡里已经受够了。(事实上,我想看到的一些功能已经被其他人建议了)
      也许我可以做测试。

      为了真正为代码库做出贡献,我必须先学会用JavaScript(可能还有CSS)编写代码。从来没有真正解决过这两个问题。
      (我可能会这样做。目前我主要是一个Python-guy,对Haskell有侧目,但从未真正投入过)

      如果他真的在研究细胞结构的通用扩展,一直到无穷大,我认为这在很大程度上应该优先于多态性之类的东西。这对我来说似乎更为重要。一旦这一点成立,各种整洁的钟声和哨声可能(相对而言)直接添加进来。

    • 很高兴看到这场精彩的讨论不断发展。

      Global允许您使用任何有限表示的代数签名,直到维度4,只要这些项是纯组合的,也就是说,您不能使用任何通用结构,如笛卡尔积。例如,它可以让你对任何有限的PROP进行编码。看看Mike和Greg的论文,我没有看到任何关于他们的语法形成这种结构的明确陈述,所以我不清楚Globular是否能够对其进行编码。Globulal可能只能对理论的某些片段进行编码,这可能仍然很有趣;在这种情况下,最好弄清楚这是什么碎片。

      目前,球状体的一般特征开发被冻结,而我们开发下一个迭代,这将允许无限维计算。(我正在与Christoph Dorn、Christopher Douglas和David Reutter合作完成这项工作。)但不要因此而停止发布功能请求,以便在问题跟踪程序上进行讨论,以备将来可能加入。

    • 而且,这些证据看起来很棒,克拉姆,谢谢分享!

    • 杰米写道:

      目前,球状体的一般特征开发被冻结,而我们开发下一个迭代,这将允许无限维计算。(我正在与Christoph Dorn、Christopher Douglas和David Reutter合作。)

      这或多或少是我想的,我非常期待!谢谢你的工作!即使在目前的状态下,这对我来说也是一个很大的帮助,因为我可以通过构建来理解事物。这是非常不可思议的,这已经是可能的了。
      如前所述,我想看到的许多功能实际上已经被其他人建议了。但当我发现它们时,我一定会添加新的建议。不过,我得先把跟踪器再通读一遍。(或者,除了Github之外,还有其他地方可以放置建议吗?-该页面显然已经有一段时间没有更新了。)

      Global允许您处理任何有限呈现的代数签名,直到维度4,只要这些项是纯合成的。

      我不确定,我完全理解这其中的每一个含义,但在我看来,一大组组合运算符合这种描述。

      一般来说,组合子似乎很好地映射到Global,就像我定义它们的方式一样。事实上,只要规则不变得太疯狂,所有类型的组合子演算都是可能的。(例如,我曾经试图使SF组合子工作,但F-组合子是真正地由于其复杂的、区分大小写的应用规则,因此具有挑战性。我认为这是可能的,我确实做到了这一点,但我遗漏了一些边缘案例。)

      据猜测,这是因为组合子计算通常是有限可表示的(所有事情都可以用有限的组合子集来完成),并且是组合的。(任何(如果需要,类型良好的)组合子字符串和平衡括号都是有效的程序)。

      我相信,我需要的三个辅助对象——分支、复制和吃,很少是可以避免的。除了实际的组合子之外,几乎任何组合子演算都应该只使用这三个组合子即可实现。(BCI组合子是线性的,只需要Branch。我不确定能否以实际的方式去掉一个。)
      除非你有真正奇特的规则,这当然是可能的。
      (当然有一种方法可以使其在数学上精确。哪些规则可以或不能实现?哪些组合计算承认这些约束?)

      如前所述,Branch实际上与括号相同。
      如果我没弄错的话,它的类型应该是:
      分支:对于所有X,Y:(X->Y)->X->Y

      同时,在S-和K-组合词中出现了复制和吃。因为这些是某种几乎最小的组合子集,所以任何通用的非线性组合子演算都需要这些。
      这些类型包括:
      副本:所有X:X->X×X
      吃:所有X:X->1
      我相信,这是一个类comonoid应该具有的两种形态,对吗?

      四维部分也很好,因为通常,我希望这样一个图中的字符串可以自由地相互传递,这最好是在四个单元格中完成的,其中已经存在所有相关的操作规则。

      可能Global只能对理论的某些片段进行编码,这可能仍然很有趣;在这种情况下,最好弄清楚这是什么碎片。

      如上所述,如果Rho组合子能够做到这一点(我的理解是,它们是Rho微积分的完整翻译),那么我到目前为止所做的也将能够做到。

      我还提到了沟通规则中的警告。那里有一个输入端Copy指令,它复制输入以声明相同。这很脆弱,因为它依赖于你复制某些东西,以应用更复杂的,因此可能很容易被忽视的通信规则。到目前为止,我还不知道我会如何让某人阻止复制的应用,而他们可能会想进行交流。
      (*稍后详细介绍)

      具体来说,正在发生的事情是:
      通信规则规定:

      ((|C)((|((用于(&P))Q))((!(&P))R))
      ->
      ((|C)(问答))

      或者,使用更少的括号:

      C|用于(&P)Q|!(&P)R
      ->
      C|Q(&R)

      当P是一个过程时,它被提升为一个名称。
      所以

      ! (&P)R

      我想,基本上是喊出“我有一个叫P的东西!

      对于(&P)Q

      说:“如果我得到一个叫P的东西,我可以解释它!”

      因此,R可以作为输入传递给Q,Q将其解释为另一个过程Q(&R)。

      问题是,(&P)出现了两次。按照我的实现方式,输入基本上是匿名的。(因此,比方说,S可以应用,而不必关心下面的内容!)——所以(我能想到的)告诉Globular的唯一方法是,两个输入实际上是相同的输入,是通过从单个输入复制。

      大概不用打字你就可以胡说八道,比如,我不知道,
      ((|C)(&P))=C|&P
      类型会排除这一点,因为&P的类型是N(而P的类型则是W),但|只需要W类型的东西来产生另一个W。
      这显然是当前设计的一个缺陷。但是,如果没有多态性支持,就很难解决这个问题(正如前面的讨论所述)。

      除了这两个问题之外,我目前的理解是,这是一个完全忠实、完整的rho结合子的翻译,因此也是rho演算的翻译。
      不过我可能错了。

      总之,它应该具有rho组合子的全部功能,但它缺乏一些必要的约束,无法使它们的合法树成为可能,也无法将合法树转换为仍然合法的树(即,它们仍然可以达到相同的标准形式)。

      最后,我认为,由于输入不能完全删除,只能“标记为删除”,因此可以说,即使要解决上述问题,翻译毕竟也不是那么完美。但这对我来说似乎不是问题。如果真正地有必要的话,我也可以把它们放在底部(输入端),这样就可以真正删除输入。不过,大多数情况下,这似乎只是让事情变得不那么干净。
      可以说,知道有多少东西被扔掉也可能会引起人们的兴趣。

      (*)
      也许有更好的方法来执行沟通规则,但当出现任何此类情况时,我必须有更多的直觉。

      比如,SKI组合子本身已经完成了图灵化,对吗?原则上,我可以忽略所有新奇的组合子,用SKI组合子构建任意程序。
      我对使用SKI组合符时程序的外观有一种模糊的直觉。

      我真的不知道同样的东西在π或ρ演算中是什么样子的。或者您通常如何使用任何新元素。
      在此之前,我很难衡量实际需求,从而为设计提供进一步的信息。

      例如,如果通信的可用性很容易衡量,我可以潜在地限制Copy-node对其敏感。这样就不会再出现过早的复制错误。

      我对此最明显的想法是,在排除通信之前,不允许复制&-组合符。但我不确定这对于避免这些问题是否必要或足够。类型至少应该允许这样做。

    • 克拉姆写道:

      据猜测,这是因为组合子演算通常是有限可表示的(所有事情都可以用有限的组合子集来完成),

      杰米说“有限的体面”,意思是精确的。

      说起来有点累确切地多么有限的呈现n个-类别是,但大致意思是:

      1) 数量有限发电机j个-各种形态j个从中可以使用每个n个-类别具有。

      2) 数量有限关系–方程式j个-形态,从中可以推导出其他方程。

      一般来说演示是某些代数结构的生成器集合,以及关系集合。如果一个代数结构具有有限多个生成元和有限多个关系的表示,我们就说它是“有限可表示的”。

      典型的例子是有限呈现群每当人们谈论“有限呈现”的代数结构时,这就是他们脑海中的范例。在一个组中,从旧元素“生成”新元素的方法是将两个元素相乘,然后取元素的逆元素。在其他结构中,您可以执行其他必须仔细指定的操作。

    • 约翰,谢谢你的解释。

      所以在这个例子中,生成器是组合子吗,以及它们的各种规则之间的关系?

      据我所知,我有:

      对象环境
      (隐式)同一态射

      1_2 :Id(Id(env))
      1:Id(Id(环境Id))

      导线T:1_2->1_2的同态
      一堆1->T型的态射,它们是我的组合子
      三个额外的形态

      吃:T->1
      副本:T->T×T
      分支:T×T->T
      我认为,所有有效的(以及目前为止一些无效的)程序都可以从中构建出来
      并且,用所有这些定义,向上一级的态射,这给了我它们之间的关系,从中可以通过适当使用合成和恒等式来导出所有其他有效的方程。

      j会在这里是什么?仅仅是细胞水平?或者可能比细胞水平低一个?(也就是说,你计算了同态存在于哪个维度,或者同态连接到哪个维度的对象吗?)
      或者这完全是另一回事?
      因为我不确定,我把j放在了上面。

      快速谷歌搜索发现我是第一个/最佳匹配:https://ncatlab.org/nlab/show/J-同态但我不知道这是否相关。

      不知不觉地,我被这个绊倒了:
      https://ncatlab.org/nlab/show/Lawere网站+理论
      哪一个可以给杰米一个更普遍的答案?
      Lawvere理论是具有有限乘积的范畴。

      粗略的想法是将代数理论定义为一个具有有限乘积且具有“泛型代数”(例如,泛型群)的范畴,然后将该理论的模型(例如,群)定义为该范畴之外的乘积保持函子。

      可能是,所讨论的群体本身必须是有限的,才能发挥作用?但不管怎样,至少声音就像它将主要满足Global的约束一样。

      这就是说,我们这里讨论的是丰富的图形理论,迈克尔·斯塔伊和L.G.梅雷迪斯的论文就是关于这些理论的(https://arxiv.org/abs/1704.03080)状态:

      Gph是图和图同态的范畴。Gph有有限的乘积。

      Gph-en-riched类别具有有限乘积,如果基础
      类别是这样的。

      也就是说,我们仍然在处理有限乘积。

      我们也在处理多种Lawvere理论,这是一个更难解决的问题。为了得到完整、正确的类型(/排序)理论,我们似乎需要无限多的排序。
      我接下来的方法是,尝试通过利用以下事实来实现这一点,即我们这里只讨论两种生成器排序,即W和N,所以我可能可以有限地表示所有必需的排序。(这里最大的挑战将是S组合子)

      有趣的是,关于分类,论文还指出:

      多源Gph-富集Lawvere理论
      Gph-theory是一个Gph-en-riched范畴,其有限乘积Th配备有一个有限的排序集S和一个严格保留乘积的Gph-er-riched函子θ:FinSetop/S→Th。

      排序集也是有限的。那么,大概像N->W这样的东西不算在那个集合中。

      最后,4的第一句话指出:

      Lawvere理论及其推广是具有无限多对象和形态的范畴,但大多数感兴趣的理论都是有限生成的。

      这与我上面的说法有着模糊的联系,即大多数组合子结石都应该承认类似的嵌入到Globulal中,因为最有趣的是有限生成的。

      在下面,它指出:

      有限生成Gph-理论的潜在多重分类Lawvere理论的表示是项演算的签名,由一组排序、一组项构造函数和一组方程组成,而该理论的hom图中的边编码了约简关系。

      然后,它将SKI组合子演算作为Gph-理论,据我所知,它与我所做的几乎是1:1。

      (我的单线是所提到的排序集,各种组合子和三种特殊形态是术语构造器集,然后我有一组方程和约简关系)

      所以,虽然我可能会遗漏一些东西,但我认为这应该很好地回答了杰米的问题,即这部作品是否可以用Globular来表现。

    • 大家好,谢谢你们的评论。Lawvere理论的概念肯定是一个相关的概念:它用乘积描述了一个有限表示的单体范畴。这与您在Globular中可以做的类似,只是Globulal不了解产品。Global推广的更合适的是PRO:有限表示的单体范畴,但不具有单体结构是笛卡尔的性质。

    • 谢谢,杰米。我懂了。

      据我所知,报纸此处需要产品,但仅在此处明确显示(最少改写):
      \left(\左(K y \右)z \右)是的缩写\T\次T\xrightarrow{{left}^{-1}}1\次T\次T_次T\xrightarrow}K\次T\次数T\次T.次T_右箭头{left(-\-right)\次T}T\次T\xrightarrow{\ left(--\right)}T

      这显然是一系列产品的特点。

      但我相信,所有这一切都是用不同的方式写下以下图表:

      https://imgur.com/5VVTHlV网站

      从下到上阅读图片,并从左到右平行阅读上述等式:

      首先,我有两个输入T×T(即并排组合)。
      然后,在左边,我引入一个组合子,使其为1×T×T
      这是K组合器,它只有一根输出线,所以现在是T×T×T–三根并排的线。
      接下来,我点击了一个T×T->T(或者,curried,T->T->T)类型的分支,将左边的两条电线组合在一起,这样当我穿过它时,我又得到了T×T。
      最后,我撞到了另一根树枝,把剩下的电线组合成一根,只给了我T。

      在这里,我做了一个叠加,试图将方程和图表对应起来。由于Global的布局方式,它在下半部有点狭窄。
      网址:https://imgur.com/0A9hfbw

      因此,如果我是对的,我基本上是通过横向组合来模拟产品,以达到这里所需要的程度。
      (或者,如果我没有跳过两个单元级别来获得性能更好的导线,这将是水平合成。在整篇论文中,他们写道,建模所有这些只需要2个类别。如果我手动添加所有导线交互规则,如交换定律等,Globular为我提供了4个类别,已经在2个单元中了级别,我的实现也是如此。)

      水平构图是已经在1类水平上可用的构图的2类版本,对吗?如果我没弄错的话,这是新的垂直组合。还是我把那些东西转过来了?

      无论如何,同时,垂直构图用于引入所有相关结构,在上述等式中,这些结构表现为各种形态。

      在图像的叠加版本中,水平构图为蓝色,垂直构图为红色。

      据我所知,论文的其余部分完全没有提及产品。它被隐藏在各种组合词和括号的字符串后面,显然是一种语法糖。

    • 克拉姆写道:

      所以在这个例子中,生成器是组合子吗?它们之间的关系是各种规则吗?

      这就是我们的想法。Global是否有表达能力从这些生成器生成您想要的所有内容,并从有限的关系集派生出您想要的全部规则,这是一个悬而未决的问题。它只能使用半严格n范畴中的操作从生成器中生成新事物,类似地,它只能从您使用半严格n-范畴的规则声明的关系中派生新规则。

      有许多不同类型的逻辑系统,具有不同数量的表现力。Global有意接近表达层次的底部,除了一个方面,即它允许比几乎任何其他系统更高的“n”(如n类)。因此,如果一种普通的计算机编程语言的表达能力能够被Global捕获,我会感到惊讶,即使是一种简化的语言,比如lambda-calculus或SKI组合演算。但谁知道呢?也许我很困惑。

      比如,SKI组合子本身已经完成了图灵化,对吗?

      正确的。不过,我应该强调一下“表现力”与“计算能力”不同。你可以点击链接来了解更多关于表现力的知识,尽管这可能不是真正好的数学知识。可以说,表达能力是大多数人喜欢C++而不喜欢机器语言的原因之一,尽管两者都是图灵完备的。

      杰米写道:

      Global允许您处理任何有限呈现的代数签名,直到维度4,只要这些项是纯合成的。

      我不确定,我完全理解这其中的每一个含义,但在我看来,一大组组合子演算符合这种描述。

      不要急于得出这样的结论:“代数签名”和“纯合成”在这里至关重要。

      不知不觉地,我被这个绊倒了:https://ncatlab.org/nlab/show/Lawere网站+理论哪一个可以给杰米一个更普遍的答案?Lawvere理论是具有有限乘积的范畴。

      右类和n类没有有限的乘积,除非你要求它们这样做,而Globula不允许你这样要求,所以Globula可能无法做Lawvere理论(或富含图的Lawvere理论)所能做的所有事情。

      有限产品是“表现力”的一个关键方面,Jamie刻意不想包括它。每当您试图复制或删除数据时,您都会尝试使用有限乘积:这就是它们的优点。这就是你可能撞到墙的地方。

      我必须仔细检查你在做什么,看看你是否能绕过这堵墙。不幸的是,我没有时间。

      正如杰米所说,你可以使用Global来处理有限呈现赞成的意见,我相信你也可以用它来处理有限呈现PROP公司.PROP与Lawvere理论具有相同的风格,但表达能力较差。例如,有一个关于群的Lawvere理论,但没有一个关于幺半群的PROP,因为群有一个公理

      gg^{-1}=1

      其中有一封信克左侧重复,右侧删除。

      这是一个很长很有趣的故事,但我已经讲过了我一生中有太多次现在再说一遍。

      一个随机的其他问题:

      j会在这里是什么?仅仅是细胞水平?或者可能比细胞水平低一个?

      与单元格级别相同。“j-morphism”是指“j-cell”是“维度j的单元”,其中j=0、1、2、3…

    • 我的意思是问:你用什么语法来获取超链接文本?
      我知道有些版本的Markdown有一个整洁的语法。当然,我也可以使用HTML来完成它。
      但是Markdown并没有真正标准化,而且有几个微妙的不同版本,所以说“你可以使用Markdown”不是很清楚。你在这个博客上使用的具体版本的指南是什么?

      Globula是否有表达能力从这些生成器中生成您想要的一切,并从一组有限的关系中派生出您想要的所有规则,这是一个悬而未决的问题。

      我希望有人来解决这个问题,因为就我所知,答案必须以某种微妙的方式澄清这些组合计算:

      我忠实地建立了所有的对象和规则。我看不出可能缺少什么。如果有的话错过了,这应该是很微妙的。

      至多,整个过程可能会受到限制,因为当前结构允许的某些操作可能会导致无效状态但其中大部分是打字问题。这些计算的实际非类型化版本将允许这些完全相同的问题状态。

      唯一的例外是我已经建立的通信规则中的复制实例。

      但在SKI演算中?我很确定实际上什么都没有基本上是通过施工。这些部分组合在一起,产生与实际演算完全相同的行为。不可能有偏差。最大的区别是,我必须做几个额外的步骤(重新排列不同的组合子),以便将所有东西都放在适当的位置,以便能够首先应用这些东西。但只要我们处理的是有限的程序,就不需要无限次的重新安排,这应该是可行的。

      我想,那个最终可能是限制吗?但无限大的程序(就符号而言,而不是就暂停之前的重写而言,即无限循环)似乎是一个相对较小的边缘情况。

      或者,如果没有任何限制,那么在范畴理论中应该有一些相当基本的含义,对吗?

      但我不知道如何证明这些。我唯一能做的就是:给我看一个任意有效的SKI组合子字符串。我可以在Global中实现它,并得到与任何其他正确实现相同的最终形式(假设字符串停止)。(如果它不停止,我将进入完全相同的循环。此外,执行顺序对我来说也很重要。)

      我不太确定到底要展示什么。我需要检查哪些条件才能证明此Global实现完全可靠?如果你对此有更多的了解,你认为你能给我一个大致的轮廓吗?也许我真的可以做至少部分这样的证明。

      不过,我应该强调,“表现力”与“计算能力”不同。

      我知道。我并不是有意这样建议的。我的观点是,如果我的目标是计算任意的东西,而不受任何简单、实用或其他限制,那么单靠SKI组合子就足够了。
      这是我的意思,我真的很想用一些简单的、小的、适当的例子来使用这些组合子来完成一些仅用SKI组合子很难做到的事情,这样我就可以感受到这些规则在实践中是如何工作的。
      比如,rho-conbinator的“Hello World”是什么?

      每当您试图复制或删除数据时,您都会尝试使用有限乘积:这就是它们的优点。这就是你可能撞到墙的地方。

      哦,好吧,这真的很有帮助。很可能就是这样。
      所以对于部分,我在复制或删除方面没有问题。毕竟,这就是复制和吃的目的。
      最后可能会遇到一个问题:
      球状总是(明智地)需要相同数量的输入。为此,我无法复制原始输入:

      我不能告诉Globula做这个:
      https://imgur.com/KDfWrLo网址
      与此相同:
      网址:https://imgur.com/1w7qbln

      同样,对于Eat,我也不能告诉它这样做:
      https://imgur.com/2koCBQB
      与此相同:
      https://imgur.com/5gse58m网址

      话虽如此,对我来说,这几乎是一个特点:它保持了可堆肥性。

      如果你有一个任意的程序P,其中一堆Eat和Copies留在最底部的输入端,如果我决定取一些其他任意程序P',其输出将成为P的输入,它仍然有效。Globular基本上可以一路评估程序,直到它告诉你每个输入的使用频率。我认为这真的很有用吗?

      最终成为“吃”的输入是使用了0次的输入在通常的SKI组合子演算中,您只需完全放弃这些。

      最终成为一组Copies的输入是指直接在该输入处使用n+1次n个Copy实例的输入。
      在通常的SKI组合子演算中,每个输入都会被写为一个标记为“x”的变量或其他东西,因此复制它就像在不同的位置多次写下它一样简单。

      在我的Globular实现中,一个完全简化的程序可能最终看起来像这样:
      https://imgur.com/5LoYmw5网站
      (通常你也会有一些组合词,但这是一个可能的结果。)

      这相当于

      (x((x(x)))

      而正常的SKI组合子演算是这样的:
      https://imgur.com/10pMxzC
      (并且所有输入都具有相同的标签“x”)

      因此,如果这方面的限制是,我不能仅仅忘记资源(根据我目前的理解,类似于某些线性类型系统的实际设计用途),那么这当然是一个限制,但对于许多用例来说,这是一个有用的限制。

      (注意,我确实忘记了一些资源:特别是,一旦图表缩小,或者等效地,程序运行,就无法知道我开始使用了多少个组合子来实现这种行为。我有效地只跟踪未知/可变输入。因为Globular要求我这样做。)

    • 我之前的评论有点仓促。

      两个附录:

      我最后一句话是关于没有保留所有资源。
      我非常确信,在资源感知型系统中,这是胡说八道:计算每个系统的频率变量使用。组合词不是变量。这样就可以放心地忘记它们。

      其次,我还想澄清我所说的“保留构图”的限制是什么意思:

      取任意给定(可约)程序P的任何非可约(但可约,即它不应是无限循环)小Q子段,并分别查看。它本身就是一个有效的程序。

      现在,减少Q,将其转换为Q_r。

      将Q_r放回你切到P的孔中,保持所有电线的顺序不变。(Global还将强制执行接线顺序),从而获得新程序P'。

      降低P将产生P_r。
      减少P'将产生P'_r。

      我的主张是,(再次小心无限循环等),P_r=P'_r。

      至少在行为上。(我认为这意味着它们是eta-equivalent?)

      不同的执行顺序可以生成不同的精确布局。
      其中一些问题也应该是可以解决的,但我不确定所有问题都是:

      到目前为止,我还没有向Copy添加某些明显真实的重组规则:因为它只是复制一个输入,所以在同一输入处挂起的任意复制树将产生完全相同的结果。只有份数很重要。
      因此,交换性和关联性将对它们有效。
      添加这些将非常简单。也许我稍后会再更新一次,以获得这些关系。
      我不确定仅仅增加这些法律就足以使上述主张更加有力,我说它们甚至是确切地相同(在副本分支方式上的混乱可能会将一个副本转换为另一个副本)。
      不过,情况很可能就是这样。

      无论如何,我的真正观点是,如果你保留这些信息,你可以在输入端插入相同的东西,在还原之前和之后,最终行为将保持不变。

      通过删除这些信息(尤其是Eats,它们通常会完全消失),这就无法再得到保证。简化后的程序与未简化的程序具有不同数量的输入,因此您需要插入不同的程序才能开始。程序的组合将不再需要进行类型检查,如果确实如此,行为也不必相同,因为实际上,错误的连接最终会导致错误的输入。

      所有这些都与垂直构成有关。我认为水平合成完全没有问题,它只需将两个程序张量在一起,就可以得到一个输入和输出并排组合的新程序。

    • 现在我只有时间回答你最简单的问题:

      我的意思是问:你用什么语法来获取超链接文本?

      我使用HTML的时间有一半:

      <a href=“http://math.ucr.edu/home/baez/“>我的主页</a>

      我使用Markdown的时间减半,方式如下:

      [我的主页](http://math.ucr.edu/home/baez/)

      但降价并没有真正标准化,而且有几个微妙的不同版本,所以说“你可以使用降价”不是很清楚。你在这个博客上使用的具体版本的指南是什么?

      你应该能够从开始找到一个在这里因为我在博客中使用WordPress提供的某种默认版本的Markdown。但我不知道它是什么。我不想做任何花哨的事,所以看起来我想用Markdown做的一切都是在这个博客、Azimuth Forum(在名为“Vanilla”的论坛软件上运行)以及n个-Category Café(运行在名为“Moveable Type”的软件上,以及雅克·迪斯特勒(Jacques Distler)自制的许多额外功能)。

      欢迎您尝试一些东西,看看是否有效;我不介意每天花5分钟解决格式问题并进行讨论!

    • 好的,谢谢。我明白了,我也可以包括图片。这将大大改善上述许多评论。哦,好吧…

您可以在注释中使用标记或HTML。您也可以使用LaTeX,如下所示:$LaTeX E=mc^2$。“乳胶”一词紧跟在第一个美元符号之后,后面有一个空格。

该网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据.