如何在自定义策略中使用自动重复?

时间:2016-12-14 23:33:27

标签: coq coq-tactic

在我的coq开发中,我正在学习如何为我的问题域创建新的策略,la Prof. Adam Chlipala

在该页面上,他描述了如何通过将repeat包裹在响应各种有趣条件的match周围来创建强大的策略。 repeat然后迭代,允许进行深远的推理。

使用repeat有一个警告(强调我的):

  

我们在这里使用的repeat称为战术或战术组合。 repeat t的行为是循环运行t,在所有生成的子目标上运行t,在生成的生成的子目标上运行t,等等上。当t在此搜索树中的任何一点失败时,该特定子目标将由后来的策略处理。 因此,重要的是永远不要使用repeat一个始终成功的策略。

现在,我已经有了一个强大的策略,auto。它类似地将链条链接在一起,这次是从提示数据库中找到的。来自auto的页面:

  

auto要么完全解决目标,要么完好无损。 autotrivial永不失败。

啵!我已经投入了一些精力来策划auto的提示数据库,但我似乎禁止在使用repeat的策略中使用它们(即有趣的策略)。

是否有auto的某些变体可能会失败,或者在循环中正确使用?

例如,也许这种变体在“使[目标]完整无缺”时失败。

编辑:将auto合并到循环中并不是“正确”的方法(参见this),但实际的问题是失败的版本汽车仍然很有意思。

1 个答案:

答案 0 :(得分:3)

正如@AntonTrunov所提到的,如果目标没有改变,你总是可以使用progress战术来使战术失败。在auto的情况下,因为它应该解决目标或保持不变,你也可以将它包装在solve [ auto ]中,这将具有相同的效果,因为如果auto它会失败没有完全解决目标(here is the doc for solve)。