Coherences for weak ω-categories.
If you don't feel inspired, here is a sample session:
# Identity coh id (x : *) : x -> x # Composition coh comp (x : *) (y : *) (f : x -> y) (z : *) (g : y -> z) : x -> z # Left unit coh unit-l (x : *) (y : *) (f : x -> y) : comp x x (id x) y f -> f # Right unit coh unit-r (x : *) (y : *) (f : x -> y) : comp x y f y (id y) -> f # Unitor coh unit-lr (x : *) : unit-l x x (id x) -> unit-r x x (id x) # Associativity coh assoc (x : *) (y : *) (f : x -> y) (z : *) (g : y -> z) (w : *) (h : z -> w) : comp x z (comp x y f z g) w h -> comp x y f w (comp y z g w h)Implicit arguments are available in order to shorten the coherences:
# Composition coh comp (x : *) (y : *) (f : x -> y) (z : *) (g : y -> z) : x -> z let comp f g = comp _ _ f _ g # Associativiy coh assoc (x : *) (y : *) (f : x -> y) (z : *) (g : y -> z) (w : *) (h : z -> w) : comp (comp f g) h -> comp f (comp g h) let assoc f g h = assoc _ _ f _ g _ hOperations can be polymorphic wrt the type of objects:
# Composition let comp (X : Hom) = coh (x : X) (y : X) (f : x -> y) (z : X) (g : y -> z) : (x -> z) # 1-composition let comp1 (x : *) (y : *) (f : x -> y) (z : *) (g : y -> z) = comp * x y f z g # 2-composition let comp2 (x : *) (y : *) (f : x -> y) (f' : x -> y) (a : f -> f') (f'' : x -> y) (b : f' -> f'') = comp (x -> y) f f' a f'' bFor a more involved example, have a look at the definition of the Eckmann-Hilton morphism.