packages feed

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