(* * Copyright (c) 2009-2010, Andrew Appel, Robert Dockins and Aquinas Hobor. * *)
(* Knots with all the bells and whistles *)
Local Open Scope nat_scope.
Module Type TY_FUNCTOR_FULL.
Parameter F : Type -> Type -> Type.
Parameter bimap : forall A B C D, (A -> B) -> (C -> D) -> F B C -> F A D.
Arguments bimap [A B C D] _ _ _.

(* Specifications: *)
Axiom bimap_id : forall A B, bimap (id A) (id B) = id (F A B).
Axiom bimap_comp : forall A B C D E F (f:B -> C) (g:A -> B) (s:F -> E) (t:E -> D),
bimap s f oo bimap t g = bimap (t oo s) (f oo g).