我有一个目标,其中包含对匹配分支内的某个引理foo的调用。该调用使用分支的本地变量R作为其参数之一:
| SomeConstr => fun R => .... (foo a b c R) ....这将允许我进一步推广(fun d => foo a b c d),它将不再依赖于分支的局部变量。因为我正在处理非常大的证明,所以我想用Ltac来写这篇文章。然而,由于“没有匹配<
假设我有以下策略来检查一个术语是否是字面上的零: match x with | _ => constr:false如果这是球门上的战术,我会这么做 match x with
| ?在这个具体的示例中,减少x或计算它(let xx := eval compute in x)可能有效,但在更复杂的示例中,计算成本可能会令
我遇到了一种使用setoid_replace的奇怪情况,其中表单的一个验证步骤:在Error: No matchingclauses for match goal中失败,但在该策略中附加额外的idtac之后:
setoid_replace (a - c + d) with b by (my_tactic; idtac我对idtac的理解是,它本质上是一种禁止操作。为什么idt
在Ltac中,上下文模式可以用来构建一个Ltac级函数,它接受Gallina项,并通过填充一个洞来构造Gallina项。我想将这一功能具体化,并在Gallina一级使用,而不是Ltac。但是,以下代码无法工作,因为在填充模式之前,我无法将变量x带入作用域:match goal withend.
(* The reference x was not found in th