类型理论的日常应用


10

我想了解类型理论,但是我首先必须知道如何应用它。除了在编程中使用类型系统之外,类型理论还会有更多非显而易见的应用吗?可以说其他应用程序,比如性格分析之类的吗?


2
为什么某些东西必须具有超出其发明目的的应用程序?
拉斐尔

3
数学基础?人们还使用类型理论来形式化诸如合成域理论,拓扑等之类的东西。克里斯·马滕斯(Chris Martens)也致力于使用类型理论工具对叙事故事进行建模。论文链接
Daniel Gratzer 2015年

1
可以澄清算作申请吗?
2015年

4
我不相信你的前提。假设有人说:“我想了解汽车工程,但首先必须知道我可以用汽车做什么。除了交通运输以外,还有其他非显而易见的应用吗?” 他们得到的答案是有人在汽车里睡觉,而安塞尔·亚当斯Ansel Adams)则用他作为拍照平台。很好,但这并不能帮助任何人理解工程知识,并且很可能会导致我们假设的学生设计具有超倾斜座椅和非常坚固的悬架的汽车。
David Richerby

3
事实是,尽管理论上很漂亮,但许多理论计算机科学(包括我从事的工作)实际上是无用的。不幸的是,你必须选择双方。
Yuval Filmus 2015年

Answers:


10

您可能对Chris Martens 博士研究的结果Ceptre的工作感兴趣,该研究使用类型理论进行交互式故事讲述。下面引用的是论文摘要

交互式讲故事将深厚的计算思想与人类丰富的故事和游戏历史结合在一起,为构建工具和语言提供了重要的环境。同时,正式的规范语言提供了表示和推理技术的调色板,通常保留用于分析编程语言和复杂的演绎系统。本文将交互式叙事领域中的问题与正式规范中的解决方案联系起来。

具体而言,我们从结构的角度检查叙事,并观察到替代叙事路径对同时发生的交互时间线起补充作用。线性逻辑提供了研究这种结构所必需的表示工具,并且通过将对应关系扩展到证明和证明构造,我们发现了一组计算可能性。我们为实现这些可能性进行了三项努力:(1)使用线性逻辑程序生成叙述;(2)一种用于编写交互式叙事,游戏和模拟的新编程语言;(3)陈述和证明设计级程序属性的技术。

我们发现,线性逻辑编程以对其逻辑语义的最小扩展而丰富,可以实现广泛的编程习惯用法和域编码。作为证据,我们给出了五个案例研究,包括社交模拟,基于战斗的冒险游戏和棋盘游戏。为了支持有关设计正确性的推理,我们提供了陈述和证明程序不变式的技术,以及用于自动检查那些不变式是否包含大量语言的可判定性证明。

这些发现表明,线性逻辑是一种富有成果的表示语言,可以用作建模和执行交互世界的基础,并且它们邀请将来对将证明理论方法用于创意系统进行研究。


1
这听起来像是在使用线性逻辑,而不是类型理论本身
大卫·里奇比

6
线性逻辑是类型论的基石。这项工作在很大程度上是类型理论作为一门学科的一部分(有些人将其工作与类型理论同等地描述为“证明理论”,尽管名称并不等同于“证明理论”中的某些其他著作,更特定于证明理论,而不是类型理论的核心)。
加什2015年

9

类型理论在语言学中有有趣的用途。参见例如Chung-chieh ShanChristianRétoré的语言著作。

下面引用的是Rétoré 关于分类语法的的描述:

本书是对Lambek著作所引发的逻辑传统中的分类语法的当代全面介绍。它指导学生和研究人员了解该领域的基本成果,提供许多经典定理的现代证明以及最新的原始进展。许多示例和练习从语言,计算和逻辑的角度说明了这些结果的动机和应用。Lambek演算及其变体以及相应的语法是这些讲义的核心。本章专门介绍这些分类语法的关键特征:它们非常优雅的语法语义界面。此外,我们将线性逻辑证明网适应于这些计算,因为它们提供了高效的解析算法,如Grail解析器所示。

以下引言是在Shan的《语言副作用》一书的介绍中:

本文将自然语言中明显的非组合性情况与编程语言中的情况联系起来。它的形状像一个沙漏:我从§1开始,介绍了一种语法-语义接口的方法,该方法可帮助我们建立组成语义理论。这种方法是在编程语言中的计算副作用与自然语言中的类比语言副作用之间进行类比。

这种联系可以使计算机科学家和语言学家受益,但是我在这里只关注技术转让的后一个方向。连续对于处理计算副作用很有用。在§2中,我介绍了一种用于语义延续的新元语言。

我介绍的元语言对于分析编程语言和自然语言很有用。为直观起见,我调查了§3中的第一次使用,然后指出了§4中这种处理的优点。

关于第5节中的自然语言,我将详细描述这种观点如何帮助Chris Barker和我学习约束力和交叉性,以及疑问和优越性。我还使用了续篇来研究量词和不定范围,特别是在普通话中,但是在§6中,这里没有空间来勾勒出这些进一步的发展。


9

由于存在Curry-Howard对应关系,因此类型可以解释为命题,而命题可以解释为类型。

结果,类型理论实际上适用于任何使用形式逻辑作为证明的领域。这可以是电路验证,实物分析,符号逻辑,几何形状等。

例如,一些自动的证明检查工具使用此原理工作:它们通过对某种类型系统中的特定术语进行类型检查来检查证明的有效性。LF校对检查器基于此方法,HOL Light也是如此。作为示例应用程序,携带证明的代码使用LF来检查不受信任代码的内存安全性证明。使用这种证明检查器的好处是实现可以非常简单,因此我们可以高度肯定实现是正确的。参见例如以下论文:

小证人的基础证明检查员。吴鼎好,安德鲁·W·阿佩尔,亚伦·树桩。PPDP 2003。


这可能会有所帮助:math.ucr.edu/home/baez/rosetta.pdf
别名

我认为这不能回答问题。那实际的应用呢?
Yuval Filmus 2015年

@YuvalFilmus定义“实际”?
David Richerby

1
您是否知道有人使用类型理论来证明有关电路验证,真实分析,符号逻辑或几何的新知识?还是我们只是在谈论某人使用20页类型理论来证明某些东西在基本教科书中占三行的情况?
David Richerby,2015年

@David这个答案是,原则上您可以使用类型理论来证明事物。同样,原则上我们可以使用元胞自动机来证明事物,因为规则110是图灵完备的。我认为前一种说法与后者一样没有意义。
Yuval Filmus

7

解释依赖类型应用的有趣文章是 The Power of Pi,它展示了如何使用Agda解决有趣的问题。

另一个很好的例子是使用依赖类型进行资源控制。一个很好的例子就是文件管理API 影响伊德里斯。例如,用于从文件读取行的函数具有以下类型

readLine  : { [FILE_IO (OpenFile Read)] } Eff String

它指定仅在打开文件的情况下此功能才适用。大括号中的列表指示可用的效果。在这种情况下,我们需要此功能具有打开文件以供读取的效果。

有关效果库的更多信息,请参见此处

另一个应用程序是将依存类型用于并发,如Idris的创建者在下一篇文章中报道的。


1
添加了更多示例。
罗德里戈·里贝罗

3

正如jmite的回答所述,电路/硬件/电子验证中的高阶逻辑/类型理论已经存在了数十年,如今已成为例行公事,以致于在进行了明显的转移努力之后,甚至没有注意到/将其视为“应用”。到1990年代,尽管它仍然是活跃的研究领域。从低级门逻辑到高级别/阶结构/子系统,Coq及其类型逻辑尤其在电路/硬件/电子验证中也有大量应用。这是一些关键参考


1
公平地说,大多数工业规模的实际硬件验证都是使用模型检查完成的,模型检查通常与类型理论无关(尽管最近已经架起了桥梁)。类型理论已被用于构建硬件描述语言(与编程语言相距甚远),您提供的大多数语言都属于此类,并且一些用于硬件验证的证明助手(尤其是原始的HOL,但不是最常用的PVS)是类型理论的Curry-Howard换位。
加什2015年

如果您在硬件验证方面具有更深的背景,那么在Computer Science Chat中听到更多详细信息将很有趣,但是认为/怀疑狭窄/分界线/概括在该领域不容易得出,例如在模型检查和类型理论之间。它可能需要进行非常细微的历史分析才能全面发现/分解具有不同目标的两个不同领域之间的联系,有时甚至超出了每个领域中专家的能力范围...总体而言,参考文献显示出强有力的联系,可以对其进行进一步分析。 ..
vzn15年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.