Files
agdaproofs/ClassicalLogic/ClassicalFive.agda
2020-02-23 12:16:19 +00:00

34 lines
1.1 KiB
Agda

{-# OPTIONS --safe --warning=error --without-K #-}
open import LogicalFormulae
module ClassicalLogic.ClassicalFive where
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}
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 (λ a dne (λ _ z a))))
peirceToIad : peirce iad
peirceToIad peirce {A} {B} aToB = peirce (λ z inl (λ x z (inr (aToB x))))
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))