使用反证法证明

Proving using contradiction technique

我有以下目标:

  f : bool -> bool
  b : bool
  H1 : f true = true
  H2 : f true = false
  H3 : f false = false
  ============================
   false = true

现在用H1和H2,我想用反证法证明目标。我知道 inversion 策略,但我不认为我可以在这里应用它。知道如何从这里开始吗?

这是完全可重现的代码,您可以在其中实现上述目标:

Theorem bool_fn_applied_thrice :
  forall (f : bool -> bool) (b : bool),
  f (f (f b)) = f b.
Proof.
  intros f b.
  destruct (f b) eqn:H1.
  - destruct (f true) eqn:H2.
    + rewrite -> H2.
      reflexivity.
    + destruct (f false) eqn:H3.
      * reflexivity.
      * destruct b in H1.
        {

        }

也有兴趣知道是否有比上述方法更简单的解决上述定理的方法(只是提示。另一种方法是最初在 b 上使用 destruct,这实际上证明了使用 5 次 destructs 后的定理)。

有很多方法可以继续,由于这是一个来自软件基础的练习,可以作为家庭作业,我不会给出完整的答案。

确实H1和H2相互矛盾

我希望您此时了解的方式是使用重写。例如,rewrite H1 in H2. 将在 H2 中用 true 替换 f true,生成 H2 : true = false。然后您可以执行 inversion H2discriminate.

我不确定是否有最好的证明方法,基本上有 8 种情况需要考虑,而且只有很小的空间可以简化这些。