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 Import
  Classes.Kleisli.TraversableMonad
  Classes.Coalgebraic.TraversableMonad
  Functors.Early.Batch.

Import Functors.Early.Batch.Notations.
Import Kleisli.TraversableMonad.Notations.

#[local] Generalizable Variables G U T M A B.

#[local] Arguments batch {A} (B)%type_scope _.
#[local] Arguments toBatch6 {T U}%function_scope {ToBatch6}
  {A} (B)%type_scope _.


(** * Coalgebraic Traversable Monads *)
(**********************************************************************)

(** ** Derived Operations *)
(**********************************************************************)
Module DerivedOperations.

  #[export] Instance ToBatch6_Bindt `{Bindt T U}
: Coalgebraic.TraversableMonad.ToBatch6 T U :=
  (fun A B => bindt (G := Batch A (T B)) (batch (T B)):
     U A -> Batch A (T B) (U B)).

End DerivedOperations.

Class Compat_ToBatch6_Bindt
  (T: Type -> Type)
  (U: Type -> Type)
  `{Bindt_TU: Bindt T U}
  `{ToBatch6_TU: ToBatch6 T U} :=
  compat_toBatch6_bindt:
    ToBatch6_TU = DerivedOperations.ToBatch6_Bindt.

T, U: Type -> Type
Bindt_TU: Bindt T U
ToBatch6_TU: ToBatch6 T U
H: Compat_ToBatch6_Bindt T U

forall A B : Type, toBatch6 B = bindt (batch (T B))
T, U: Type -> Type
Bindt_TU: Bindt T U
ToBatch6_TU: ToBatch6 T U
H: Compat_ToBatch6_Bindt T U

forall A B : Type, toBatch6 B = bindt (batch (T B))
T, U: Type -> Type
Bindt_TU: Bindt T U
ToBatch6_TU: ToBatch6 T U
H: Compat_ToBatch6_Bindt T U
A, B: Type

toBatch6 B = bindt (batch (T B))
T, U: Type -> Type
Bindt_TU: Bindt T U
ToBatch6_TU: ToBatch6 T U
H: Compat_ToBatch6_Bindt T U
A, B: Type

DerivedOperations.ToBatch6_Bindt A B = bindt (batch (T B))
reflexivity. Qed. #[export] Instance Compat_ToBatch6_Bindt_Self `{Bindt T U}: Compat_ToBatch6_Bindt T U (ToBatch6_TU := DerivedOperations.ToBatch6_Bindt) := ltac:(hnf; reflexivity). Module DerivedInstances. Section to_coalgebraic. Context `{Kleisli.TraversableMonad.TraversableMonad T} `{Map U} `{Bindt T U} `{! Compat_Map_Bindt T U} `{! Kleisli.TraversableMonad.TraversableRightPreModule T U}. Context `{ToBatch6 T T} `{ToBatch6 T U} `{! Compat_ToBatch6_Bindt T U} `{! Compat_ToBatch6_Bindt T T}. (** ** <<double_batch6>> as <<batch ⋆6 batch>> *) (******************************************************************)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B C : Type, double_batch6 = batch (T C) ⋆6 batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B C : Type, double_batch6 = batch (T C) ⋆6 batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

double_batch6 = batch (T C) ⋆6 batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

double_batch6 = batch (T C) ⋆6 batch (T B)
reflexivity. Qed. (** ** Derived Laws *) (******************************************************************)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B : Type, toBatch6 B ∘ ret = batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B : Type, toBatch6 B ∘ ret = batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B: Type

toBatch6 B ∘ ret = batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B: Type

bindt (batch (T B)) ∘ ret = batch (T B)
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B: Type

batch (T B) = batch (T B)
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A : Type, extract_Batch ∘ mapfst_Batch ret ∘ toBatch6 A = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A : Type, extract_Batch ∘ mapfst_Batch ret ∘ toBatch6 A = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ mapfst_Batch ret ∘ toBatch6 A = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ (mapfst_Batch ret ∘ toBatch6 A) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ (mapfst_Batch ret ∘ bindt (batch (T A))) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ bindt (mapfst_Batch ret ∘ batch (T A)) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

bindt (extract_Batch ∘ (mapfst_Batch ret ∘ batch (T A))) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

bindt (extract_Batch ∘ mapfst_Batch ret ∘ batch (T A)) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
cut: extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret
bindt (extract_Batch ∘ mapfst_Batch ret ∘ batch (T A)) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type

extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
a: A

(extract_Batch ∘ mapfst_Batch ret ∘ batch (T A)) a = ret a
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
a: A

extract_Batch (mapfst_Batch ret (batch (T A) a)) = ret a
reflexivity.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
cut: extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret

bindt (extract_Batch ∘ mapfst_Batch ret ∘ batch (T A)) = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
cut: extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret

bindt ret = id
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A: Type
cut: extract_Batch ∘ mapfst_Batch ret ∘ batch (T A) = ret

id = id
reflexivity. Qed.
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B C : Type, cojoin_Batch6 A B C ∘ toBatch6 C = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T

forall A B C : Type, cojoin_Batch6 A B C ∘ toBatch6 C = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

cojoin_Batch6 A B C ∘ toBatch6 C = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

cojoin_Batch6 A B C ∘ bindt (batch (T C)) = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

cojoin_Batch6 A B C ∘ bindt (batch (T C)) = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt (cojoin_Batch6 A B C ∘ batch (T C)) = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt (cojoin_Batch6 A B C ∘ batch (T C)) = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt double_batch6 = map (toBatch6 C) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt double_batch6 = map (bindt (batch (T C))) ∘ toBatch6 B
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt double_batch6 = map (bindt (batch (T C))) ∘ bindt (batch (T B))
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt double_batch6 = bindt (batch (T C) ⋆6 batch (T B))
T: Type -> Type
Return_T: Return T
Bindt_TT: Bindt T T
H: Kleisli.TraversableMonad.TraversableMonad T
U: Type -> Type
H0: Map U
H1: Bindt T U
Compat_Map_Bindt0: Compat_Map_Bindt T U
H2: Kleisli.TraversableMonad.TraversableRightPreModule T U
H3: ToBatch6 T T
H4: ToBatch6 T U
Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T U
Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T T
A, B, C: Type

bindt (batch (T C) ⋆6 batch (T B)) = bindt (batch (T C) ⋆6 batch (T B))
reflexivity. Qed. End to_coalgebraic. (** ** Typeclass Instances *) (********************************************************************) Section instances. Context `{Return T} `{Map T} `{Bindt T T} `{! Compat_Map_Bindt T T} `{! Kleisli.TraversableMonad.TraversableMonad T} `{Map U} `{Bindt T U} `{! Compat_Map_Bindt T U} `{! Kleisli.TraversableMonad.TraversableRightPreModule T U}. Context `{ToBatch6 T T} `{ToBatch6 T U} `{! Compat_ToBatch6_Bindt T U} `{! Compat_ToBatch6_Bindt T T}. #[export] Instance: Coalgebraic.TraversableMonad.TraversableRightPreModule T T := {| trfm_extract := toBatch6_extract_Kleisli; trfm_duplicate := toBatch6_duplicate_Kleisli; |}. #[export] Instance Coalgebraic_TraversableRightPreModule_of_Kleisli: Coalgebraic.TraversableMonad.TraversableRightPreModule T U := {| trfm_extract := toBatch6_extract_Kleisli; trfm_duplicate := toBatch6_duplicate_Kleisli; |}. #[export] Instance Coalgebraic_TraversableMonad_of_Kleisli: Coalgebraic.TraversableMonad.TraversableMonad T := {| trfm_ret := toBatch6_ret_Kleisli; |}. #[export] Instance Coalgebraic_TraversableRightModule_of_Kleisli: Coalgebraic.TraversableMonad.TraversableRightModule T U := {| trfmod_monad := _ |}. End instances. End DerivedInstances.