Coq 变数战术

Coq 变数战术,coq,variadic,ltac,Coq,Variadic,Ltac,假设我想有一个策略,一次清除多个假设,做一些类似于清除多个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. intro

假设我想有一个策略,一次清除多个假设,做一些类似于
清除多个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
s的情况下做到这一点



我检查了,但这不完全是我想要的,因为我想要的参数数量未知。

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


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

以下是关于这个问题的更多信息: