Skip to main content
QUICK REVIEW

[论文解读] Dependently Typed Folds for Nested Data Types

Peng Fu, Peter Selinger|arXiv (Cornell University)|Jun 13, 2018
Logic, programming, and type systems参考文献 13被引用 3
一句话总结

本文引入了嵌套数据类型的依赖类型折叠,通过依赖类型语言中的良基递归,实现了完全的、可形式化验证的编程。该方法将传统折叠推广至嵌套类型,生成的归纳原理支持形式化验证,且无需依赖非预判公理或证明无关性。

ABSTRACT

We present an approach to develop folds for nested data types using dependent types. We call such folds $ extit{dependently typed folds}$, they have the following properties. (1) Dependently typed folds are defined by well-founded recursion and they can be defined in a total dependently typed language. (2) Dependently typed folds do not depend on maps, map functions and many terminating functions can be defined using dependently typed folds. (3) The induction principles for nested data types follow from the definitions of dependently typed folds and the programs defined by dependently typed folds can be formally verified. (4) Dependently typed folds exist for any nested data types and they can be specialized to the traditional $ extit{higher-order folds}$. Using various of examples, we show how to program and reason about dependently typed folds. We also show how to obtain dependently typed folds in general and how to specialize them to the corresponding higher-order folds.

研究动机与目标

  • 为解决嵌套数据类型缺乏良好行为的折叠函数问题,这些类型无法继承常规数据类型折叠的优良性质。
  • 在完全的依赖类型语言中开发一种定义折叠的方法,支持良基递归与终止性保证。
  • 从这些折叠中推导出归纳原理,以支持涉及嵌套数据类型的程序的形式化验证。
  • 证明依赖类型折叠可特化为传统高阶折叠,并支持类似 map 的函数,且无需依赖一般递归。
  • 提供一种仅使用完全依赖类型语言标准特性的基础,用于对嵌套数据类型进行形式化推理,避免使用非预判 Set 或证明无关性。

提出的方法

  • 使用对嵌套数据类型的良基递归定义依赖类型折叠,确保终止性与完全性。
  • 使用大消除通过模式匹配计算类型,实现从数据级递归到类型级计算的转换。
  • 将折叠类型推广以支持依赖于属性的类型(p : T → Set),从而生成用于形式化验证的归纳原理。
  • 将折叠构建为对嵌套结构的递归函数,其中递归调用通过对子结构应用类似 map 的变换来执行。
  • 通过适当地实例化类型级参数,将依赖类型折叠特化为恢复标准高阶折叠。
  • 使用 Agda 的类型系统编码折叠及其归纳原理,证明可利用自反性与同余性构造出如 map 实现之间等价性的证明。

实验结果

研究问题

  • RQ1能否在完全且良基的前提下,为任意嵌套数据类型定义依赖类型折叠?
  • RQ2如何直接从折叠定义中推导出嵌套数据类型的归纳原理,以支持形式化验证?
  • RQ3依赖类型折叠能否被特化以恢复传统高阶折叠与 map 函数?
  • RQ4依赖类型折叠与现有形式化体系(如广义 Mendler 风格迭代器或 LNMIt)之间存在何种关系?
  • RQ5能否利用从依赖类型折叠中推导出的归纳原理,构造出程序等价性(如两个 map 实现之间)的形式证明?

主要发现

  • 依赖类型折叠通过良基递归定义,在 Agda 等依赖类型语言中是完全的。
  • 折叠构造自然地引出嵌套数据类型的归纳原理,支持对程序等价性等性质的形式化验证。
  • 嵌套数据类型的 map 函数可使用依赖类型折叠定义,其正确性可借助推导出的归纳原理进行形式化证明。
  • 该方法避免依赖非预判 Set 或证明无关性,与 LNMIt 等系统不同,使其更具基础性,并与标准 Agda 兼容。
  • 依赖类型折叠可被特化以恢复标准高阶折叠,表明新方法推广了现有技术。
  • 该方法通过折叠的类型级结构,支持 Church 编码与嵌套数据类型的索引表示。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。