对目标有效的 Coq 反转策略?

Coq inversion tactic that works on the goal?

我想知道 Coq 中是否有一种类似倒置的策略对目标起作用,而不是对其中一个假设起作用?也就是说,如果有一些策略可以在目标上反转等式中的相同构造函数。

举个愚蠢的例子,

Goal forall x :nat, 2 + x + 3 = x + 5.
 intros. simpl.

,这给出了

S ( S (x + 3) ) = S ( S ( S ( ... x)...)

我想把前两个S倒过来,这样剩下要证明的就是

  x + 3 = 3 + x

我的问题是

  1. 这个"inversion"构造函数好听吗?

  2. 如果逻辑合理,Coq 中是否有相应的策略?

几天前回答了同样的问题。没有 "inversion" 涉及你想做的事情,简单的平等就可以了:

Goal forall x :nat, 2 + x + 3 = 5 + x.
Proof.
intros; simpl.
assert (x + 3 = 3 + x). admit.
now rewrite H.

为了简化这个模式,Coq 提供了一个简单的目标一致策略,试试:

intros; simpl; repeat f_equal.