Skip to main content
QUICK REVIEW

[论文解读] foetus -- Termination Checker for Simple Functional Programs

Andreas Abel|arXiv (Cornell University)|Jul 9, 2024
Formal Methods in Verification参考文献 7被引用 16
一句话总结

foetus 提供了一个用于简单函数语言(带元组、构造器和模式匹配)的终止性检查器,通过提取调用、完成调用图并为函数参数找到词汇终止顺序来实现。

ABSTRACT

We introduce a simple functional language foetus (lambda calculus with tuples, constructors and pattern matching) supplied with a termination checker. This checker tries to find a well-founded structural order on the parameters on the given function to prove termination. The components of the check algorithm are: function call extraction out of the program text, call graph completion and finding a lexical order for the function parameters.

研究动机与目标

  • 为简单函数语言(foetus)提出并形式化终止问题的动机。
  • 基于对函数参数的良好基序来开发终止检查器。
  • 通过调用图及其完成来处理互递归。
  • 提供一个带示例的实用原型,说明终止行为。

提出的方法

  • 从程序文本中提取直接和间接函数调用以构建调用图。
  • 通过组合边来完成调用图,以捕获传递调用。
  • 在函数参数上搜索一个词汇(置换)终止顺序,在所有递归调用中都减少。
  • 使用调用矩阵和完成过程形式化该方法,以推理终止性。
  • 在具有代表性的 foetus 程序(如 add、mult、sub、ack、fib)上演示终止决策。
  • 解释在无法建立终止或检查器报告非终止的特殊情况与局限性。

实验结果

研究问题

  • RQ1如何使用对参数的结构化顺序来确定 foetus 函数的终止性?
  • RQ2如何表示并完成调用方-被调用方关系以捕获递归调用?
  • RQ3哪些终止顺序(置换)足以证明给定函数递归的终止性?
  • RQ4当面对复杂或互相递归的定义时,终止检查器的局限性在哪里?
  • RQ5具体示例如何反映该方法的能力与边界?

主要发现

  • 检查器通过对参数的词汇顺序来证明若干标准递归定义的终止性(例如加法、乘法等)。
  • 在 Ackermann 型递归和某些列表处理函数(map、foldl、reverse)等情况下可以证明终止性。
  • 它能识别某些互递归或高阶模式中的非终止性(例如在调用图完成后导致的特定互递归不满足词汇顺序)。
  • 与除法相关的示例表明终止性可能依赖辅助证明;当辅助函数(div’)无法终止时,外部除法函数也被检查器判定为非终止。
  • 该方法在一系列程序中加以说明,突出显示终止与非终止案例及调用图完成如何影响结论。
  • 实现的检查器依赖对调用图的有限完成和基于置换的终止顺序来得出结论。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

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