如何在 Ltac 中尝试策略,但如果失败则继续

How to try a tactic in Ltac, but continue if it fails

我有一个证明,在两种情况下得出结论,如下所示:

+ rewrite H. apply lemma1.
+ apply lemma1.

虽然这相对简单,但我想将其组合成一个策略。我想用英语做的是,“尝试重写,如果失败,什么也不做,并尝试应用 lemma1.

所以一个相关的问题是“什么都不做的策略是什么?”

这是我的尝试之一:

try (rewrite H || nil); apply lemma1.

我不知道怎么知道Ltac中的“空战术”是什么,也不知道怎么知道它的名字。

这是另一个,我在这里“分发”lemma1

do 2 try (rewrite H; apply lemma1 || apply lemma1).

同样不能证明第二种情况

我认为在这种情况下您不需要“什么也不做”策略,因为当给 try 的策略失败时 try 什么都不做。如果我没看错,你只需要 try rewrite H; apply lemma1. 就可以了。因此,它将尝试重写 H 并且在成功的情况下它将应用引理 1。否则,当重写失败时,它只会应用引理 1。所以,它在任何情况下都适用引理1。