变数战术
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
);我不认为它可以为您提供一个可以通过编程方式迭代的列表。
说我想有一个策略来一次清除多个假设,做类似 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
);我不认为它可以为您提供一个可以通过编程方式迭代的列表。