type_theory

Luna-Flow/type_theory 是 Luna Flow 各符号计算包的语义基底:为每个含变量的 AST 共享一套关于名字、绑定、避免捕获的代换和重写的定义,并提供无类型与简单类型 λ 演算的参考实现,兼具小步归约与基于求值的范式化。本手册记录的是 MoonBit 0.10 上的 0.2.0 版本。

包

每个包都有 API 参考(可以调用什么)、教程(如何使用)和设计说明(其背后的数学与决策)。每个包的 pkg.generated.mbti 文件是其公开名字的权威列表。

包内容页面
core名字、新名字、上下文、伸缩式、有限重命名API · 教程 · 设计
syntax泛型具名 Term[T]、自由变量、α-等价、开放的 BindingSyntax traitAPI · 教程 · 设计
substitution在 Term[T] 及任意 BindingSyntax AST 上的同时、避免捕获的代换API · 教程 · 设计
rewrite带规则名与路径的单步重写、有界范式化、轨迹API · 教程 · 设计
eval具名策略:正规序、应用序、弱头API · 教程 · 设计
debruijnDe Bruijn 项、转换、作用域检查、移位、无名 βAPI · 教程 · 设计
utlc/lambda无类型 λ 演算:β、η、正规序范式化API · 教程 · 设计
utlc/nbe受燃料限制的无类型基于求值的范式化API · 教程 · 设计
stlc简单类型 λ 演算:双向类型检查、η-长形式的有类型 NbEAPI · 教程 · 设计
adapter针对下游 BindingSyntax 实现的契约测试(无公开 API)API · 教程 · 设计

这些包构成层次;每个包只依赖于其上方的包:

core
 └─ syntax
     ├─ substitution
     ├─ rewrite ── eval
     │    └─ debruijn ── utlc/nbe
     └─ utlc/lambda (substitution, eval)
          └─ stlc (debruijn, utlc/lambda)

指南语义架构说明了各层如何组合在一起,以及三个范式化器之间的关系。

阅读路线

初次使用本库。 从 syntax 教程开始,然后是 substitution 和 rewrite。这三者足以安全地操作带绑定子的项。

适配你自己的 AST。 阅读 adapter 教程,它为一个小型表达式语言实现 BindingSyntax,并在其上使用泛型代换与重写;然后阅读 adapter 设计,了解你的实现必须满足的定律。

使用 λ 演算。 依次阅读 utlc/lambda、eval、debruijn、utlc/nbe 和 stlc。

贡献者与审阅者。 阅读设计页面:它们以数学方式定义每个操作,推导其定律,并说明每个包刻意不做什么。正确性检查清单记录了经审计的不变式与已知问题;对代换、α-等价、移位、β 实例化、quote 或燃料计量的修改都必须更新它。

安装

moon add Luna-Flow/type_theory@0.2.0

然后在 moon.pkg 中导入你需要的包,例如:

import {
  "Luna-Flow/type_theory/core",
  "Luna-Flow/type_theory/syntax",
  "Luna-Flow/type_theory/substitution",
}

本库不依赖任何 Luna Flow 包;moonbitlang/quickcheck 仅用于其测试。

工具链

代码需要 MoonBit moonc 0.10 或更高版本,并可在所有目标(wasm-gc、wasm、js、native)上构建。在仓库根目录运行检查:

moon check --target all
./run_test.sh
moon info

使用者

诸如 luna-poly 和 floating 等下游 Luna Flow 仓库构建于这些包之上;它们各自的手册说明了具体方式。