packages feed

cubical-0.2.0: examples/primitives.cub

module primitives where

primitive Id : (A : U) (a b : A) -> U

primitive refl : (A : U) (a : A) -> Id A a a

primitive inh : U -> U

primitive inc : (A : U) -> A -> inh A

prop : U -> U
prop A = (a b : A) -> Id A a b

primitive squash : (A : U) -> prop (inh A)

primitive inhrec : (A : U) (B : U) (p : prop B) (f : A -> B) (a : inh A) -> B

Sigma : (A : U) (B : A -> U) -> U
Sigma A B = (x : A) * B x

fiber : (A B : U) (f : A -> B) (y : B) -> U
fiber A B f y = Sigma A (\x -> Id B (f x) y)

id : (A : U) -> A -> A
id A a = a

pathTo : (A:U) -> A -> U
pathTo A = fiber A A (id A)

sId : (A : U) (a : A) -> pathTo A a
sId A a = (a, refl A a)

singl : (A : U) -> A -> U
singl A a = Sigma A (Id A a)

primitive contrSingl : (A : U) (a b : A) (p : Id A a b) ->
                       Id (singl A a) (a, refl A a) (b, p)

primitive equivEq : (A B : U) (f : A -> B) (s : (y : B) -> fiber A B f y)
                    (t : (y : B) -> (v : fiber A B f y) ->
                    Id (fiber A B f y) (s y) v) -> Id U A B

primitive transport : (A B : U) -> Id U A B -> A -> B

primitive transpInv : (A B : U) -> Id U A B -> B -> A

primitive transportRef : (A : U) (a : A) -> Id A a (transport A A (refl U A) a)

primitive equivEqRef : (A : U) -> (s : (y : A) -> pathTo A y) ->
                       (t : (y : A) -> (v : pathTo A y) ->
                       Id (pathTo A y) (s y) v) ->
                       Id (Id U A A) (refl U A) (equivEq A A (id A) s t)

primitive transpEquivEq :
  (A B : U) -> (f : A -> B) (s : (y : B) -> fiber A B f y) ->
  (t : (y : B) -> (v : fiber A B f y) -> Id (fiber A B f y) (s y) v) ->
  (a : A) -> Id B (f a) (transport A B (equivEq A B f s t) a)

primitive mapOnPath : (A B : U) (f : A -> B) (a b : A)
                      (p : Id A a b) -> Id B (f a) (f b)

primitive appOnPath : (A B : U) (f g : A -> B) (a b : A)
                      (q : Id (A -> B) f g) (p : Id A a b) -> Id B (f a) (g b)

primitive IdP : (A B : U) -> Id U A B -> A -> B -> U

IdS : (A : U) (F : A -> U) (a0 a1 : A) (p : Id A a0 a1) -> F a0 -> F a1 -> U
IdS A F a0 a1 p = IdP (F a0) (F a1) (mapOnPath A U F a0 a1 p)

primitive mapOnPathD : (A : U) (F : A -> U) (f : (x : A) -> F x) (a0 a1 : A)
                       (p : Id A a0 a1) -> IdS A F a0 a1 p  (f a0) (f a1)

primitive mapOnPathS : (A : U) (F : A -> U) (C : U) (f : (x : A) -> F x -> C)
                       (a0 a1 : A) (p : Id A a0 a1) (b0 : F a0) (b1 : F a1)
                       (q : IdS A F a0 a1 p b0 b1) -> Id C (f a0 b0) (f a1 b1)

primitive funHExt : (A : U) (B : A -> U) (f g : (a : A) -> B a) ->
                    ((x y : A) -> (p : Id A x y) -> IdS A B x y p (f x) (g y)) ->
                    Id ((y : A) -> B y) f g

-- The circle.
primitive S1 : U

primitive base : S1

primitive loop : Id S1 base base

primitive S1rec : (F : S1 -> U) (b : F base)
                  (l : IdS S1 F base base loop b b) (x : S1) -> F x

-- The interval.
primitive I : U

primitive I0 : I

primitive I1 : I

primitive line : Id I I0 I1

primitive intrec : (F : I -> U) (s : F I0) (e : F I1)
                   (l : IdS I F I0 I1 line s e) (x : I) -> F x