Skip to main content
QUICK REVIEW

[论文解读] Using Structural Recursion for Corecursion

Yves Bertot, Ekaterina Komendantskaya|ArXiv.org|Mar 23, 2009
Logic, programming, and type systems参考文献 7被引用 6
一句话总结

本文提出了一种在基于构造性类型理论的定理证明器(如 Coq)中,使用结构化递归系统性地定义共递归流值的方法,即使递归方程因 'map' 等函数出现在递归调用内部而违反守卫性条件时亦可适用。通过将流编码为自然数上的函数,该方法使得原本会被标准守卫共递归规则拒绝的无限数据结构得以形式化验证,扩展了可定义的共递归函数类,且无需依赖高级递归原理。

ABSTRACT

We propose a (limited) solution to the problem of constructing stream values defined by recursive equations that do not respect the guardedness condition. The guardedness condition is imposed on definitions of corecursive functions in Coq, AGDA, and other higher-order proof assistants. In this paper, we concentrate in particular on those non-guarded equations where recursive calls appear under functions. We use a correspondence between streams and functions over natural numbers to show that some classes of non-guarded definitions can be modelled through the encoding as structural recursive functions. In practice, this work extends the class of stream values that can be defined in a constructive type theory-based theorem prover with inductive and coinductive types, structural recursion and guarded corecursion

研究动机与目标

  • 解决 Coq 及类似定理证明器中核心限制:当递归调用位于函数内部(如 'map')时,因违反守卫性条件而拒绝共递归定义。
  • 将可定义的共诱导流类扩展至超出 '由构造器守卫' 准则的范围。
  • 提供一种语法化、系统化且轻量级的替代方案,以取代良基递归或复杂共诱导谓词,用于定义可生产性共递归函数。
  • 仅使用结构化递归与守卫共递归,实现对涉及无限数据结构(如自然数流或斐波那契序列)的函数程序的形式化验证。

提出的方法

  • 将每个流映射为从自然数到值的总函数,建立流与函数之间的可逆对应关系。
  • 通过在自然数索引上的结构化递归定义共递归流值,将非守卫的递归方程转化为结构化递归函数。
  • 使用 Coq 标准的 'Function' 命令在自然数上定义底层函数,通过结构化递归确保终止性。
  • 通过提升操作(如论文中的 '⟨ ⟩')从函数重构流,确保生成的流满足原始递归方程。
  • 利用 'map' 和 'merge' 等函数可被编码为保留原始流定义语义的形式,从而在索引递归中保持语义一致性。
  • 利用 Coq 内置推理机制,自动证明生成的流满足原始递归方程。

实验结果

研究问题

  • RQ1是否可以在构造性类型理论环境中,对因函数调用(如 'map' 或 'merge')导致违反守卫性条件的共递归流定义进行形式化验证?
  • RQ2是否可能仅通过结构化递归与标准守卫共递归,对这类非守卫共递归定义进行建模?
  • RQ3通过将流可逆编码为自然数上的函数,是否能够构建出原本被证明助手拒绝的形式化验证无限数据结构?
  • RQ4该方法是否保持原始规范的预期计算行为与复杂度,还是引入了效率损失?

主要发现

  • 该方法成功使用结构化递归定义了共递归流(如自然数流与斐波那契序列),即使原始方程违反守卫性条件亦可处理。
  • 该方法具有系统性,无需引入复杂共诱导类型或临时谓词,相较于先前工作更为简洁。
  • 生成的流值被形式化证明满足原始递归方程,且证明过程由 Coq 自动完成。
  • 该方法可应用于涉及多个流参数与递归组合的函数(如 'dTimes'),展现出良好的可扩展性。
  • 然而,该方法无法处理所有共递归定义(如使用 'merge' 的 Hamming 序列),原因在于缺乏适用于 'merge' 函数的合适形式变换引理。
  • 从结构化递归模型提取的代码可能具有比原始规范更差的计算复杂度(如斐波那契数列为指数级),提示应将原始规范作为实现以保证效率。

更好的研究,从现在开始

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

无需绑定信用卡

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