Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
From Tealeaves Require Export
  Classes.Categorical.ApplicativeCommutativeIdempotent
  Classes.Kleisli.TraversableFunctor.

#[local] Generalizable Variable T G A B C ϕ M.

Import TraversableFunctor.Notations.

(** * Commutative/Idempotent-Traversable Functors *)
(******************************************************************************)

(** ** The <<traverse>> Operation *)
(** The operation is Classes.Kleisli.TraversableFunctor.Traverse *)
(******************************************************************************)

(** ** Kleisli Composition *)
(** The operation is Classes.Kleisli.TraversableFunctor.kc2 *)
(******************************************************************************)

(** ** Typeclass *)
(******************************************************************************)
Class TraversableCommIdemFunctor (T: Type -> Type) `{Traverse T} :=
  { trfci_traverse_id: forall (A: Type),
      traverse (G := fun A => A) id = @id (T A);
    trfci_traverse_traverse :
    forall `{ApplicativeCommutativeIdempotent G1}
      `{ApplicativeCommutativeIdempotent G2}
      (A B C: Type) (g: B -> G2 C) (f: A -> G1 B),
      map (traverse g) ∘ traverse f = traverse (T := T) (G := G1 ∘ G2) (g ⋆2 f);
    trfci_traverse_morphism :
    forall `{morphism: ApplicativeMorphism G1 G2 ϕ} (A B: Type) (f: A -> G1 B),
      ϕ (T B) ∘ traverse f = traverse (ϕ B ∘ f);
  }.