proposition: Theorem list_exp_iso : forall a : Type, { n : nat & exp n a } ≅ list a.
proof: Proof. intros. exists (fun p : { n : nat & exp n a } => match p with | existT _ xs => exp_to_list xs end). exists (fun l => existT _ (length l) (list_to_exp l)). unfold comp, id. split. extensionality l. induction l; trivial. simpl. Abort. Theorem identity_iso : forall (A : Type), Identity A ≅ A. Proof. reflexivity. 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