如何在自定义策略中利用汽车的搜索和提示数据库?

How to leverage auto's searching and hint databases in custom tactics?

在我的 coq 开发中,我正在学习如何创建适合我的问题领域的新策略,la Prof. Adam Chlipala。在该页面上,他描述了如何通过例如创建强大的自定义策略。结合 repeatmatch.

现在,我已经掌握了强大的一招制,auto。它将从提示数据库中找到的步骤链串在一起。我已经投入了一些精力来管理这些提示数据库,所以我也想继续使用它。

然而这会带来一个问题。 尚不清楚 "right" 将 auto 的功能整合到自定义策略中的方法。

例如,由于(根据其页面)auto 总是解决目标或什么都不做,将它放在循环中并不比在循环后调用它一次更强大。

要了解为什么这不理想,请考虑一种直接调用 auto 中的单个 "step" 的假设方法,如果它可以进行更改(而不是仅当解决了目标)否则失败。这样的单步可以在匹配重复循环中与自定义行为交错,允许我们,例如try contradictiontry congruence 在搜索树中的中间点。

是否有好的设计模式可以将 auto 的功能整合到自定义策略中?

auto的行为是否可以分解为"single step"我们可以使用的策略?

我会做的是将其他策略纳入 auto。 您可以使用 Hint Extern num pat => mytactic : mybase 命令来执行此操作,其中 num 是优先级数字(0 是最高优先级),pat 是在应使用提示时过滤的模式,mytacticmybase 当然是你想要应用的策略和你想要添加提示的基础(不要使用默认的 core;建立你的自定义基础并用 auto with mybase; 如果您不想在搜索中包含来自 core 碱基的引理,请添加假碱基 nocore: auto with mybase nocore).

如果您开始非常依赖 auto,我会改用几乎等效但表现更好的 typeclasses eauto with mybase。与其名称所暗示的相反,它是一种通用策略,与类型 类 无关(只要您明确提供它应该工作的提示基础)。要知道的主要行为差异之一是默认情况下搜索深度是无限的。因此,请注意可能的无限循环或使用变体 typeclasses eauto num with mybase.

修复有限限制