|
|
- {-# PRIMITIVE Type #-}
- {-# PRIMITIVE Pretype #-}
-
- I : Pretype
- {-# PRIMITIVE Interval I #-}
-
- i0 : I
- i1 : I
- {-# PRIMITIVE i0 #-}
- {-# PRIMITIVE i1 #-}
-
- iand : I -> I -> I
- {-# PRIMITIVE iand #-}
-
- ior : I -> I -> I
- {-# PRIMITIVE ior #-}
-
- inot : I -> I
- {-# PRIMITIVE inot #-}
-
- PathP : (A : I -> Pretype) -> A i0 -> A i1 -> Type
- {-# PRIMITIVE PathP #-}
-
- Path : {A : Pretype} -> A -> A -> Type
- Path {A} = PathP (\i -> A)
-
- refl : {A : Pretype} {x : A} -> Path x x
- refl {A} {x} i = x
-
- sym : {A : I -> Pretype} {x : A i0} {y : A i1} -> PathP A x y -> PathP (\i -> A (inot i)) y x
- sym p i = p (inot i)
-
- the : (A : Pretype) -> A -> A
- the A x = x
-
- iElim : {A : I -> Pretype} {x : A i0} {y : A i1} -> PathP A x y -> (i : I) -> A i
- iElim p i = p i
-
- Singl : (A : Type) -> A -> Type
- Singl A x = (y : A) * Path x y
-
- isContr : Type -> Type
- isContr A = (x : A) * ((y : A) -> Path x y)
-
- singContr : {A : Type} {a : A} -> isContr (Singl A a)
- singContr {A} {a} = ((a, \i -> a), \y i -> (y.2 i, \j -> y.2 (iand i j)))
|