Coq 如何利用自动';在自定义策略中搜索和提示数据库?

Coq 如何利用自动';在自定义策略中搜索和提示数据库?,coq,coq-tactic,Coq,Coq Tactic,在我的coq开发中,我正在学习如何创建适合我的问题领域(la)的新策略。在这一页上,他描述了如何创建强大的自定义策略,例如,将重复与匹配相结合 现在,我已经有了一个强大的一次性战术。它将从提示数据库中找到的步骤链串在一起。我已经投入了一些精力来管理这些提示数据库,所以我也想继续使用它 然而,这带来了一个问题目前尚不清楚将auto的功能整合到定制策略中的“正确”方法是什么。 例如,由于(每个页面)auto总是要么解决目标,要么什么都不做,因此将其放入循环中并不比在循环后调用一次更有效 P>看看为

在我的coq开发中,我正在学习如何创建适合我的问题领域(la)的新策略。在这一页上,他描述了如何创建强大的自定义策略,例如,将
重复
匹配
相结合

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

然而,这带来了一个问题目前尚不清楚将
auto
的功能整合到定制策略中的“正确”方法是什么。

例如,由于(每个页面)
auto
总是要么解决目标,要么什么都不做,因此将其放入循环中并不比在循环后调用一次更有效

<> P>看看为什么这不是理想的,考虑一种假设的方式,直接调用一个“代码”> Auto/<代码>的“步骤”,如果它能做出改变(相反,只有当它解决了目标)时失败,否则失败。这样的单个步骤可以与匹配重复循环中的自定义行为交织在一起,允许我们在搜索树的中间点,例如
尝试矛盾
尝试一致

是否有好的设计模式将
自动
的功能整合到定制策略中


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

我要做的是将其他策略融入其中。 您可以使用命令来执行此操作,其中
num
是一个优先级数字(0是最高优先级),
pat
是一个在应该使用提示时进行过滤的模式,
mytractic
mybase
当然是您要应用的策略和要添加提示的基础(不要使用默认的
core
;而是建立自定义库,并使用
auto with mybase
调用它;如果不想在搜索中包含
core
库中的引理,请添加伪基
nocore
auto with mybase nocore


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

修复有限限制。这将如何允许我们将自动搜索与例如
同余
或其他受限框架的解算器相结合蒙蒂?@phs:我的建议是从自动策略中调用同余之类的。啊,我明白了。你知道类似于自动使用的
类型类eauto
的变体吗?,在那里可以在搜索中添加显式术语?如果它在手册中,我看不到它。不幸的是,这个语法还不可用对于typeclasses eauto,尽管您可以使用添加到with子句中的单例提示基获得相同的结果(
typeclasses eauto with mybase mysingletonbase
)。是的,无法编写本地命令。Ltac只是用于编写脚本策略。在typeclasses eauto接受using子句之前,您最好坚持使用auto(在下一个8.7版本中应该是这样的…)