自底向上的 β 归约与高阶分离逻辑
自底向上的 β 归约算法特性
自底向上的 β 归约算法的一个有趣特性是它利用了非持久性。在许多应用场景中,如果不需要数据的持久性,那么就无需为持久性付出额外的代价。传统的选择通常是持久化的,而该算法提供了一种不同的设计思路。例如,Lamping 图上的归约也不具备持久性,这从不同的角度看,既可能是一种限制,也可能是提高效率的来源。
另一个关键问题是回读。对于那些在归约过程中不需要检查项结构的应用来说,其需求具有更大的灵活性。但如果回读是必需的,那么 Lamping 图和 SLC 就不那么有吸引力了。而使用该算法的表示方式进行回读是免费的,因为有向无环图(DAG)的一个优点是它可以像树一样容易地被查看,无需进行转换。
因此,自底向上的 β 归约技术非常适合那些(1)不需要持久性,但(2)需要细粒度回读的应用。
算法核心思想
该算法结合了两个关键思想:
- 将 λ 项表示为 DAG,以允许由 β 归约引起的共享。
- 引入子节点到父节点的反向指针和 λ 到变量的链接,以有效地指导搜索和构造。
第一个思想允许在一个项内进行共享,而第二个思想允许在归约过程中进行共享。这两个思想实际上是相互促进的:为了利用反向指针,需要 DAG 表示,这样在构建项时就无需复制被替换变量的子项,这也是算法实现速度和空间效率的来源。
算法优势
该算法简单直接,无需使用组合子、de Bruijn 索引或挂起等模糊转换来表示项,这对于需要检查项的 λ 演算客户端来说是一个很好的特性。此外,在图归约领域,它是完全惰性的。