coq - 引用Ltac中的hintbases

标签 coq coq-tactic

在我的项目中,我试图维护小型提示库以加快证明速度。然而,当我为这种架构编写 Ltac 支持时,我找不到引用各种提示库的方法。本质上,我想做以下事情:

Tactic Notation "myauto" ???(db) := auto with db.

事情会比这更复杂。然而,Coq 解析器似乎急切地将 db 解析为提示库的具体名称,因此会抛出这样的错误消息:

Error: No such Hint database: db.

有什么方法可以参数化 auto 系列的提示基本选项吗?

最佳答案

编辑:

您尝试做的事情目前在 Ltac 中不起作用。

https://github.com/coq/coq/issues/2417

您可以通过以下任一方式解决您的问题

  • 将您的问题改写为一个单独的问题,在其中解释为什么需要这种自动化,有人可能能够帮助您以不同的方式解决最初的问题(不使用自动和数据库参数)

  • 尝试一个较新的 Coq 策略库,例如 Ltac2

旧的(损坏的)答案:

在 Coq 8.7.2 中,您要寻找的是 ident 参数类型。 根据定义,Hint 数据库由 ident 引用:

Create HintDb ident [discriminated] 

(参见 https://coq.inria.fr/distrib/current/refman/tactics.html#Hints-databases 的定义)

推杆

Tactic Notation "test" ident(db) :=
  auto with db.

对我来说效果很好。

https://coq.inria.fr/distrib/current/refman/syntax-extensions.html#hevea_command236包含允许的修饰符列表。

关于coq - 引用Ltac中的hintbases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49481442/

相关文章:

coq - Coq 中类型类方法的递归使用

logic - 如何在 Coq 中编写 ∀x ( P(x) 和 Q(x) )?

coq - 合并匹配 Coq 中的重复案例

coq - 如何将 Coq 算术求解器策略与 SSReflect 算术语句结合使用

coq - 为什么策略 'exact' 对于 Coq 证明是完整的?

coq - 单例类中的隐式参数

emacs - Emacs下Coq/Proof General中关键字和运算符的Unicode字形

coq - 是否有可能在 Coq 中将统一错误转化为目标?

coq - 展开定义而不减少

compiler-errors - 使用 "Error: No focused proof"命令时 Coq "Arguments"