Types 对类型系统和类型理论的深入研究

Types 对类型系统和类型理论的深入研究,types,programming-languages,Types,Programming Languages,我想了解类型背后的实际理论,而不仅仅是学习一些现有语言中最新的实际变化(例如,不仅仅是Haskell或Scala的类型系统是如何工作的) 了解这一背景的最佳方法是什么?类型理论是一个很大的领域。首先,“类型”一词在计算机科学中是一种用词不当的说法,有几个原因,尽管它们主要用于相同的基本概念。类型出现在许多环境中,如哲学、计算机科学和数学,原因大致相同。数学中的类型起源于试图将集合论形式化和陷入本质悖论,尽管计算机科学中也出现了类似的悖论。(例如,我想指出吉拉德在这一点上的悖论) 目前,您可能解释

我想了解类型背后的实际理论,而不仅仅是学习一些现有语言中最新的实际变化(例如,不仅仅是Haskell或Scala的类型系统是如何工作的)


了解这一背景的最佳方法是什么?

类型理论是一个很大的领域。首先,“类型”一词在计算机科学中是一种用词不当的说法,有几个原因,尽管它们主要用于相同的基本概念。类型出现在许多环境中,如哲学、计算机科学和数学,原因大致相同。数学中的类型起源于试图将集合论形式化和陷入本质悖论,尽管计算机科学中也出现了类似的悖论。(例如,我想指出吉拉德在这一点上的悖论)

目前,您可能解释类型的方式是一种在70-90年代在计算机中流行的想法:类型是一种轻量级的流不敏感分析,允许我们对所编写的程序做出简洁的逻辑保证。类型可以用于此目的,但实际上您可以将它们一直带到编码高阶逻辑,程序就是证明。一旦你到了这里,你可以做一个证明,提取计算组件,然后把它变成一个程序,计算一个“正确”的结果(关于你证明的定理)

从这里可以走几条路:

  • 给自己拿一本本本·皮尔斯的《这是一本值得阅读的书》,也是计算机科学领域最好的书之一。它涵盖了我们为什么需要类型的理论,以及我们如何使用它们来强制我们的程序约束
  • 学习一种语言,在这种语言中,您可以定期使用类型来强制执行有关程序语义的内容。特别是,您可以学习OCaml、Haskell或Agda。Haskell似乎是目前最好的选择,它有相当多的扩展,使它非常有吸引力,并且是一个非常活跃的用户社区。事实上,在顶级会议上发布的结果在短短几年内就在社区中广泛使用,这是很常见的
  • 学习使用基于构造型理论的定理证明器。在我看来,这是探索类型理论背后真正问题的唯一真正途径。有很多不错的选择,尽管科克和伊莎贝尔现在是真正的竞争者。柯克有一个很大的优势:本·皮尔斯也有一本书涵盖了这一点!深入介绍了编程语言中的大量理论,并且您可以真正使用它来证明问题
您可能还需要查看几个相关字段:

  • 范畴理论是一种数学,它往往是这些东西的基础。例如,可以对这些语言中给出的(共)归纳数据类型进行分类解释
  • 逻辑。学习一点好的传统逻辑是有帮助的,尽管我相信你所需要的大部分东西都可以从本·皮尔斯的科幻小说中找到。然而,仍然有很多关于旧系统(顺序演算和自然演绎)的参考
  • 了解Haskell社区!正如我所说的,他们正在迅速行动,并就计算机科学中的类型提出深入的问题
  • 有很多很棒的文章
除此之外,我还有一些很好的学习建议,但我肯定会从本·皮尔斯的书开始(我从来没有真正读过后续书《类型和计算机科学的高级主题》,但你可能对此也很感兴趣)。特别是,我记得《自动推理手册》中有一篇关于高阶类型理论的伟大文章


另外,我确信这个问题的答案是“获得编程语言、哲学或逻辑博士学位…”;-)

≈在找到答案半个星期后,我正在读本杰明的书,我不得不说这不是很好。首先,理解这本书需要成熟的数学符号(除了特定论文或书的作者定义的符号外,没有其他符号)。第二,我正在浏览λ-微积分一章,作者要么对自己的符号解释不好,要么一些公式就是错的。顺便说一句,我知道λ-结石!我恭敬地表示不同意。我还没有看到一个更容易理解的类型理论介绍。以经济的方式定义所有符号,然后使用它以“自举”的方式定义其余类型,而不参考传统的符号(借用,比如说,模型理论),这是PL的核心思想。你能指出错误的公式吗?我以前教过这本书,我相信作者很想知道。啊,好吧,我确实理解了我要抱怨的符号(第55页底部的符号),但是FWIW我想我在思考/写这本书到底有什么问题时花了大约15-20分钟。总的来说,这本书给我留下了一种感觉,作者还没有说一些重要的话,所以我正在仔细学习记谱法,但它从未发生过。但很可能,这就是类型理论。现在,对我来说,直接练习Haskell和学习范畴理论似乎更有用(我知道一点,并且认为它很有用)。