免费午餐
这篇论文最大的教训是相信约翰·贝兹所说的道数学方面。两年来,Mike和我以及Greg Meredith一直在寻找为编程语言生成逻辑的方法;我们尝试了很多方法,但最终解决方案是最简单的。
范畴理论的两个事实免费提供了丰富的结构:
嵌入保留了极限和指数,因此我们可以将其应用于“高阶理论”。
现在我们来探讨拓扑的语言。有多个视图,并且通常未使用其全部功能。拓扑支持几何逻辑、谓词逻辑,而且相依型理论我们强调后者:依赖类型具有表达性和普遍性,但在数学中未得到充分利用。
拓朴人的语言
我的想法是由这样一个想法形成的:即使是基础也是明确的。实际上,任何语言都可以建模为结构化类别:我发现最全面的参考文献是范畴逻辑与类型理论作者:Bart Jacobs。
逻辑中研究最多的范畴结构可能是地形槽轮的拓扑,即将数据相干地赋给空间的函子,首先应用于代数几何。连续地图产生反像它是保持有限极限的左伴随。这给了几何态射地形,以及几何逻辑(和)作为的语言对地形进行分类.
尽管几何逻辑是通用性的一个重要层次,但拓扑语言更强大。在1965年加利福尼亚州的拉荷亚,萌芽中的范畴理论界承认格罗森迪克的滑轮范畴是基本的逻辑结构,它概括了集合论。安基本地形是一个具有有限极限的笛卡尔闭范畴和一个子对象分类器,一个表示谓词和子对象对应关系的对象。
基本拓扑T的语言封装在一对结构中。
谓词逻辑
在整个数学中,我们使用Set的内部谓词逻辑。这是拓扑的典型示例:谓词,如是一个函数,对应于其理解,真项的子对象.
任意集合上的谓词形成布尔代数,按暗示排序。每个功能给出了一个反向图像 。这定义了一个函子哪一个是第一订单超学说:每个有伴随词表示量化,满足Beck-Chevalley条件。
总之,这种结构形式化了经典的高阶谓词逻辑。大多数公式,例如
可以在Set的逻辑结构中建模。
这个想法相当有名;人们经常谈论拓扑的“米切尔-贝纳布语”。然而,该语言是谓词逻辑简单类型理论,这意味着唯一的类型形成规则是产品和功能。数学中的许多结构不适合这种语言,因为类型通常取决于术语:
这是通过使用依赖类型扩展谓词逻辑来实现的,将在下一节中进行描述。
因此,我们简要讨论了集合的结构如何允许日常数学中使用的谓词的显式构造。重要的是,这些可以被构建在任何地形中我们由此概括了逻辑的历史概念。
例如,在预处理拓扑中排除中间派的法则不成立,这是有充分理由的。a的否定筛子,筛子它必然比子集的否定更微妙,因为我们必须排除同态不在其中,而是“预合成”到筛子中的可能性。这将在应用程序帖子中进行更多探索。
依赖型理论
依赖性在数学中普遍存在。什么是幺半群?这是一套、和然后操作在、和然后条件。大多数对象是在中构造的层每一个都取决于以前的。类型理论通常被视为“幻想”,只有在复杂的情况下才有必要,类似于对范畴理论的误解;然而,依赖类型无处不在。
基本思想是使用前映像.依赖于另一类型的项的类型,,可以理解为索引集,这又表示为一个函数因此,“依赖于“是切片类别设置.
“的偏序集-谓词“位于类别内”-类型“:理解是注入。这是一种退化的依赖类型,其中预映像是真理值而不是集合。因此,我们正在扩展到一个更大的环境,它共享所有相同的结构。切片类别集是对:它的形态是交换三角形,被理解为-索引函数。
每个功能给出函子设置设置拉回;这推广了前映像,可以表示为替换:给定,我们可以形成-类型
这个函子有伴随词,已调用相依和和从属产品:这些是构造依赖类型的强大工具。它们不仅推广了量化,而且还推广了乘积和hom:三重附加词在Set上诱导了伴随co/monad
这些依赖的产品和功能类型的泛化非常有用。
索引和通过允许第二个坐标的类型取决于第一个坐标中的项来概括产品类型。例如:由依赖对组成.
索引乘积通过允许共域的类型取决于域中的项来概括函数类型。例如:由相关函数组成.
看看它们有多自然?我们一直在使用它们,往往没有意识到。简单地通过使用preimage进行索引,我们将产品和函数类型概括为“分支”版本,从而允许我们构建复杂的对象,例如
此丰富的语言位于任何地形。我认为我们几乎没有开始看到它在数学、计算和日常生活中的作用。
所有人一起
拓扑有两个系统,谓词逻辑和依赖类型理论。每个模型都由纤维化,拓扑的函子,其中的前像是-谓词/-类型。域中的态射是对“在这些(依赖)类型的变量上下文中,该术语属于这种(依赖)型”形式的判断。
通过将谓词转换为类型的理解和将类型转换为谓词的图像分解,这两个fibration被连接起来。这些说明谓词fibration是fibration类型的反射子类。
总之,这形成了全高阶相关型理论地形图。据我所知,这是一种值得称道的拓扑斯的“语言”。这种类型的理论用于证明助手,如Coq和Agda;最终,这种表达性逻辑+依赖类型将在许多编程语言中使用。
结论
本机类型理论为广泛的语言类提供了一个共享的推理框架。我们认为,如果集成到现有系统中,这可能会对软件和系统设计产生重大影响。
在下一篇文章中,我们将探讨为什么这种语言对拓扑如此有用理论上的预升。请让我知道对这篇文章,尤其是论文的任何想法或问题。谢谢您。