簡體   English   中英

Quick Chick eqBoolArrowA_correct 定理

[英]Quick Chick eqBoolArrowA_correct theorem

通過軟件基礎的 Quick Chick 課程我堅持以下定理:

Class Eq A :=
{
    eqb: A -> A -> bool;
}.


Instance eqBoolArrowA {A : Type} `{Eq A} : Eq (bool -> A) :=
{
  eqb f1 f2 :=
           (andb (eqb (f1 false) (f2 false)) (eqb (f1 true) (f2 true)))
}.

Theorem eqBoolArrowA_correct : forall (f1 f2 : bool -> bool -> nat),
                                      (eqb f1 f2) = true <-> true = true.
Proof.
  intros. split.
  - destruct (f1 =? f2).
    + intro. assumption.
    + intros H. discriminate H.
  - intros _. destruct (f1 =? f2).
    + reflexivity.
    +

在這里我們得到:

1 subgoal (ID 164)

  f1, f2 : bool -> bool -> nat
  ============================
  false = true

證明true = true -> (eqb f1 f2) = true似乎是不可能的,因為(eqb f1 f2)可能為 false,在這種情況下,我們在空上下文中得到false = true ,這是無法證明的。

這個定理是不正確的還是我遺漏了什么?

該定理無效。

任何命題P <-> true = true等價於P ,並且對於所有函數f1, f2 : bool -> A eqb f1 f2 = true是無效f1, f2 : bool -> A (至少當A有兩個或更多居民時)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM