-- Another example of a simple composition: compose p with its inverse compinv (A : U) (a b : A) (p : Path A a b) : Path A a a = comp (<_> A) (p @ i) [ (i = 0) -> a, (i = 1) -> p @ -j ] -- Exercise (hard): is "compinv A a b p" Path equal to a? ex (A : U) (a b : A) (p : Path A a b) : Path (Path A a a) (compinv A a b p) ( a) = comp (<_> A) (p @ i \/ j) {- bottom -} [ (i = 0) -> p @ j /\ -k, -- back (i = 1) -> p @ -k, -- front (j = 0) -> p @ i /\ -k, -- left (j = 1) -> p @ -k, -- right ] -- Type checking failed: path endpoints don't match for comp (<_> A) (p @ (i \/ j)) [ (i = 0) -> p @ (j /\ -k), (i = 1) -> p @ -k, (j = 0) -> p @ (i /\ -k), (j = 1) -> p @ -k ], got ( a, a), but expected ( comp ( A) (p @ !0) [ (!0 = 0) -> a, (!0 = 1) -> p @ -!1 ], a)