如何在 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。
我有一个证明,在两种情况下得出结论,如下所示:
+ 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。