Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

附录A:术语表

本术语表用于统一本教程中的中英文术语和最小定义。它的目标不是替代正文,而是帮助你在阅读时快速确认:

  • 这个词在本教程里具体指什么;
  • 它和相近概念有什么区别;
  • 它在英文文献中通常对应哪个词;
  • 它主要在哪一章进入主线讨论。

阅读提示

  1. 术语表中的定义以“本教程语境下够用”为原则,力求简明。
  2. 某些术语在不同文献中会有更强或更弱的版本;若存在这种情况,条目中会尽量提示。
  3. 术语表中的公式只用于帮助识别,不替代正文中的完整规则与推导。
  4. 为了把本附录同时做成“术语索引”,各小节标题后都补上了“主要对应章节”;若你忘了某个概念最该回看哪里,可以先看这些导航。
  5. 若正文中某个术语首次出现时给了英文原文,而你后来又忘了,也可以直接回到这里统一查。

A.1 Lambda 演算与语法相关术语(主要对应第 2–3 章)

中文英文本教程中的含义主要回看
term形式系统中的语法对象。在 Lambda 演算中,项由变量、抽象、应用等构造生成。第 2–3 章
变量variable出现在项中的名字,如 xyz第 2–3 章
抽象abstraction函数定义,记作 λx.t。其中 x 是参数,t 是函数体。第 3 章
应用application函数调用,记作 t1 t2,表示把 t1 应用于 t2第 3 章
绑定变量bound variable被某个抽象绑定的变量出现。例如在 λx.t 中,由这个 λx 管辖的 x 是绑定的。第 3 章
自由变量free variable不受任何抽象绑定的变量出现。自由变量反映一个项对外部环境的依赖。第 3 章
自由变量集合set of free variables记作 FV(t),表示项 t 中所有自由变量的集合。第 3 章
作用域scope某个绑定生效的语法范围。第 3 章
封闭项closed term没有自由变量的项。第 3 章
组合子combinator在很多语境下,指没有自由变量的 Lambda 项。为避免歧义,本教程更常使用“封闭项”;在讨论 SKI 时会保留“组合子”这一说法。第 3 章、附录E
α-等价alpha-equivalence只改变绑定变量名字而不改变绑定结构时得到的等价关系。第 3 章
α-重命名 / α-转换alpha-renaming / alpha-conversion安全地修改绑定变量名,以避免冲突或变量捕获。第 3 章
替换substitution记作 [x ↦ s]t,表示把 t 中自由出现的 x 替换为 s第 3 章
避免捕获的替换capture-avoiding substitution替换时保证不会把原本自由的变量意外变成绑定变量。第 3–4 章
变量捕获variable capture替换过程中,自由变量因同名绑定而被错误“吃掉”的现象。第 3 章
新鲜变量fresh variable一个当前上下文中尚未使用、因此不会引发冲突的变量名。第 3 章

A.2 Lambda 演算中的计算术语(主要对应第 4 章)

中文英文本教程中的含义主要回看
β-归约beta-reductionLambda 演算的核心计算规则:(λx.t) s → [x ↦ s]t第 4 章
β-redex / 可归约表达式beta-redex / reducible expression形如 (λx.t) s 的项,可执行一次 β-归约。文献中常简称 redex第 4 章
归约关系reduction relation描述一个项如何一步变成另一个项的关系。第 4 章
单步归约one-step reduction记作 t → t',表示 t 经过一步计算变成 t'第 4 章
多步归约multi-step reduction记作 t →* t',表示经过零步或多步计算从 t 到达 t'第 4 章
范式normal form相对于某个归约关系,已经无法继续归约的项。第 4 章
value相对于某个求值策略,被视为“计算完成”的项形态。值与范式相关,但不是同一个概念。第 4 章、第 5 章
发散divergence一个项永远继续归约、无法到达范式的现象。第 4 章、附录D
合流性confluence若一个项能沿不同路径归约,则这些路径仍可重新汇合的性质。第 4 章
Church–Rosser 定理Church–Rosser theoremLambda 演算合流性的经典结果。其重要推论是:若某项有范式,则该范式在 α-等价意义下唯一。第 4 章
归约策略reduction strategy当一个项中有多个可归约位置时,优先选择哪一个归约。第 4 章
求值策略evaluation strategy编程语言层面对“先算哪里、何时把参数算成值”的更具体约定。第 4 章、附录D、附录E
传名调用call-by-name调用函数时,不先把参数求值为值,而是先把参数项代入函数体。第 4 章、附录D
传值调用call-by-value调用函数时,先把参数求值为值,再进行函数应用。第 4 章、附录D、附录E
按需求值call-by-need一种与传名调用接近但带共享的惰性求值策略。Haskell 通常以此为典型例子。第 4 章
小步语义small-step semantics通过单步关系 t → t' 描述程序如何一步步执行。第 4–5 章
大步语义big-step semantics通过关系 t ⇓ v 直接描述程序最终求值到什么结果。第 4 章
卡住状态stuck term / stuck state既不是值,又无法继续按照求值规则前进的项。这个概念通常在扩展语言(如带布尔值、自然数等)中讨论最自然。第 4–5 章
η-归约eta-reduction形如 λx. f x → f 的化简,通常要求 x 不自由出现在 f 中。它表达了函数外延性的一种形式。第 4 章(补充概念)

A.3 类型系统核心术语(主要对应第 5 章)

中文英文本教程中的含义主要回看
类型type对项进行静态分类的标签,用来约束其可能的计算行为。第 5 章
类型系统type system一种可判定的语法方法,通过为程序片段赋予类型,排除某类被禁止的错误行为。第 0 章、第 5 章
类型判断type judgment形如 Γ ⊢ t : T 的判断,表示“在环境 Γ 下,项 t 的类型是 T”。第 5 章
类型环境type context / typing environment变量到类型的有限映射,通常记作 Γ第 5 章
类型规则typing rule规定什么条件下可以推出某个类型判断的推导规则。第 5 章
类型检查type checking在给定必要类型信息的情况下,验证一个项是否符合类型规则。第 5 章
类型推断type inference在类型注解不完整或缺失时,自动恢复类型信息。第 9 章
良类型well-typed一个项若能在某环境下导出合法类型判断,则称其在该环境下良类型。第 5 章
类型安全type safety / type soundness在选定语言与错误模型下,良类型程序不会进入被系统禁止的坏状态。常通过进展性与保持性表达。第 5 章
进展性progress良类型的封闭项要么已经是值,要么还可以继续求值。第 5 章
保持性preservationΓ ⊢ t : Tt → t',则仍有 Γ ⊢ t' : T。也常称 subject reduction。第 5 章
subject reductionsubject reduction保持性的常见别名,强调“归约保持类型”。第 5 章
可判定性decidability存在一个总会在有限时间内结束的过程,用来判断某个性质是否成立。第 0 章、第 5 章
声明式类型规则declarative typing先说明“什么情况下一个类型判断成立”的规则写法,不一定直接对应最简洁的检查算法。第 5–6 章
语法制导syntax-directed规则与语法构造直接对应,因此检查过程通常可以沿语法树递归进行。第 5–6 章
代换引理substitution lemma若某项在扩展环境下良类型,而替换进去的值类型匹配,则替换后的项仍保持原类型。第 5 章
强正规化strong normalization所有良类型项都在有限步内归约到范式的性质。不是所有类型系统都满足这一性质。第 5 章、附录D
Church 风格Church-style项本身携带显式类型注解的风格,如 λx:T.t第 5 章
Curry 风格Curry-style项本身不直接携带类型注解,类型由外部规则或推断系统赋予的风格。第 5 章、第 9 章

A.4 一阶类型构造相关术语(主要对应第 6 章)

中文英文本教程中的含义主要回看
基础类型base type不再通过更小类型构造出来的类型,如 BoolNatUnit第 6 章
单位类型unit type只有一个值的类型,常记作 Unit。它更接近“无有趣返回值的结果类型”,不应简单等同于 null第 6 章
自然数类型natural number type理想化的自然数类型,通常记作 Nat。它与现实语言中的机器整数相关,但不完全等同。第 6 章
积类型product type形如 T1 × T2 的类型,表示同时包含一个 T1 和一个 T2第 6 章
和类型sum type形如 T1 + T2 的类型,表示“要么是 T1,要么是 T2”,通常带有标记。第 6 章
左注入left injection构造和类型左侧分支的项,常写作 inl(t)第 6 章
右注入right injection构造和类型右侧分支的项,常写作 inr(t)第 6 章
分支分析case analysis对和类型值进行分类处理的形式,通常写作 case ... of ...第 6 章
记录类型record type带字段名的积类型,如 {name:String, age:Nat}。在本教程后续子类型讨论中,默认按结构性记录来理解。第 6 章、第 8 章
递归类型recursive type允许类型引用自身的类型,常写作 μX.T第 6 章
同构递归iso-recursiveμX.T 与其展开式看作非常接近、但仍需显式 fold / unfold 往返的递归类型视角。第 6 章
等价递归equi-recursiveμX.T 与其展开式直接视为同一个类型的递归类型视角。第 6 章
foldfold把递归类型展开后的结构重新“包回”递归类型。第 6 章
unfoldunfold把递归类型“打开一层”,得到其展开形式。第 6 章
可变引用mutable reference指向某个可变存储位置的引用类型,常写作 Ref(T)第 6 章、第 8 章
解引用dereference从引用中读出其当前内容的操作。第 6 章
赋值assignment向某个可变引用写入新值的操作。第 6 章
存储类型store typing在带可变存储的语言中,用来跟踪堆中位置应存储何种类型信息的辅助结构。第 6 章

A.5 多态、二阶系统与抽象相关术语(主要对应第 7 章)

中文英文本教程中的含义主要回看
参数化多态parametric polymorphism程序对任意类型都以统一方式工作的一类多态。第 7 章
二阶类型系统second-order type system允许对类型变量进行抽象与应用的类型系统。第 7 章
System FSystem F最经典的参数化多态理论系统之一,也叫二阶 Lambda 演算。第 7 章
类型变量type variable出现在类型中的占位符,如 XYα第 7 章、第 9 章
全称类型universal type形如 ∀X.T 的类型,表示“对任意类型 X,都有 T”。第 7 章、第 9 章
类型抽象type abstraction对类型变量的抽象,常写作 ΛX.t第 7 章
类型应用type application把多态项实例化到某个具体类型,常写作 t[T]第 7 章
存在类型existential type形如 ∃X.T 的类型,表示存在某个类型 X 使 T 成立,常用于隐藏实现类型。第 7 章
打包pack把某个具体实现连同其隐藏类型一起封装成存在类型值。第 7 章
拆包unpack打开存在类型值,在受限作用域内以抽象方式使用其隐藏实现。第 7 章
抽象数据类型abstract data type (ADT)隐藏内部表示,只暴露操作接口的数据抽象方式。注意这里的 ADT 指 abstract data type,不是 algebraic data type。第 7 章
类型算子type operator以类型为输入、产生新类型的类型层函数。第 7 章
kind / 种类kind用来区分“普通类型”“从类型到类型的构造器”等层级的分类工具。本教程只做方向性介绍。第 7 章

A.6 子类型与变化方向相关术语(主要对应第 8 章)

中文英文本教程中的含义主要回看
子类型subtypeS <: T,表示任何需要 T 的地方都可以安全地使用 S第 8 章
安全替换safe substitution / safe replacement子类型最核心的直觉:更具体的值可以放到要求更一般类型的位置。第 8 章
subsumptionsubsumption通过 S <: T 把一个已有类型 S 的项提升为类型 T 的规则。第 8 章
自反性reflexivity子类型关系满足 T <: T第 8 章
传递性transitivityS <: UU <: T,则 S <: T第 8 章
宽度子类型化width subtyping对记录而言,字段更多的记录可作为字段更少记录的子类型。第 8 章
深度子类型化depth subtyping对记录而言,若对应字段类型更具体,则整体记录类型也可更具体。第 8 章
协变covariance子类型关系与类型构造方向一致。常见于函数返回值、许多只读结构。第 8 章
逆变contravariance子类型关系与类型构造方向相反。经典例子是函数参数。第 8 章
不变invariance既不协变也不逆变,通常要求类型完全相同。可变引用常是这种情形。第 8 章

A.7 类型推断相关术语(主要对应第 9 章)

中文英文本教程中的含义主要回看
Hindley–MilnerHindley–Milner (HM)最经典的可推断多态类型系统之一。本章主要以它为背景介绍类型推断。第 9 章
约束生成constraint generation从项结构出发,收集“这些类型必须相等 / 必须匹配”的条件。第 9 章
合一unification求解类型等式,寻找使这些等式同时成立的替换。第 9 章
替换substitution把类型变量统一替换成具体类型或其他类型表达式的映射。第 9 章
最一般合一器most general unifier (MGU)在所有能解决约束的替换中,最不“多做承诺”的那个。第 9 章
occur checkoccur check在合一时检查一个类型变量是否出现在待替换目标内部,以防构造无限类型。第 9 章
无限类型infinite type形如 α = α -> β 这类需要无限展开的类型。标准 HM 不允许。第 9 章
类型方案type scheme可被多次实例化的一类类型,通常写作 ∀α1...αn.T。在 HM 中,它主要出现在环境里,而不是像 System F 那样直接作为对象语言项的一部分。第 9 章
主类型principal type在给定系统中,一个项最一般、最不多做承诺的类型;若其他可赋予的类型都可由它实例化得到,就称它是主类型。第 9 章
主类型方案principal type scheme对多态绑定而言,最一般的类型方案;HM 系统的重要性质之一就是很多项都存在主类型方案。第 9 章
泛化generalizationlet 绑定处,把不受当前环境约束的类型变量量化为类型方案。第 9 章
实例化instantiation在使用多态绑定时,把类型方案中的量化变量替换为新的具体类型或新鲜类型变量。第 9 章
let 多态let polymorphismlet 绑定的名字可以被泛化为多态类型方案,并在不同使用点独立实例化。第 9 章
算法 WAlgorithm WHM 推断的经典算法。它递归推断项的类型,并返回替换与类型。第 9 章

A.8 子结构类型系统相关术语(主要对应第 10 章)

中文英文本教程中的含义主要回看
子结构类型系统substructural type system通过禁止部分结构规则来限制变量使用方式的类型系统。第 10 章
结构规则structural rules逻辑与类型环境中关于假设使用方式的规则,如交换、弱化、收缩。第 10 章
交换exchange允许改变环境中假设的顺序。第 10 章
弱化weakening允许把一个根本没用到的假设加入环境。第 10 章
收缩contraction允许同一假设被重复使用。第 10 章
线性类型linear type要求变量恰好使用一次的类型纪律。第 10 章
仿射类型affine type要求变量至多使用一次。与线性相比,允许不用。第 10 章
相关类型relevant type要求变量至少使用一次。第 10 章
有序类型ordered type要求变量恰好使用一次,并且按环境顺序使用。第 10 章
限定符qualifier用来区分线性值与无限制值的标记,如 linun第 10 章
环境分裂context splitting在应用等需要两个子推导的地方,把环境划分给左右子项的机制;线性变量通常只能分给一侧。第 10 章
线性函数linear function在参数使用上服从线性纪律的函数类型,常记作 A ⊸ B 或类似变体。第 10 章
无限制值unrestricted value可以自由复制、丢弃和重排使用的普通值。第 10 章
所有权ownership资源由哪个绑定负责使用与释放的纪律。Rust 中常以此实现仿射式资源控制。第 10 章
借用borrowing在不转移所有权的情况下临时获得访问权限的机制。第 10 章
会话类型session type用于描述通信协议的类型系统,常与线性 / 有序资源思想相关。第 10 章

A.9 逻辑与元理论相关术语(贯穿全书;第 1、5、8、10 章尤为重要)

中文英文本教程中的含义主要回看
推导规则inference rule形如“若前提成立则结论成立”的形式化规则。第 1 章、第 5 章
推导树derivation tree由推导规则逐层构造出的树形证明对象。第 1 章、第 5 章
公理axiom没有前提的推导规则。第 1 章
归纳定义inductive definition通过基础情况与构造规则定义一个无限对象族的方法。第 1–3 章
结构归纳法structural induction对按归纳定义生成的对象结构做归纳证明的方法。第 1 章、第 5 章
推导归纳法induction on derivations对推导树结构做归纳的证明方法。第 1 章、第 5 章
Curry–Howard 对应Curry–Howard correspondence在合适的形式系统中,“类型对应命题、项对应证明”的深刻联系。第 6–7 章
合取conjunction逻辑中的“且”,常与积类型对应。第 6 章
析取disjunction逻辑中的“或”,常与和类型对应。第 6 章
蕴含implication逻辑中的“如果……那么……”,常与函数类型对应。第 5 章

A.10 术语之间最容易混淆的几组概念(可作为快速回查索引)

1. 值 vs 范式

  • 是相对于求值策略定义的“计算完成形式”;
  • 范式是相对于某个归约关系定义的“无法继续归约”;
  • 在简单系统里二者常重合,但来源不同,不应直接混为一谈。

2. 封闭项 vs 组合子

  • 封闭项的定义是“没有自由变量的项”;
  • 组合子在很多文献里常指封闭 Lambda 项,尤其在 SKI 语境中;
  • 为避免歧义,本教程优先使用“封闭项”,并在适合时说明其与“组合子”的关系。

3. 抽象数据类型(ADT)vs 代数数据类型(ADT)

  • abstract data type:强调隐藏表示、暴露接口;
  • algebraic data type:通常指由和类型、积类型等代数组合得到的数据类型;
  • 两者英文缩写都常写成 ADT,因此阅读时必须看上下文,不应直接混用。

4. 类型检查 vs 类型推断

  • 类型检查:给定足够多的类型信息,验证程序是否符合规则;
  • 类型推断:在类型信息缺失时,自动恢复这些信息;
  • 二者相关,但不是一回事。

5. Church 风格 vs Curry 风格

  • Church 风格:项中显式写类型注解;
  • Curry 风格:项中不直接写类型注解,类型由系统外部赋予或推断;
  • “显式 / 隐式”只是表面差异,背后关系到检查与推断方式。

A.11 进阶附录相关术语索引

下面这些词主要出现在进阶附录中,但为了让本附录更像全书索引,这里也统一收录。

中文英文本教程中的含义主要回看
不动点fixed pointf(x) = x,则称 xf 的一个不动点。附录D
不动点组合子fixed-point combinator给定函数 f,能够构造出某种不动点的 Lambda 项。附录D
Y 组合子Y combinator最经典的不动点组合子之一,通常与传名调用语境联系最紧。附录D
Z 组合子Z combinator为传值调用语境常见的递归编码而使用的一个变体不动点组合子。附录D
Church 编码Church encoding用函数来表示布尔值、自然数等数据与操作的一类编码方法。附录E
Church 布尔值Church booleans把布尔值编码成“二选一函数”的表示方式。附录E
Church 数Church numerals把自然数编码成“重复作用若干次”的高阶函数。附录E

A.12 一句话回顾

如果把本教程中的术语主线压缩成一句话,可以这样说:

语法定义程序长什么样,语义定义程序如何计算,类型系统定义哪些程序被允许,而元理论说明这些限制为什么可靠。

术语表中的大多数词,最终都可以放回这条主线中理解;而“主要回看”这一列,则是帮助你把这些术语重新挂回对应章节的导航索引。