[英]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.