mirror of
https://github.com/Smaug123/agdaproofs
synced 2025-10-10 22:28:40 +00:00
Fix up the classical five to avoid duplicated work (#101)
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user