2015-08-22 3 views
1

Извините за мой английский. Я использовал переводчик гугл.Двойное доказательство отрицания

Действительно ли доказать, что для произвольного типа (X: множество)?

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 неизвестен. Также не может быть выведено (я получаю ¬ n → ⊥)).

Как я могу это доказать?

ответ

6

Вы не можете доказать

∀ X → ¬ (¬ X) (1)

Имейте в виду, что

ℕ → ¬ (¬ ℕ)

не является экземпляром (1), но

∀ X → X → ¬ (¬ X)

, что можно доказать.

+0

Спасибо. Но теперь я попробую доказать '∀ X → ¬ (¬ X) → X'. Кажется, что это невозможно, потому что 'X' не знает конструкторов, и никакой аргумент не может возвращать экземпляр. Это правда? –

+0

Правильно мы не можем доказать '∀ X → ¬ (¬ X) → X', но ваше оправдание неверно. Можете ли вы доказать '¬ (¬ ℕ) → ℕ'? – asr

+0

Да, я могу: 'proof: ¬ (¬ ℕ) → ℕ' и' proof _ = zero'. 'zero' - это конструктор, который позволяет создать экземпляр' ℕ'. Но для произвольного 'X' я не могу создать экземпляр. Где ошибка? –

4

∀ X → ¬ (¬ X) читается как «все предложения не являются ложными». Но (и многие другие) неверны, поэтому мы можем фактически опровергнуть ваше заявление:

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

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

Спасибо. Ваш ответ помог мне –

Смежные вопросы