证明 Coq 中的矛盾

Proving a contradiction in Coq

我试图用 Coq 证明一个简单的引理,但我遇到了一些麻烦 排除不可行的情况。这是我的引理:

Theorem helper : forall (a b : bool),
  ((negb a) = (negb b)) -> (a = b).
Proof.
  intros a b.
  intros H.
  destruct a.
  - destruct b.
    + reflexivity.
    + (** this case is trivially true *)

由于假设 H 是错误的,因此相关的子目标是微不足道的。我如何告诉 Coq

1 subgoal
H : negb true = negb false
______________________________________(1/1)
true = false

当假设不同的构造函数之间存在相等性时(在本例中为 H : false = true),您可以使用 discriminate.

在其他情况下,当您有 False 作为假设时,您可以使用 contradiction.