是否可以实施检查HintDb的Coq策略?如果是,怎么做?

是否可以实施检查HintDb的Coq策略?如果是,怎么做?,coq,coq-tactic,ltac,Coq,Coq Tactic,Ltac,例如,我想要一种策略,它将迭代给定HintDb中的所有解析提示,并且对于每个解析提示h,它将执行pose h.。这可能吗?如果是这样的话,怎么做?在Coq中没有(除非您使用搁置和回溯做了一些奇特的事情),但在OCaml中它非常简单。例如,在菲亚特项目中,我们有这样的策略。对于Coq 8.7: 在: 在: 在: 在: 使用此方法解决问题陈述中提出的示例,我们可以添加: 在\u项目中: -R . Example -I . HintDbExtra.v PoseDb.v hint_db_extra_pl

例如,我想要一种策略,它将迭代给定HintDb中的所有解析提示,并且对于每个解析提示
h
,它将执行
pose h.
。这可能吗?如果是这样的话,怎么做?

在Coq中没有(除非您使用
搁置
和回溯做了一些奇特的事情),但在OCaml中它非常简单。例如,在菲亚特项目中,我们有这样的策略。对于Coq 8.7:

在:

在:

在:

在:

使用此方法解决问题陈述中提出的示例,我们可以添加:

\u项目中

-R . Example
-I .
HintDbExtra.v
PoseDb.v
hint_db_extra_plugin.ml4
hint_db_extra_plugin.mllib
hint_db_extra_tactics.ml
PoseDb.v
中:

Require Import HintDbExtra.

Ltac unique_pose v :=
  lazymatch goal with
  | [ H := v |- _ ] => fail
  | _ => pose v
  end.

Goal True.
  repeat foreach [ core ] run unique_pose.

如果您想对提示数据库中的每个提示运行一个策略(而不是对每个提示连续运行一个策略,直到找到一个成功的提示),您可以将
中的
tclORELSE
更改为某种排序运算符(例如,
tcltthen
)。

谢谢。为了让你的答案更完整,你能用你上面展示的内容来解决我在问题中描述的具体的
姿势
例子,包括一个MWE吗?
Hint_db_extra_tactics
Hint_db_extra_plugin
Declare ML Module "hint_db_extra_plugin".
-R . Example
-I .
HintDbExtra.v
PoseDb.v
hint_db_extra_plugin.ml4
hint_db_extra_plugin.mllib
hint_db_extra_tactics.ml
Require Import HintDbExtra.

Ltac unique_pose v :=
  lazymatch goal with
  | [ H := v |- _ ] => fail
  | _ => pose v
  end.

Goal True.
  repeat foreach [ core ] run unique_pose.