proposition: Lemma Coyoneda_iso : forall `{FunctorLaws f} x, { r : Type & ((r -> x) * f r)%type } ≅ f x.
proof: Proof. intros. exists (fun p => match p with existT e (x, H) => fmap x H end). exists (fun v : f x => existT _ x (id, v)). extensionalize. rewrite fmap_id0; trivial. apply EqdepFacts.eq_dep_eq_sigT. exact (Coyoneda_parametricity _ _ _ _). Qed.
imports: Hask.Ltac Hask.Prelude Hask.Control.Applicative Hask.Control.Monad Hask.Control.Monad.Cont Hask.Control.Monad.State Hask.Data.Functor.Contravariant Hask.Data.Functor.Identity Hask.Data.Functor.Kan Hask.Data.Functor.Yoneda Hask.Control.Lens Coq.Classes.Morphisms Coq.Setoids.Setoid Coq.Init.Datatypes Coq.Relations.Relation_Definitions FunctionalExtensionality