module Duality (X : Set)
(_~_ : (x0 x1 : X) -> Set)
(sym : {x0 x1 : X} -> x0 ~ x1 -> x1 ~ x0) where
Object : Set1
Object = X -> Set
Dual : Object -> Object
Dual A x0 = {x1 : X} -> A x1 -> x0 ~ x1
_<=_ : Object -> Object -> Set
A0 <= A1 = {x : X} -> A0 x -> A1 x
contra : {A0 A1 : Object} -> A0 <= A1 -> Dual A1 <= Dual A0
contra i f x = f (i x)
inject : {A : Object} -> A <= Dual (Dual A)
inject x f = sym (f x)
cancel : {A : Object} -> Dual (Dual (Dual A)) <= Dual A
cancel = contra inject
Comments
0 B
|👍
/👎
0 B
|0 👍
/0 👎
0 B
|👍
/👎