如何在自定义策略中利用汽车的搜索和提示数据库?
How to leverage auto's searching and hint databases in custom tactics?
在我的 coq 开发中,我正在学习如何创建适合我的问题领域的新策略,la Prof. Adam Chlipala。在该页面上,他描述了如何通过例如创建强大的自定义策略。结合 repeat
与 match
.
现在,我已经掌握了强大的一招制,auto
。它将从提示数据库中找到的步骤链串在一起。我已经投入了一些精力来管理这些提示数据库,所以我也想继续使用它。
然而这会带来一个问题。 尚不清楚 "right" 将 auto
的功能整合到自定义策略中的方法。
例如,由于(根据其页面)auto
总是解决目标或什么都不做,将它放在循环中并不比在循环后调用它一次更强大。
要了解为什么这不理想,请考虑一种直接调用 auto
中的单个 "step" 的假设方法,如果它可以进行更改(而不是仅当解决了目标)否则失败。这样的单步可以在匹配重复循环中与自定义行为交错,允许我们,例如try contradiction
或 try congruence
在搜索树中的中间点。
是否有好的设计模式可以将 auto
的功能整合到自定义策略中?
auto
的行为是否可以分解为"single step"我们可以使用的策略?
我会做的是将其他策略纳入 auto
。
您可以使用 Hint Extern num pat => mytactic : mybase
命令来执行此操作,其中 num
是优先级数字(0 是最高优先级),pat
是在应使用提示时过滤的模式,mytactic
和 mybase
当然是你想要应用的策略和你想要添加提示的基础(不要使用默认的 core
;建立你的自定义基础并用 auto with mybase
; 如果您不想在搜索中包含来自 core
碱基的引理,请添加假碱基 nocore
: auto with mybase nocore
).
如果您开始非常依赖 auto
,我会改用几乎等效但表现更好的 typeclasses eauto with mybase
。与其名称所暗示的相反,它是一种通用策略,与类型 类 无关(只要您明确提供它应该工作的提示基础)。要知道的主要行为差异之一是默认情况下搜索深度是无限的。因此,请注意可能的无限循环或使用变体 typeclasses eauto num with mybase
.
修复有限限制
在我的 coq 开发中,我正在学习如何创建适合我的问题领域的新策略,la Prof. Adam Chlipala。在该页面上,他描述了如何通过例如创建强大的自定义策略。结合 repeat
与 match
.
现在,我已经掌握了强大的一招制,auto
。它将从提示数据库中找到的步骤链串在一起。我已经投入了一些精力来管理这些提示数据库,所以我也想继续使用它。
然而这会带来一个问题。 尚不清楚 "right" 将 auto
的功能整合到自定义策略中的方法。
例如,由于(根据其页面)auto
总是解决目标或什么都不做,将它放在循环中并不比在循环后调用它一次更强大。
要了解为什么这不理想,请考虑一种直接调用 auto
中的单个 "step" 的假设方法,如果它可以进行更改(而不是仅当解决了目标)否则失败。这样的单步可以在匹配重复循环中与自定义行为交错,允许我们,例如try contradiction
或 try congruence
在搜索树中的中间点。
是否有好的设计模式可以将 auto
的功能整合到自定义策略中?
auto
的行为是否可以分解为"single step"我们可以使用的策略?
我会做的是将其他策略纳入 auto
。
您可以使用 Hint Extern num pat => mytactic : mybase
命令来执行此操作,其中 num
是优先级数字(0 是最高优先级),pat
是在应使用提示时过滤的模式,mytactic
和 mybase
当然是你想要应用的策略和你想要添加提示的基础(不要使用默认的 core
;建立你的自定义基础并用 auto with mybase
; 如果您不想在搜索中包含来自 core
碱基的引理,请添加假碱基 nocore
: auto with mybase nocore
).
如果您开始非常依赖 auto
,我会改用几乎等效但表现更好的 typeclasses eauto with mybase
。与其名称所暗示的相反,它是一种通用策略,与类型 类 无关(只要您明确提供它应该工作的提示基础)。要知道的主要行为差异之一是默认情况下搜索深度是无限的。因此,请注意可能的无限循环或使用变体 typeclasses eauto num with mybase
.