Set Primitive Projections.
Definition compose {A B C : Type} (g : B -> C) (f : A -> B) := fun x => g (f x).
Inductive paths {A : Type} (a : A) : A -> Type := idpath : paths a a where "x = y" := (@paths _ x y) : type_scope.
Arguments idpath {A a} , [A] a.
Definition concat {A : Type} {x y z : A} (p : x = y) (q : y = z) : x = z := match p, q with idpath, idpath => idpath end.
Notation "p @ q" := (concat p q) (at level 20) : path_scope.

Axiom ap : forall {A B:Type} (f:A -> B) {x y:A} (p:x = y), f x = f y.