proposition: Theorem mul_add_iso : forall a b c, a * (b + c) ≅ (a * b) + (a * c).
proof: Proof. intros. exists (fun p => match p with | (a, inl b) => inl (a, b) | (a, inr c) => inr (a, c) end). exists (fun p => match p with | inl (a, b) => (a, inl b) | inr (a, c) => (a, inr c) end). extensionalize. 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