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.Kleisli.ContainerMonad
Classes.Kleisli.TraversableMonad
Classes.Coalgebraic.TraversableFunctor
Classes.Coalgebraic.TraversableMonad
Adapters.KleisliToCoalgebraic.TraversableMonad
Kleisli.Theory.TraversableMonad
Theory.TraversableFunctor.#[local] Generalizable VariablesU T G A B C ϕ M.Import Monoid.Notations.Import Applicative.Notations.Import TraversableFunctor.Notations.Import TraversableMonad.Notations.Import ContainerFunctor.Notations.Import Subset.Notations.Import Kleisli.TraversableMonad.DerivedInstances.(** * Simultaneous Induction on Two <<Batch>>es of the Same Length *)(******************************************************************************)Sectionshape_induction.Context
{A1A2B1B2CD: Type}
{b1: Batch A1 B1 C}
{b2: Batch A2 B2 D}
(Hshape: length_Batch b1 = length_Batch b2)
(P : forallCD : Type,
Batch A1 B1 C ->
Batch A2 B2 D ->
Prop)
(IHdone:
forall (CD : Type) (c : C) (d: D), P C D (Done c) (Done d))
(IHstep:
forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2: A2)
(Hshape: length_Batch (Step b1 a1) =
length_Batch (Step b2 a2)),
P C D (Step b1 a1) (Step b2 a2)).
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C b2: Batch A2 B2 D Hshape: length_Batch b1 = length_Batch b2 P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C b2: Batch A2 B2 D Hshape: length_Batch b1 = length_Batch b2 P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C b2: Batch A2 B2 D Hshape: length_Batch b1 = length_Batch b2 P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
length_Batch b1 = length_Batch b2 -> P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C b2: Batch A2 B2 D Hshape: length_Batch b1 = length_Batch b2 P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
forallb2 : Batch A2 B2 D,
length_Batch b1 = length_Batch b2 ->
length_Batch b1 = length_Batch b2 -> P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C b2: Batch A2 B2 D P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
forallb2 : Batch A2 B2 D,
length_Batch b1 = length_Batch b2 ->
length_Batch b1 = length_Batch b2 -> P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
forallb2 : Batch A2 B2 D,
length_Batch b1 = length_Batch b2 ->
length_Batch b1 = length_Batch b2 -> P C D b1 b2
A1, A2, B1, B2, C, D: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2)
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch b1 = length_Batch b2 ->
length_Batch b1 = length_Batch b2 -> P C D b1 b2
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 Hshape, Hshape0: length_Batch (Done c) = length_Batch b2
P C D0 (Done c) b2
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 Hshape, Hshape0: length_Batch (Step rest a) = length_Batch b2
P C D0 (Step rest a) b2
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 Hshape, Hshape0: length_Batch (Done c) = length_Batch b2
P C D0 (Done c) b2
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 d: D0 Hshape, Hshape0: length_Batch (Done c) =
length_Batch (Done d)
P C D0 (Done c) (Done d)
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 b: Batch A2 B2 (B2 -> D0) a: A2 Hshape, Hshape0: length_Batch (Done c) =
length_Batch (Step b a)
P C D0 (Done c) (Step b a)
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 d: D0 Hshape, Hshape0: length_Batch (Done c) =
length_Batch (Done d)
P C D0 (Done c) (Done d)
nowinversion Hshape.
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) c: C D0: Type b2: Batch A2 B2 D0 b: Batch A2 B2 (B2 -> D0) a: A2 Hshape, Hshape0: length_Batch (Done c) =
length_Batch (Step b a)
P C D0 (Done c) (Step b a)
false.
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 Hshape, Hshape0: length_Batch (Step rest a) = length_Batch b2
P C D0 (Step rest a) b2
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 c': D0 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Done c')
P C D0 (Step rest a) (Done c')
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
P C D0 (Step rest a) (Step rest' a')
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 c': D0 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Done c')
P C D0 (Step rest a) (Done c')
false.
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
P C D0 (Step rest a) (Step rest' a')
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
P (B1 -> C) (B2 -> D0) rest rest'
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
length_Batch (Step rest a) =
length_Batch (Step rest' a')
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
P (B1 -> C) (B2 -> D0) rest rest'
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
P (B1 -> C) (B2 -> D0) rest rest'
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a') H0: length_Batch rest = length_Batch rest'
P (B1 -> C) (B2 -> D0) rest rest'
apply IHrest; auto.
A1, A2, B1, B2, D, C: Type b1: Batch A1 B1 C P: forallCD : Type,
Batch A1 B1 C -> Batch A2 B2 D -> Prop IHdone: forall (CD : Type) (c : C) (d : D),
P C D (Done c) (Done d) IHstep: forall (CD : Type)
(b1 : Batch A1 B1 (B1 -> C))
(b2 : Batch A2 B2 (B2 -> D)),
P (B1 -> C) (B2 -> D) b1 b2 ->
forall (a1 : A1) (a2 : A2),
length_Batch (Step b1 a1) =
length_Batch (Step b2 a2) ->
P C D (Step b1 a1) (Step b2 a2) rest: Batch A1 B1 (B1 -> C) a: A1 IHrest: Batch A1 B1 (B1 -> C) ->
forall (D : Type) (b2 : Batch A2 B2 D),
length_Batch rest = length_Batch b2 ->
length_Batch rest = length_Batch b2 ->
P (B1 -> C) D rest b2 D0: Type b2: Batch A2 B2 D0 rest': Batch A2 B2 (B2 -> D0) a': A2 Hshape, Hshape0: length_Batch (Step rest a) =
length_Batch (Step rest' a')
length_Batch (Step rest a) =
length_Batch (Step rest' a')
assumption.Qed.Endshape_induction.(*(** ** Simultaneous Induction but now D is monomorphic *)(******************************************************************************)Section shape_induction. Context {A1 A2 B1 B2 C D: Type} {b1: Batch A1 B1 C} {b2: Batch A2 B2 D} (Hshape: length_Batch b1 = length_Batch b2) (P :Batch A1 B1 C -> Batch A2 B2 D -> Prop) (IHdone: forall (c : C) (d: D), P (Done c) (Done d)) (IHstep: forall (b1 : Batch A1 B1 (B1 -> C)) (b2 : Batch A2 B2 (B2 -> D)), P (B1 -> C) (B2 -> D) b1 b2 -> forall (a1 : A1) (a2: A2) (Hshape: length_Batch (Step b1 a1) = length_Batch (Step b2 a2)), P C D (Step b1 a1) (Step b2 a2)). Lemma Batch_length_ind: P C D b1 b2. Proof. generalize dependent Hshape. generalize dependent b2. clear Hshape. clear b2. generalize dependent D. induction b1 as [C c | C rest IHrest a]; intros D0 b2 Hshape ?. - destruct b2. + now inversion Hshape. + false. - destruct b2 as [c' | rest' a']. + false. + apply IHstep. * specialize (IHrest rest). inversion Hshape. apply IHrest; auto. * assumption. Qed.End shape_induction.*)(** * Theory of Traversable Monads *)(**********************************************************************)Sectiontraversable_monad_theory.Context
`{ret_inst: Return T}
`{Map_T_inst: Map T}
`{Traverse_T_inst: Traverse T}
`{Bind_T_inst: Bind T T}
`{Bindt_T_inst: Bindt T T}
`{ToSubset_T_inst: ToSubset T}
`{ToBatch_T_inst: ToBatch T}
`{ToBatch6_T_inst: ToBatch6 T T}
`{! Compat_Map_Bindt T T}
`{! Compat_Traverse_Bindt T T}
`{! Compat_Bind_Bindt T T}
`{! Compat_ToSubset_Traverse T}
`{! Compat_ToBatch_Traverse T}
`{! Compat_ToBatch6_Bindt T T}.Context
`{Map_U_inst: Map U}
`{Traverse_U_inst: Traverse U}
`{Bind_U_inst: Bind T U}
`{Bindt_U_inst: Bindt T U}
`{ToSubset_U_inst: ToSubset U}
`{ToBatch_U_inst: ToBatch U}
`{ToBatch6_U_inst: ToBatch6 T U}
`{! Compat_Map_Bindt T U}
`{! Compat_Traverse_Bindt T U}
`{! Compat_Bind_Bindt T U}
`{! Compat_ToSubset_Traverse U}
`{! Compat_ToBatch_Traverse U}
`{! Compat_ToBatch6_Bindt T U}.Context
`{Monad_inst: ! TraversableMonad T}
`{Module_inst: ! TraversableRightPreModule T U}.(** ** Factoring operations through <<toBatch>> *)(********************************************************************)SectionrunBatch.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = runBatch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = runBatch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = runBatch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = runBatch f ∘ bindt (batch A (T B))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = bindt (runBatch f ∘ batch A (T B))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G (T B)
bindt f = bindt f
reflexivity.Qed.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
bind f = runBatch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
bind f = runBatch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
bind f = runBatch f ∘ bindt (batch A (T B))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
bindt f = runBatch f ∘ bindt (batch A (T B))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
runBatch f ∘ toBatch6 =
runBatch f ∘ bindt (batch A (T B))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> T B
runBatch f ∘ bindt (batch A (T B)) =
runBatch f ∘ bindt (batch A (T B))
reflexivity.Qed.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G B
traverse f = runBatch (map ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G B
traverse f = runBatch (map ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G B
bindt (map ret ∘ f) =
runBatch (map ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f: A -> G B
runBatch (map ret ∘ f) ∘ toBatch6 =
runBatch (map ret ∘ f) ∘ toBatch6
reflexivity.Qed.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B
map f = runBatch (ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B
map f = runBatch (ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B
traverse f = runBatch (ret ∘ f) ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forallA : Type, id = runBatch ret ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forallA : Type, id = runBatch ret ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A: Type
id = runBatch ret ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A: Type
map id = runBatch ret ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A: Type
reflexivity.Qed.(** ** Relating <<toBatch6>> with <<toBatch>> *)(******************************************************************)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
toBatch t = mapsnd_Batch ret (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
toBatch t = mapsnd_Batch ret (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
toBatch t = mapsnd_Batch ret (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
traverse (batch A B) t = mapsnd_Batch ret (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
bindt (map ret ∘ batch A B) t =
mapsnd_Batch ret (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
bindt (map ret ∘ batch A B) t =
mapsnd_Batch ret (bindt (batch A (T B)) t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
bindt (map ret ∘ batch A B) t =
(mapsnd_Batch ret ∘ bindt (batch A (T B))) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
bindt (map ret ∘ batch A B) t =
bindt (mapsnd_Batch ret ∘ batch A (T B)) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A
bindt (map ret ∘ batch A B) t =
bindt (map ret ∘ batch A B) t
reflexivity.Qed.EndrunBatch.(** ** Naturality of <<toBatch6>> *)(********************************************************************)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
toBatch6 ∘ map f = mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
toBatch6 ∘ map f = mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
toBatch6 ∘ map f = mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
bindt (batch B (T C)) ∘ map f =
mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
bindt (batch B (T C) ∘ f) = mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
runBatch (batch B (T C) ∘ f) ∘ toBatch6 =
mapfst_Batch f ∘ toBatch6
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
runBatch (batch B (T C) ∘ f) ∘ bindt (batch A (T C)) =
mapfst_Batch f ∘ bindt (batch A (T C))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type
runBatch (batch B (T C) ∘ f)
∘ (runBatch (batch A (T C)) ∘ toBatch6) =
mapfst_Batch f ∘ (runBatch (batch A (T C)) ∘ toBatch6)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A
(runBatch (batch B (T C) ∘ f)
∘ (runBatch (batch A (T C)) ∘ toBatch6)) t =
(mapfst_Batch f
∘ (runBatch (batch A (T C)) ∘ toBatch6)) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) (toBatch6 t)) =
mapfst_Batch f (runBatch (batch A (T C)) (toBatch6 t))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type c: C0
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) (Done c)) =
mapfst_Batch f (runBatch (batch A (T C)) (Done c))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A IHb: runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) =
mapfst_Batch f (runBatch (batch A (T C)) b)
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) (Step b a)) =
mapfst_Batch f (runBatch (batch A (T C)) (Step b a))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type c: C0
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) (Done c)) =
mapfst_Batch f (runBatch (batch A (T C)) (Done c))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type c: C0
pure c = Done c
reflexivity.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A IHb: runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) =
mapfst_Batch f (runBatch (batch A (T C)) b)
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) (Step b a)) =
mapfst_Batch f (runBatch (batch A (T C)) (Step b a))
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A IHb: runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) =
mapfst_Batch f (runBatch (batch A (T C)) b)
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b <⋆> batch A (T C) a) =
mapfst_Batch f
(runBatch (batch A (T C)) b <⋆> batch A (T C) a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A IHb: runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) =
mapfst_Batch f (runBatch (batch A (T C)) b)
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b <⋆> batch A (T C) a) =
mapfst_Batch f (runBatch (batch A (T C)) b) <⋆>
mapfst_Batch f (batch A (T C) a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A IHb: runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) =
mapfst_Batch f (runBatch (batch A (T C)) b)
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b <⋆> batch A (T C) a) =
mapfst_Batch f (runBatch (batch A (T C)) b) <⋆>
mapfst_Batch f (batch A (T C) a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b <⋆> batch A (T C) a) =
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) <⋆>
mapfst_Batch f (batch A (T C) a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> B C: Type t: U A C0: Type b: Batch A (T C) (T C -> C0) a: A
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b <⋆> batch A (T C) a) =
runBatch (batch B (T C) ○ f)
(runBatch (batch A (T C)) b) <⋆>
mapfst_Batch f (batch A (T C) a)
Abort. (* TODO *)(** ** Respectfulness properties *)(********************************************************************)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f1f2 : A -> G (T B)) (t : U A),
(foralla : A, a ∈ t -> f1 a = f2 a) ->
bindt f1 t = bindt f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f1f2 : A -> G (T B)) (t : U A),
(foralla : A, a ∈ t -> f1 a = f2 a) ->
bindt f1 t = bindt f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A, a ∈ t -> f1 a = f2 a
bindt f1 t = bindt f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A, a ∈ t -> f1 a = f2 a
(runBatch f1 ∘ toBatch6) t = bindt f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A, a ∈ t -> f1 a = f2 a
(runBatch f1 ∘ toBatch6) t =
(runBatch f2 ∘ toBatch6) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A, tosubset t a -> f1 a = f2 a
(runBatch f1 ∘ toBatch6) t =
(runBatch f2 ∘ toBatch6) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A,
(runBatch ret ∘ toBatch) t a -> f1 a = f2 a
(runBatch f1 ∘ toBatch6) t =
(runBatch f2 ∘ toBatch6) t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A,
(runBatch ret ∘ toBatch) t a -> f1 a = f2 a
runBatch f1 (toBatch6 t) = runBatch f2 (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A,
runBatch ret (toBatch t) a -> f1 a = f2 a
runBatch f1 (toBatch6 t) = runBatch f2 (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A,
runBatch ret (mapsnd_Batch ret (toBatch6 t)) a ->
f1 a = f2 a
runBatch f1 (toBatch6 t) = runBatch f2 (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A hyp: foralla : A,
runBatch (map ret ∘ ret) (toBatch6 t) a ->
f1 a = f2 a
runBatch f1 (toBatch6 t) = runBatch f2 (toBatch6 t)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type c: C hyp: foralla : A,
runBatch (map ret ∘ ret) (Done c) a ->
f1 a = f2 a
runBatch f1 (Done c) = runBatch f2 (Done c)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f1 (Step b a) = runBatch f2 (Step b a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type c: C hyp: foralla : A,
runBatch (map ret ∘ ret) (Done c) a ->
f1 a = f2 a
runBatch f1 (Done c) = runBatch f2 (Done c)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type c: C hyp: foralla : A, pure c a -> f1 a = f2 a
pure c = pure c
reflexivity.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f1 (Step b a) = runBatch f2 (Step b a)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f1 b <⋆> f1 a = runBatch f2 b <⋆> f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f2 b <⋆> f1 a = runBatch f2 b <⋆> f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f2 b <⋆> f1 a = runBatch f2 b <⋆> f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f2 b <⋆> f2 a = runBatch f2 b <⋆> f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch (map ret ∘ ret) (Step b a) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch f2 b <⋆> f2 a = runBatch f2 b <⋆> f2 a
reflexivity.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
runBatch (map ret ∘ ret) (Step b a) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
(runBatch (map ret ∘ ret) b ● (map ret ∘ ret) a) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
(runBatch (map ret ○ ret) b ● map ret (ret a)) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
(runBatch (map ret ○ ret) b ● map ret (ret a)) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
(runBatch (map ret ○ ret) b ● map ret (ret a)) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
(runBatch (map ret ○ ret) b ● map ret (ret a)) a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
map ret (ret a) a
reflexivity.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
f1 a0 = f2 a0
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
runBatch (map ret ∘ ret) (Step b a) a0
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
(runBatch (map ret ∘ ret) b ● (map ret ∘ ret) a) a0
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
(runBatch (map ret ∘ ret) b ● (map ret ∘ ret) a) a0
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
(runBatch (map ret ∘ ret) b ● (map ret ∘ ret) a) a0
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H: Applicative G A, B: Type f1, f2: A -> G (T B) t: U A C: Type b: Batch A (T B) (T B -> C) a: A hyp: foralla0 : A,
runBatch (map ret ∘ ret) (Step b a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (map ret ∘ ret) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b a0: A H0: runBatch (map ret ∘ ret) b a0
(runBatch (map ret ∘ ret) b ● (map ret ∘ ret) a) a0
nowleft.Qed.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (AB : Type) (t : U A) (f1f2 : A -> T B),
(foralla : A, a ∈ t -> f1 a = f2 a) ->
bind f1 t = bind f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (AB : Type) (t : U A) (f1f2 : A -> T B),
(foralla : A, a ∈ t -> f1 a = f2 a) ->
bind f1 t = bind f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A f1, f2: A -> T B hyp: foralla : A, a ∈ t -> f1 a = f2 a
bind f1 t = bind f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A f1, f2: A -> T B hyp: foralla : A, a ∈ t -> f1 a = f2 a
bindt f1 t = bind f2 t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: U A f1, f2: A -> T B hyp: foralla : A, a ∈ t -> f1 a = f2 a
bindt f1 t = bindt f2 t
nowapply (bindt_respectful (funA => A) f1 f2).Qed.(** ** <<tosubset>> is a Homomorphism *)(********************************************************************)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
ParallelRightModuleHom T subset U subset
(@tosubset T ToSubset_T_inst)
(@tosubset U ToSubset_U_inst)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
ParallelRightModuleHom T subset U subset
(@tosubset T ToSubset_T_inst)
(@tosubset U ToSubset_U_inst)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (AB : Type) (f : A -> T B),
tosubset ∘ bind f = bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce ret ∘ bind f =
bind (tosubset ∘ f) ∘ tosubset
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce ret ∘ bind f =
bind (mapReduce ret ∘ f) ∘ tosubset
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce ret ∘ bind f =
bind (mapReduce ret ∘ f) ∘ mapReduce ret
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce (mapReduce ret ∘ f) =
bind (mapReduce ret ∘ f) ∘ mapReduce ret
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce (mapReduce ret ∘ f) =
mapReduce (bind (mapReduce ret ∘ f) ∘ ret)
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type f: A -> T B
mapReduce (mapReduce ret ∘ f) =
mapReduce (mapReduce ret ∘ f)
reflexivity.Qed.Endtraversable_monad_theory.(** ** Monad Homomorphisms *)(**********************************************************************)Sectionhomomorphisms.Context
`{ret_inst: Return T}
`{Map_T_inst: Map T}
`{Traverse_T_inst: Traverse T}
`{Bind_T_inst: Bind T T}
`{Bindt_T_inst: Bindt T T}
`{ToSubset_T_inst: ToSubset T}
`{ToBatch_T_inst: ToBatch T}
`{ToBatch6_T_inst: ToBatch6 T T}
`{! Compat_Map_Bindt T T}
`{! Compat_Traverse_Bindt T T}
`{! Compat_Bind_Bindt T T}
`{! Compat_ToSubset_Traverse T}
`{! Compat_ToBatch_Traverse T}
`{! Compat_ToBatch6_Bindt T T}.Context
`{Map_U_inst: Map U}
`{Traverse_U_inst: Traverse U}
`{Bind_U_inst: Bind T U}
`{Bindt_U_inst: Bindt T U}
`{ToSubset_U_inst: ToSubset U}
`{ToBatch_U_inst: ToBatch U}
`{ToBatch6_U_inst: ToBatch6 T U}
`{! Compat_Map_Bindt T U}
`{! Compat_Traverse_Bindt T U}
`{! Compat_Bind_Bindt T U}
`{! Compat_ToSubset_Traverse U}
`{! Compat_ToBatch_Traverse U}
`{! Compat_ToBatch6_Bindt T U}.Context
`{Monad_inst: ! TraversableMonad T}
`{Module_inst: ! TraversableRightPreModule T U}.#[export] InstanceMonad_Hom_Tolist
: MonadHom T list (@tolist T _) :=
{| kmon_hom_ret := tolist_ret;
kmon_hom_bind := tolist_bind;
|}.#[export] InstanceMonad_Hom_Toset
: MonadHom T subset (@tosubset T _) :=
{| kmon_hom_ret := tosubset_hom1;
kmon_hom_bind := tosubset_hom2;
|}.
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
ContainerMonad T
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
ContainerMonad T
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U
forall (AB : Type) (t : T A) (fg : A -> T B),
(foralla : A, a ∈ t -> f a = g a) ->
bind f t = bind g t
T: Type -> Type ret_inst: Return T Map_T_inst: Map T Traverse_T_inst: Traverse T Bind_T_inst: Bind T T Bindt_T_inst: Bindt T T ToSubset_T_inst: ToSubset T ToBatch_T_inst: ToBatch T ToBatch6_T_inst: ToBatch6 T T Compat_Map_Bindt0: Compat_Map_Bindt T T Compat_Traverse_Bindt0: Compat_Traverse_Bindt T T Compat_Bind_Bindt0: Compat_Bind_Bindt T T Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T Compat_ToBatch6_Bindt0: Compat_ToBatch6_Bindt T T U: Type -> Type Map_U_inst: Map U Traverse_U_inst: Traverse U Bind_U_inst: Bind T U Bindt_U_inst: Bindt T U ToSubset_U_inst: ToSubset U ToBatch_U_inst: ToBatch U ToBatch6_U_inst: ToBatch6 T U Compat_Map_Bindt1: Compat_Map_Bindt T U Compat_Traverse_Bindt1: Compat_Traverse_Bindt T U Compat_Bind_Bindt1: Compat_Bind_Bindt T U Compat_ToSubset_Traverse1: Compat_ToSubset_Traverse U Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse U Compat_ToBatch6_Bindt1: Compat_ToBatch6_Bindt T U Monad_inst: TraversableMonad T Module_inst: TraversableRightPreModule T U A, B: Type t: T A f, g: A -> T B H: foralla : A, a ∈ t -> f a = g a
bind f t = bind g t
nowapply bind_respectful.Qed.#[export] InstanceContainerModule_Traversable:
ContainerRightModule T U :=
{| contmod_pointwise := bind_respectful;
contmod_hom := tosubset_hom2_Module;
|}.Endhomomorphisms.