Извините за мой английский. Я использовал переводчик гугл.Двойное доказательство отрицания
Действительно ли доказать, что для произвольного типа (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 → ⊥
)).
Как я могу это доказать?
Спасибо. Но теперь я попробую доказать '∀ X → ¬ (¬ X) → X'. Кажется, что это невозможно, потому что 'X' не знает конструкторов, и никакой аргумент не может возвращать экземпляр. Это правда? –
Правильно мы не можем доказать '∀ X → ¬ (¬ X) → X', но ваше оправдание неверно. Можете ли вы доказать '¬ (¬ ℕ) → ℕ'? – asr
Да, я могу: 'proof: ¬ (¬ ℕ) → ℕ' и' proof _ = zero'. 'zero' - это конструктор, который позволяет создать экземпляр' ℕ'. Но для произвольного 'X' я не могу создать экземпляр. Где ошибка? –