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

时间:2016-12-15 18:55:19

标签: coq coq-tactic

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

现在,我已经使用了强大的一次性战术auto。它将从提示数据库中找到的步骤链串起来。我已经投入了一些精力来策划那些提示数据库,所以我也想继续使用它。

然而,这是一个问题。 目前尚不清楚将auto的功能纳入自定义策略的“正确”方法。

例如,因为(按照其页面)auto总是要么解决目标,要么什么都不做,把它放在循环中并不比循环后调用它更强大。

要了解为什么这不理想,请考虑一种假设的方式来直接调用auto的单个“步骤”,如果它可以进行更改,则会成功(而不是仅在它解决了目标时)否则就失败了。这样的单步骤可以在匹配重复循环中与自定义行为交织,允许我们例如<{1}}或try contradiction位于搜索树中的中间点。

try congruence的功能纳入自定义策略是否有良好的设计模式?

可以将auto的行为分解为我们可以使用的“单步”策略吗?

1 个答案:

答案 0 :(得分:2)

我要做的是将其他策略纳入auto。 您可以使用Hint Extern num pat => mytactic : mybase命令来执行此操作,其中num是优先级编号(0是最高优先级),pat模式可在使用提示时进行过滤并{{1当然,您要应用的策略和要添加提示的基础(不要使用默认的mytactic;而是构建您的自定义基础,并使用{调用它{1}};如果您不想在搜索中添加mybase基础的引理,请添加假基础coreauto with mybase)。

如果您开始非常依赖core,我会转而使用几乎相同但性能更好的typeclasses eauto with mybase。与其名称相反,它是一种与类型类无关的通用策略(只要您明确提供应该使用的提示基础)。要知道的主要行为差异之一是默认情况下搜索深度无限制。因此,请注意可能的无限循环或使用变体nocore修复有限限制。