cubical-0.2.0: examples/turn.cub
module turn where
import helix
transpL : (A:U)(a b:A) -> Id A a b -> Id A a a -> Id A b b
transpL A a b p l = (compInv A a b b p (comp A a a b l p))
lemTranspL : (A:U)(a:A)(l:Id A a a) -> Id (Id A a a) l (transpL A a a (refl A a) l)
lemTranspL A a l = rem2
where
l1 : Id A a a
l1 = comp A a a a l (refl A a)
rem : Id (Id A a a) l1 l
rem = compIdr A a a l
rem1 : Id (Id A a a) l1 (compInv A a a a (refl A a) l1)
rem1 = compInvIdl' A a a l1
rem2 : Id (Id A a a) l (compInv A a a a (refl A a) l1)
rem2 = compInv (Id A a a) l1 l (compInv A a a a (refl A a) l1) rem rem1
lemTranspL1 : (A:U)(a:A)(l:Id A a a) -> Id (Id A a a) l (transpL A a a l l)
lemTranspL1 A a l = lemInv A a a a l l
lemG0 : (A:U)(a b:A)(p:Id A a b)(l : Id A a a) ->
IdS A (\ x -> Id A x x) a b p l (transpL A a b p l)
lemG0 A a = J A a (\ b p -> (l : Id A a a) -> IdS A (\ x -> Id A x x) a b p l (transpL A a b p l))
(lemTranspL A a)
lemG1 : (A:U)(a:A)(l:Id A a a) -> IdS A (\ x -> Id A x x) a a l l l
lemG1 A a l =
substInv (Id A a a) (IdS A (\ x -> Id A x x) a a l l) l (transpL A a a l l)
(lemTranspL1 A a l) (lemG0 A a a l l)
lp : (x:S1) -> Id S1 x x
lp = S1rec (\ x -> Id S1 x x) loop (lemG1 S1 base loop)
lp1 : S1 -> S1
lp1 x = S1rec (\ _ -> S1) x (lp x) x
path : Id S1 base base
path = mapOnPath S1 S1 lp1 base base loop
test : Z
test = winding path
path2 : Id S1 base base
path2 = mapOnPath S1 S1 lp1 base base (compS1 loop (compS1 loop loop))
test2 : Z
test2 = winding path2