双重否定证明

时间:2015-08-22 04:43:20

标签: agda

抱歉我的英文。我使用谷歌翻译。

证明任意类型(X:Set)是真的吗?

double-negation : ∀ X → ¬ (¬ X)
double-negation = ?

其中:

data ⊥ : Set where

data ¬_ (X : Set) : Set where
    ¬-constructor : (X → ⊥) → ¬ X

例如,证明ℕ:

很简单
data ℕ : Set where
    zero : ℕ
    suc  : ℕ → ℕ

double-negation : ℕ → ¬ (¬ ℕ)
double-negation n =
    ¬-constructor negation-contradiction
    where
        negation-contradiction : ¬ ℕ → ⊥
        negation-contradiction (¬-constructor ν) = ν n

但在用替换X之后,无法检查它(因为n的类型未知,因此negation-contradiction的类型未知。此外,它可以&#39 ;推断(我得到¬ n → ⊥))。

我该如何证明?

2 个答案:

答案 0 :(得分:6)

你无法证明

∀ X → ¬ (¬ X)(1)

请记住

ℕ → ¬ (¬ ℕ)

不是(1)的实例,而是

∀ X → X → ¬ (¬ X)

可以证明。

答案 1 :(得分:4)

∀ X → ¬ (¬ X)读起来像“所有命题都不是假的”。但是(和许多其他人)是错误的,所以我们实际上可以反驳你的陈述:

open import Function
open import Relation.Nullary
open import Data.Empty

nope : ¬ ((X : Set) -> ¬ (¬ X))
nope c = c ⊥ id