说我想要一个策略来立即清除多个假设,做一些像clear_multiple H1, H2, H3.
这样的事情。我尝试使用对,如下所示:
Ltac clear_multiple arg :=
match arg with
| (?f, ?s) => clear s; clear_multiple f
| ?f => clear f
end.
但是,问题是我必须将括号括起来Prod
:
Variable A: Prop.
Goal A -> A -> A -> True.
intros.
clear_multiple (H, H0, H1).
我的问题是,如何在不使用Prod
的情况下执行此操作?
我检查了this question,但这并不是我想要的,因为我想要的参数数量是未知的。
答案 0 :(得分:3)
您可能想知道clear
策略可以采用多个参数,因此您无需定义新策略:您只需编写clear H H0 H1
。
当然,您可能希望为其他任务定义此类n-ary策略。 Coq有tactic notation mechanism支持这样的定义。不幸的是,它们并不是太强大:你只能将某种类型的参数列表传递给需要多个参数的策略(如clear
);我不认为它可以为您提供一个可以以编程方式迭代的列表。