可变arity的策略

时间:2017-12-08 15:52:18

标签: coq variadic ltac

说我想要一个策略来立即清除多个假设,做一些像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,但这并不是我想要的,因为我想要的参数数量是未知的。

1 个答案:

答案 0 :(得分:3)

您可能想知道clear策略可以采用多个参数,因此您无需定义新策略:您只需编写clear H H0 H1

当然,您可能希望为其他任务定义此类n-ary策略。 Coq有tactic notation mechanism支持这样的定义。不幸的是,它们并不是太强大:你只能将某种类型的参数列表传递给需要多个参数的策略(如clear);我不认为它可以为您提供一个可以以编程方式迭代的列表。