2015-01-31 6 views
4

Мне нужна еще одна лемма, показывающая, что inj₁ x ≡ inj₂ y абсурден как часть более крупной теоремы о типах несвязных объединений () в Агда.Являются ли конструкторы непересекающимися в Агда? (или как опровергнуть inj₁ x ≡ inj₂ y)

Этот результат будет следовать непосредственно из двух конструкторов для , а именно inj₁ и inj₂, будучи не пересекаются. Это дело в Агда? Как мне это доказать?

Вот полная лемма:

open import Relation.Nullary 
open import Relation.Binary.PropositionalEquality 
open import Data.Sum 


lemma : ∀ {a b} {A : Set a} {B : Set b} {x : A} {y : B} → ¬ inj₁ x ≡ inj₂ y 
lemma eq = ? 

ответ

6

Конструкторы типа данных не пересекаются. Я бы сказал, что это теорема в метатеории типа Агды.

Вы можете попробовать СЛУЧАЙ eq доказательства (C-c C-c), и Agda найти противоречие:

lemma : ∀ {a b} {A : Set a} {B : Set b} {x : A} {y : B} → ¬ inj₁ x ≡ inj₂ y 
lemma() 

Это счастливо-проверку типа.

+0

Ха-ха, никоим образом! Я действительно должен был это пробовать. Благодарю. – curiousleo

+3

Вы также можете использовать большое исключение, чтобы доказать ложность без примитивных абсурдных узоров. Основное состоит в том, что вы можете написать функцию, которая переводит ваши 'inj₁' в' ⊤' и 'inj₂' в' ⊥'. Затем вы можете использовать 'subst' с этой функцией, чтобы« отличить »тривиально доступное значение типа' ⊤' к '⊥'. – copumpkin