Notation "f1 =1 f2" := (eqfun f1 f2) : type_scope.Notation "f1 =1 f2 :> A" := (f1 =1 (f2 : A)) : type_scope.Notation "f1 =2 f2" := (eqrel f1 f2) : type_scope.Notation "f1 =2 f2 :> A" := (f1 =2 (f2 : A)) : type_scope.Definition comp (f : B -> A) (g : C -> B) x := f (g x).Definition catcomp g f := comp f g.Definition pcomp (f : B -> option A) (g : C -> option B) x := obind f (g x).

(* Specifications: *)
Lemma eq_comp f f' g g' : f =1 f' -> g =1 g' -> comp f g =1 comp f' g'.