变数战术

Tactics with variable arity

说我想有一个策略来一次清除多个假设,做类似 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,但这并不是我想要的,因为我不知道我想要的参数数量。

你可能想知道 clear 策略可以接受多个参数,所以你不需要定义一个新的策略:你可以只写 clear H H0 H1.

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