Fix up the classical five to avoid duplicated work (#101)

This commit is contained in:
Patrick Stevens
2020-02-23 12:16:19 +00:00
committed by GitHub
parent 29216d26cb
commit f6b13d677a

View File

@@ -9,6 +9,7 @@ em = {A : Set} → (A || (A → False))
dne = {A : Set} ((A False) False) A
peirce = {A B : Set} ((A B) A) A
iad = {A B : Set} (A B) ((A False) || B)
dem = {A B : Set} (((A False) && (B False)) False) A || B
emToDne : em dne
emToDne em {A} pr with em {A}
@@ -16,30 +17,17 @@ emToDne em {A} pr | inl x = x
emToDne em {A} pr | inr x = exFalso (pr x)
dneToPeirce : dne peirce
dneToPeirce dne {A} {B} aba = dne (λ z z (aba (λ z₁ dne (λ _ z z₁))))
dneToPeirce dne {A} {B} aba = dne (λ z z (aba (λ a dne (λ _ z a))))
peirceToIad : peirce iad
peirceToIad peirce {A} {B} aToB = peirce (λ z inl (λ x z (inr (aToB x))))
iadToEm : iad em
iadToEm iad {A} with (iad {A} {A} (λ i i))
iadToEm iad {A} | inl x = inr x
iadToEm iad {A} | inr x = inl x
dem = {A B : Set} (((A False) && (B False)) False) A || B
iadToDem : iad dem
iadToDem iad {A} {B} x with iad {A} {A} (λ i i)
iadToDem iad {A} {B} x | inl notA with iad {B} {B} (λ i i)
iadToDem iad {A} {B} x | inl notA | inl notB = exFalso (x (notA ,, notB))
iadToDem iad {A} {B} x | inl notA | inr b = inr b
iadToDem iad {A} {B} x | inr a = inl a
demToEm : dem em
demToEm dem {A} = dem (λ z _&&_.snd z (_&&_.fst z))
emToDem : em dem
emToDem em {A} {B} pr with em {A}
emToDem em {A} {B} pr | inl x = inl x
emToDem em {A} {B} pr | inr x with em {B}
emToDem em {A} {B} pr | inr x | inl x₁ = inr x₁
emToDem em {A} {B} pr | inr x | inr y = exFalso (pr (x ,, y))
isContr : {a : _} (A : Set a) Set a
isContr T = (x y : T) x y
pr : {a : _} {A : Set a} {x : A} isContr (Sg A (λ y x y))
pr {A = A} {.a} (a , refl) (.a , refl) = refl