如何在Coq中“翻转”平等主张?

时间:2014-11-12 07:21:35

标签: coq

如果我在Coq,我发现自己陷入了这样的目标:

==================
  x = y -> y = x

是否有一种策略可以一举处理?事实上,我正在写

intros H. rewrite -> H. reflexivity.

但它有点笨重。

2 个答案:

答案 0 :(得分:7)

要“翻转”平等H: x = y,您可以使用symmetry in H。如果您想要翻转目标,只需使用symmetry即可。

答案 1 :(得分:4)

如果你正在寻找一种策略,那么easy策略会立即处理这个策略:

Coq < Parameter x y : nat.
x is assumed
y is assumed

Coq < Lemma sym : x = y -> y = x.
1 subgoal

  ============================
   x = y -> y = x

sym < easy.
No more subgoals.

如果您查看easy策略找到的证明,关键部分是eq_sym的应用:

sym < Show Proof.
(fun H : x = y => eq_sym H)

较重的auto战术也将在一步中完成这一目标。对于生成完全相同的证明术语的轻微低级证明,您可以使用symmetry策略(也会自动为您执行必要的intro):

sym < Restart.
1 subgoal

  ============================
   x = y -> y = x

sym < symmetry.
1 subgoal

  H : x = y
  ============================
   x = y

sym < assumption.
No more subgoals.

sym < Show Proof.
(fun H : x = y => eq_sym H)