Generalizable All Variables.
Definition compose {A B C : Type} (g : B -> C) (f : A -> B) := fun x => g (f x).
Notation "g 'o' f" := (compose g f) (at level 40, left associativity) : function_scope.
Open Scope function_scope.

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