Definition Injective := forall x x' : X, f x = f x' -> x = x'.Definition Surjective := forall y : Y, exists x : X, y = f x.Notation One_one := (Injective _ _) (only parsing).Notation Onto := (Surjective _ _) (only parsing).Definition Finite := forall f : X -> X, Injective _ _ f -> Surjective _ _ f.Definition comp (x : X) := g (f x).Notation "f 'o' g" := (comp _ _ _ f g) (at level 20, right associativity).

(* Specifications: *)
Lemma Injections_compose : Injective _ _ f -> Injective _ _ g -> Injective _ _ (f o g).
Lemma Surjections_right : Surjective _ _ (f o g) -> Surjective _ _ g.
Lemma Surjections_compose : Surjective _ _ f -> Surjective _ _ g -> Surjective _ _ (f o g).