Skip to main content
QUICK REVIEW

[论文解读] Calculating a backtracking algorithm: an exercise in monadic program derivation

Shin-Cheng Mu|arXiv (Cornell University)|Jan 23, 2021
Logic, programming, and type systems参考文献 12被引用 5
一句话总结

本文通过单子程序演算,形式化推导出一种回溯算法,聚焦于非确定性与局部状态之间的相互作用。通过推导出一个融合单子展开(monadic unfold)与类似 scanl 的过滤操作的代数结构(hylomorphism),作者提供了一种数学上严谨、等式化的转换方法,将规格说明转化为高效的回溯程序,以八皇后问题为例,其正确性由单子公理与结构归纳法保证。

ABSTRACT

Equational reasoning is among the most important tools that functional programming provides us. Curiously, relatively less attention has been paid to reasoning about monadic programs. In this report we derive a backtracking algorithm for problem specifications that use a monadic unfold to generate possible solutions, which are filtered using a $\mathit{scanl}$-like predicate. We develop theorems that convert a variation of $\mathit{scanl}$ to a $\mathit{foldr}$ that uses the state monad, as well as theorems constructing hylomorphism. The algorithm is used to solve the $n$-queens puzzle, our running example. The aim is to develop theorems and patterns useful for the derivation of monadic programs, focusing on the intricate interaction between state and non-determinism.

研究动机与目标

  • 开发一种涉及非确定性与状态的单子程序的正式、等式化推导方法。
  • 解决具有交织效应的程序(特别是回溯算法)的推理挑战。
  • 提供可重用的定理与模式,用于将问题规格转化为高效且正确的实现。
  • 以八皇后问题作为回溯算法中具有状态约束的典型示例,演示该方法。

提出的方法

  • 通过等式推理与单子公理,将一种 scanl 的变体推导为在状态单子上的 foldr。
  • 引入一种新的单子运算符 ⊙,用于在状态上下文中组合状态更新与非确定性选择。
  • 构建一个融合候选解生成(通过单子展开)与过滤(通过类似 scanl 的状态过滤谓词)的代数结构(hylomorphism)。
  • 将推导出的定理应用于将八皇后问题的规格说明转换为高效的回溯程序。
  • 使用结构归纳法与单子公理证明正确性,假设局部状态公理(右分配律与右零律)成立。
  • 使用 protect 组合子确保最终算法中状态的正确初始化与传播。

实验结果

研究问题

  • RQ1如何通过等式推理推导出同时涉及非确定性与状态的单子程序?
  • RQ2可以建立哪些定理,以将类似 scanl 的过滤操作转换为在状态单子上的 foldr?
  • RQ3如何以数学上可处理的方式管理状态与非确定性之间的交互?
  • RQ4哪些条件可确保推导出的回溯算法在正确性与效率上均成立?
  • RQ5基于代数结构的展开与过滤融合(hylomorphism)是否可推广至其他约束满足问题?

主要发现

  • 本文成功地通过单子程序推导,为八皇后问题推导出一个正确且高效的回溯算法。
  • 主要贡献在于一个融合单子展开与状态过滤的代数结构(hylomorphism),通过运算符 ⊙ 与 solve 函数表达。
  • 推导过程依赖于局部状态公理(右分配律与右零律),这些公理确保每个非确定性分支拥有独立的状态,从而简化推理。
  • 在问题关系具有良基性以及状态与非确定性可交换的假设下,该算法被形式化证明正确。
  • 最终的 queens n 实现等价于 solve null select ok (⊕) (0, [], []) [0..n-1],通过 put 与 get 显式管理状态。
  • 该方法可推广至其他以 unfoldM p f z >>= filter (all ok · scanl+ (⊕) st) 形式指定的问题,前提是满足必要的代数公理。

更好的研究,从现在开始

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

无需绑定信用卡

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