λ演算中的有类型λ-演算
字数 913 2025-11-19 09:13:12
λ演算中的有类型λ-演算
有类型λ-演算通过为项赋予类型来扩展无类型λ-演算,从而在语法层面排除某些不合理的项(如自应用),同时保持计算的表达能力。下面我将逐步介绍其核心概念。
-
类型的基本构成
- 类型由基础类型(如
Nat、Bool)和函数类型(如A → B)通过语法规则递归定义。例如,若A和B是类型,则A → B表示输入类型为A、输出类型为B的函数类型。 - 类型系统的目标是确保每个项都有唯一确定的类型,并通过类型规则在项构造过程中验证类型一致性。
- 类型由基础类型(如
-
类型上下文与判断
- 类型上下文(记为
Γ)是一个有限映射,将变量与类型关联(如x:A, y:B)。它记录了当前作用域内变量的类型信息。 - 类型判断的形式为
Γ ⊢ M : A,表示在上下文Γ下,项M具有类型A。例如,若Γ包含x:A,则Γ ⊢ x : A成立。
- 类型上下文(记为
-
类型规则
- 变量规则:若变量
x的类型在上下文中定义为A,则可以直接推断其类型:Γ, x:A ⊢ x : A。 - 函数抽象规则:若在扩展上下文
Γ, x:A下,项M的类型为B,则可构造函数λx.M,其类型为A → B。规则写为:Γ, x:A ⊢ M : B ⇒ Γ ⊢ (λx.M) : A → B。 - 函数应用规则:若项
M的类型为A → B,项N的类型为A,则应用M N的类型为B。规则为:Γ ⊢ M : A → B且Γ ⊢ N : A ⇒ Γ ⊢ (M N) : B。
- 变量规则:若变量
-
类型安全性与规约
- 类型系统保证“良类型项不会卡住”:若
Γ ⊢ M : A且M可规约,则规约后的项仍具有类型A(保持引理),且要么是值,要么可继续规约(进展引理)。 - 例如,项
(λx:Nat. x) 5中,若5被赋予类型Nat,应用规则确保规约结果5的类型仍为Nat。
- 类型系统保证“良类型项不会卡住”:若
-
类型系统的扩展与变体
- 简单类型λ-演算可扩展为多态类型(如System F),允许类型变量和通用量化,从而支持更灵活的多态函数。
- 依赖类型系统(如LF)进一步允许类型依赖项,使得类型可表达更复杂的规范(如列表长度)。