0 | module Data.Logic.Propositional
11 | PEM p = Either p (Not p)
15 | DNE p = Not (Not p) -> p
18 | Consensus : Type -> Type -> Type -> Type
19 | Consensus p q r = (q, r) -> Either (p, q) (Not p, r)
22 | Peirce : Type -> Type -> Type
23 | Peirce p q = ((p -> q) -> p) -> p
26 | Frege : Type -> Type -> Type -> Type
27 | Frege p q r = (p -> r) -> (q -> r) -> ((p -> q) -> q) -> r
30 | Transposition : Type -> Type -> Type
31 | Transposition p q = (Not q -> Not p) -> p -> q
34 | Switch : Type -> Type
35 | Switch p = (Not p -> p) -> p
45 | pemDN f = f $
Right $
f . Left
48 | dneDN f = f $
\g => void $
g $
\x => f $
\_ => x
50 | consensusDN : DN $
Consensus p q r
51 | consensusDN f = f $
\(y, z) => Right (\x => f $
\(_, _) => Left (x, y), z)
53 | peirceDN : DN $
Peirce p q
54 | peirceDN f = f $
\g => g $
\x => void $
f $
\_ => x
56 | fregeDN : DN $
Frege p q r
57 | fregeDN f = f $
\g, h, i => h $
i $
\x => void $
f $
\_, _, _ => g x
59 | transpositionDN : DN $
Transposition p q
60 | transpositionDN f = f $
\g, x => void $
g (\y => f $
\_, _ => y) x
62 | switchDN : DN $
Switch p
63 | switchDN f = f $
\g => g $
\x => f $
\_ => x
67 | dnePEM : PEM p -> DNE p
68 | dnePEM (Left l) _ = l
69 | dnePEM (Right r) f = void $
f r
71 | consensusPEM : PEM p -> Consensus p q r
72 | consensusPEM (Left l) (y, _) = Left (l, y)
73 | consensusPEM (Right r) (_, z) = Right (r, z)
75 | peircePEM : PEM p -> Peirce p q
76 | peircePEM (Left l) _ = l
77 | peircePEM (Right r) f = f $
absurd . r
79 | fregePEM : PEM p -> Frege p q r
80 | fregePEM (Left l) f _ _ = f l
81 | fregePEM (Right r) _ g h = g $
h $
absurd . r
83 | transpositionPEM : PEM p -> Transposition q p
84 | transpositionPEM (Left l) _ _ = l
85 | transpositionPEM (Right r) f x = void $
f r x
87 | switchPEM : PEM p -> Switch p
88 | switchPEM (Left l) _ = l
89 | switchPEM (Right r) f = f r
95 | EDN : DN p -> DNE p -> p
98 | pemDNE : DNE (PEM p) -> PEM p
106 | pemPeirce : Peirce (PEM p) Void -> PEM p
107 | pemPeirce f = f $
\g => Right $
g . Left
109 | dnePeirce : Peirce p Void -> DNE p
110 | dnePeirce f g = f $
absurd . g
112 | consensusPeirce : Peirce (Consensus p q r) Void -> Consensus p q r
113 | consensusPeirce f (y, z) =
114 | f (\g, (_, _) => Right (\x => g (\_ => Left (x, y)), z)) (y, z)
116 | fregePeirce : Peirce (Frege p q r) Void -> Frege p q r
117 | fregePeirce f g h i =
118 | f (\j, _, _, _ => h $
i $
\x => void $
j $
\_, _, _ => g x) g h i
120 | transpositionPeirce : Peirce (Transposition p q) Void -> Transposition p q
121 | transpositionPeirce f g x =
122 | f (\h, _, _ => void $
g (\y => h $
\_, _ => y) x) (\j, _ => g j x) x
131 | Meredith : (p, q, r, s, t : Type) -> Type
132 | Meredith p q r s t =
133 | ((((p -> q) -> Not r -> Not s) -> r) -> t) -> (t -> p) -> s -> p
140 | meredithDN : DN $
Meredith p q r s t
145 | (\y => void $
f $
\_, _, _ => y)
146 | (\z => f $
\_, _, _ => h $
g $
\_ => z)
152 | meredithPEM : PEM p -> Meredith p q r s t
153 | meredithPEM (Left l) _ _ _ = l
154 | meredithPEM (Right r) f g x =
158 | (\z => r $
g $
f (\_ => z))