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.TraversableFunctor
  Classes.Kleisli.Theory.TraversableFunctor
  Classes.Categorical.ContainerFunctor
  Classes.Categorical.ShapelyFunctor
  Classes.Categorical.ApplicativeCommutativeIdempotent
  Adapters.KleisliToCoalgebraic.TraversableFunctor
  Functors.Batch
  Functors.List
  Functors.VectorRefinement.

Import Coalgebraic.TraversableFunctor (ToBatch, toBatch).
Import KleisliToCoalgebraic.TraversableFunctor.DerivedInstances.

Import Subset.Notations.
Import Applicative.Notations.
Import ContainerFunctor.Notations.
Import ProductFunctor.Notations.
Import Kleisli.TraversableFunctor.Notations.
Import Batch.Notations.
Import Monoid.Notations.
Import VectorRefinement.Notations.

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

#[local] Arguments mapfst_Batch {B C A1 A2}%type_scope
  f%function_scope b.
#[local] Arguments mapsnd_Batch {A B1 B2 C}%type_scope
  f%function_scope b.


(** * Miscellaneous Properties Concerning <<toBatch>> *)
(**********************************************************************)
Section stuff.

  Import Adapters.KleisliToCoalgebraic.TraversableFunctor.

  Context
    `{Kleisli.TraversableFunctor.TraversableFunctor T}
    `{Map T}
    `{ToBatch T}
    `{! Compat_Map_Traverse T}
    `{! Compat_ToBatch_Traverse T}.

  (** ** Relating <<tolist>> and <<Batch_contents ∘ toBatch>> *)
  (********************************************************************)
  
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A), proj1_sig (Batch_contents (toBatch t)) = List.rev (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A), proj1_sig (Batch_contents (toBatch t)) = List.rev (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

proj1_sig (Batch_contents (toBatch t)) = List.rev (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

List.rev (tolist (toBatch t)) = List.rev (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

List.rev (tolist t) = List.rev (tolist t)
reflexivity. Qed. (** ** Naturality of <<toBatch>> *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, A': Type

forall t : T A, toBatch (shape t) = shape (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, A': Type

forall t : T A, toBatch (shape t) = shape (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, A': Type
t: T A

toBatch (shape t) = shape (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, A': Type
t: T A

toBatch (map (const tt) t) = map (const tt) (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, A': Type
t: T A

(toBatch ∘ map (const tt)) t = (map (const tt) ∘ toBatch) t
now rewrite toBatch_mapfst. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall t : T A, shape t = runBatch (const tt) (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall t : T A, shape t = runBatch (const tt) (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

shape t = runBatch (const tt) (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

map (const tt) t = runBatch (const tt) (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

(runBatch (const tt) ∘ toBatch) t = runBatch (const tt) (toBatch t)
reflexivity. Qed. (* This statement holds without a A' universally quantified inside the iff, but this is harder to prove. *)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall t u : T A, (forall A' : Type, toBatch t = toBatch u) <-> t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall t u : T A, (forall A' : Type, toBatch t = toBatch u) <-> t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A

(forall A' : Type, toBatch t = toBatch u) <-> t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A

(forall A' : Type, toBatch t = toBatch u) -> t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
t = u -> forall A' : Type, toBatch t = toBatch u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A

(forall A' : Type, toBatch t = toBatch u) -> t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
HBatch: forall A' : Type, toBatch t = toBatch u

t = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
HBatch: forall A' : Type, toBatch t = toBatch u

id t = id u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
HBatch: forall A' : Type, toBatch t = toBatch u

(runBatch id ∘ toBatch) t = (runBatch id ∘ toBatch) u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
HBatch: forall A' : Type, toBatch t = toBatch u

runBatch id (toBatch t) = runBatch id (toBatch u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A
HBatch: forall A' : Type, toBatch t = toBatch u

runBatch id (toBatch u) = runBatch id (toBatch u)
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t, u: T A

t = u -> forall A' : Type, toBatch t = toBatch u
intro; now subst. Qed. (** ** <<Batch_contents ∘ toBatch>> is Independent of <<B>> *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B B' : Type) (t : T A), Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B B' : Type) (t : T A), Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, B': Type
t: T A

Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, B': Type
t: T A

proj1_sig (Batch_contents (toBatch t)) = proj1_sig (Batch_contents (toBatch t))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, B': Type
t: T A

List.rev (tolist t) = proj1_sig (Batch_contents (toBatch t))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, B': Type
t: T A

List.rev (tolist t) = List.rev (tolist t)
reflexivity. Qed. (** *** Terms with the same <<shape>> have <<toBatch>> of the same shape *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A' B A : Type) (t1 : T A) (t2 : T A'), shape t1 = shape t2 -> shape (toBatch t1) = shape (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A' B A : Type) (t1 : T A) (t2 : T A'), shape t1 = shape t2 -> shape (toBatch t1) = shape (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
Hshape: shape t1 = shape t2

shape (toBatch t1) = shape (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
Hshape: shape t1 = shape t2

toBatch (shape t1) = shape (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
Hshape: shape t1 = shape t2

toBatch (shape t1) = toBatch (shape t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
Hshape: shape t1 = shape t2

toBatch (shape t2) = toBatch (shape t2)
reflexivity. Qed. (** *** Terms with the same <<tolist>> terms have <<toBatch>> of the same <<tolist>>s*) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (B1 B2 A : Type) (t1 t2 : T A), tolist t1 = tolist t2 -> tolist (toBatch t1) = tolist (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (B1 B2 A : Type) (t1 t2 : T A), tolist t1 = tolist t2 -> tolist (toBatch t1) = tolist (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
B1, B2, A: Type
t1, t2: T A
Hshape: tolist t1 = tolist t2

tolist (toBatch t1) = tolist (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
B1, B2, A: Type
t1, t2: T A
Hshape: tolist (toBatch t1) = tolist t2

tolist (toBatch t1) = tolist (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
B1, B2, A: Type
t1, t2: T A
Hshape: tolist (toBatch t1) = tolist (toBatch t2)

tolist (toBatch t1) = tolist (toBatch t2)
assumption. Qed. (** ** Equal <<toBatch>> Implies Equal <<tolist>> *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

tolist (toBatch t1) = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

tolist (toBatch t1) = tolist (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

tolist (toBatch t2) = tolist (toBatch t2)
reflexivity. Qed. (** ** Similar <<shape>>d <<toBatch>> implies similar <<shape>>s*) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A' B A : Type) (t1 : T A) (t2 : T A'), shape (toBatch t1) = shape (toBatch t2) -> shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A' B A : Type) (t1 : T A) (t2 : T A'), shape (toBatch t1) = shape (toBatch t2) -> shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'

shape (toBatch t1) = shape (toBatch t2) -> shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
HBatch: shape (toBatch t1) = shape (toBatch t2)

shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
HBatch: toBatch (shape t1) = shape (toBatch t2)

shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
HBatch: toBatch (shape t1) = toBatch (shape t2)

shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A', B, A: Type
t1: T A
t2: T A'
HBatch: toBatch (shape t1) = toBatch (shape t2)

map (const tt) t1 = map (const tt) t2
Abort.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

shape t1 = shape t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

map (const tt) t1 = map (const tt) t2
Abort.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 <-> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 <-> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

toBatch t1 = toBatch t2 <-> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

toBatch t1 = toBatch t2 -> tolist t1 = tolist t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
tolist t1 = tolist t2 -> toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

toBatch t1 = toBatch t2 -> tolist t1 = tolist t2
apply toBatch_injective_tolist.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

tolist t1 = tolist t2 -> toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

tolist (toBatch t1) = tolist t2 -> toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A

tolist (toBatch t1) = tolist (toBatch t2) -> toBatch t1 = toBatch t2
Abort.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t1 t2 : T A), toBatch t1 = toBatch t2 -> t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

id t1 = id t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

(runBatch id ∘ toBatch) t1 = (runBatch id ∘ toBatch) t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
Heq: toBatch t1 = toBatch t2

runBatch id (toBatch t1) = runBatch id (toBatch t2)
Abort. End stuff. (** * Length of <<toBatch>> is polymorphic *) (**********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: ToBatch T
H1: Map T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B C : Type), length_Batch (toBatch t) = length_Batch (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: ToBatch T
H1: Map T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B C : Type), length_Batch (toBatch t) = length_Batch (toBatch t)
Abort. (** * Traversable Functors are Containers *) (**********************************************************************) (** ** Traversable Functors are Shapely *) (**********************************************************************) Section shapeliness. Context `{TraversableFunctor T} `{Map T} `{ToBatch T} `{! Compat_Map_Traverse T} `{! Compat_ToBatch_Traverse T} `{! ToSubset T} `{! Functor T} `{! Compat_ToSubset_Traverse T}.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A : Type) (t1 t2 : T A), shape t1 = shape t2 /\ tolist t1 = tolist t2 -> t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A : Type) (t1 t2 : T A), shape t1 = shape t2 /\ tolist t1 = tolist t2 -> t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

t1 = t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

id t1 = id t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

(runBatch id ∘ toBatch) t1 = (runBatch id ∘ toBatch) t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

runBatch id (toBatch t1) = runBatch id (toBatch t2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

shape (toBatch t1) = shape (toBatch t2) -> toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2

tolist (toBatch t1) = tolist (toBatch t2) -> shape (toBatch t1) = shape (toBatch t2) -> toBatch t1 = toBatch t2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t1, t2: T A
hyp1: shape t1 = shape t2
hyp2: tolist t1 = tolist t2
H2: tolist (toBatch t1) = tolist (toBatch t2)
H3: shape (toBatch t1) = shape (toBatch t2)

toBatch t1 = toBatch t2
apply Batch_shapeliness; assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), map f1 (tolist t) = map f2 (tolist t) <-> (forall a : A, a ∈ t -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), map f1 (tolist t) = map f2 (tolist t) <-> (forall a : A, a ∈ t -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A

map f1 (tolist t) = map f2 (tolist t) <-> (forall a : A, a ∈ t -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A

map f1 (tolist t) = map f2 (tolist t) <-> (forall a : A, a ∈ tolist t -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A

map f1 nil = map f2 nil <-> (forall a : A, a ∈ nil -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
map f1 (a :: l) = map f2 (a :: l) <-> (forall a0 : A, a0 ∈ (a :: l) -> f1 a0 = f2 a0)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A

map f1 nil = map f2 nil <-> (forall a : A, a ∈ nil -> f1 a = f2 a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A

nil = nil <-> (forall a : A, False -> f1 a = f2 a)
tauto.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)

map f1 (a :: l) = map f2 (a :: l) <-> (forall a0 : A, a0 ∈ (a :: l) -> f1 a0 = f2 a0)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)

f1 a :: map f1 l = f2 a :: map f2 l <-> (forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)

f1 a :: map f1 l = f2 a :: map f2 l -> forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
(forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0) -> f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)

f1 a :: map f1 l = f2 a :: map f2 l -> forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l

forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l

forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case1: a = a'

f1 a' = f2 a'
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case2: List.In a' l
f1 a' = f2 a'
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case1: a = a'

f1 a' = f2 a'
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
a': A
H3: f1 a' = f2 a'
Hyp: f1 a' :: map f1 l = f2 a' :: map f2 l
H4: map f1 l = map f2 l

f1 a' = f2 a'
assumption.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case2: List.In a' l

f1 a' = f2 a'
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case2: List.In a' l

map f1 l = map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case2: List.In a' l
a' ∈ l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
Hyp: f1 a :: map f1 l = f2 a :: map f2 l
H3: f1 a = f2 a
H4: map f1 l = map f2 l
a': A
Case2: List.In a' l

a' ∈ l
assumption.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)

(forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0) -> f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0

f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0

f1 a = f2 a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a
f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0

f1 a = f2 a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0

a = a \/ List.In a l
now left.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a

f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a

f1 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a

f2 a :: map f1 l = f2 a :: map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a

map f1 l = map f2 l
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
a: A
l: list A
IHl: map f1 l = map f2 l <-> (forall a : A, a ∈ l -> f1 a = f2 a)
X: forall a0 : A, a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
cut: f1 a = f2 a

forall a : A, a ∈ l -> f1 a = f2 a
firstorder. } Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), map f1 t = map f2 t <-> map f1 (tolist t) = map f2 (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), map f1 t = map f2 t <-> map f1 (tolist t) = map f2 (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

map f1 t = map f2 t <-> map f1 (tolist t) = map f2 (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

map f1 t = map f2 t <-> (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

map f1 t = map f2 t -> (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
(map f1 ∘ tolist) t = (map f2 ∘ tolist) t -> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

map f1 t = map f2 t -> (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hmapeq: map f1 t = map f2 t

(map f1 ∘ tolist) t = (map f2 ∘ tolist) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hmapeq: map f1 t = map f2 t

(tolist ∘ map f1) t = (map f2 ∘ tolist) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hmapeq: map f1 t = map f2 t

(tolist ∘ map f1) t = (tolist ∘ map f2) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hmapeq: map f1 t = map f2 t

tolist (map f1 t) = tolist (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hmapeq: map f1 t = map f2 t

tolist (map f2 t) = tolist (map f2 t)
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

(map f1 ∘ tolist) t = (map f2 ∘ tolist) t -> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t

map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t

(shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t) -> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

shape (map f1 t) = shape (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t
tolist (map f1 t) = tolist (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

shape (map f1 t) = shape (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

shape t = shape (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

shape t = shape t
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

tolist (map f1 t) = tolist (map f2 t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

(tolist ∘ map f1) t = (tolist ∘ map f2) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

(map f1 ∘ tolist) t = (tolist ∘ map f2) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A
Hyp: (map f1 ∘ tolist) t = (map f2 ∘ tolist) t
X: shape (map f1 t) = shape (map f2 t) /\ tolist (map f1 t) = tolist (map f2 t) -> map f1 t = map f2 t

(map f1 ∘ tolist) t = (map f2 ∘ tolist) t
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) <-> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) <-> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

(forall a : A, a ∈ t -> f1 a = f2 a) <-> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

(forall a : A, a ∈ t -> f1 a = f2 a) <-> map f1 (tolist t) = map f2 (tolist t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
H0: Map T
H1: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
ToSubset0: ToSubset T
Functor0: Functor T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Functor1: Functor T
A, B: Type
f1, f2: A -> B
t: T A

(forall a : A, a ∈ t -> f1 a = f2 a) <-> (forall a : A, a ∈ t -> f1 a = f2 a)
tauto. Qed. End shapeliness. (** ** Pointwise Reasoning *) (**********************************************************************) Section pointwise. Context `{Classes.Kleisli.TraversableFunctor.TraversableFunctor T} `{ToMap_inst: Map T} `{ToSubset_inst: ToSubset T} `{ToBatch_inst: ToBatch T} `{! Compat_Map_Traverse T} `{! Compat_ToSubset_Traverse T} `{! Compat_ToBatch_Traverse T}.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A B : Type) (f1 f2 : A -> G B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) -> traverse f1 t = traverse f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A B : Type) (f1 f2 : A -> G B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) -> traverse f1 t = traverse f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

traverse f1 t = traverse f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

(runBatch f1 ∘ toBatch) t = (runBatch f2 ∘ toBatch) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, tosubset t a -> f1 a = f2 a

(runBatch f1 ∘ toBatch) t = (runBatch f2 ∘ toBatch) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, (runBatch ret ∘ toBatch) t a -> f1 a = f2 a

(runBatch f1 ∘ toBatch) t = (runBatch f2 ∘ toBatch) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, runBatch ret (toBatch t) a -> f1 a = f2 a

runBatch f1 (toBatch t) = runBatch f2 (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
hyp: forall a : A, runBatch (Return_subset A) (toBatch t) a -> f1 a = f2 a

runBatch f1 (toBatch t) = runBatch f2 (toBatch t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
c: C
hyp: forall a : A, runBatch (Return_subset A) (Done c) a -> f1 a = f2 a

runBatch f1 (Done c) = runBatch f2 (Done c)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b
runBatch f1 (b ⧆ a) = runBatch f2 (b ⧆ a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
c: C
hyp: forall a : A, runBatch (Return_subset A) (Done c) a -> f1 a = f2 a

runBatch f1 (Done c) = runBatch f2 (Done c)
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

runBatch f1 (b ⧆ a) = runBatch f2 (b ⧆ a)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) 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
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

runBatch f1 b = runBatch f2 b
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b
f1 a = f2 a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

runBatch f1 b = runBatch f2 b
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b
a0: A
H1: runBatch (Return_subset A) b a0

f1 a0 = f2 a0
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b
a0: A
H1: runBatch (Return_subset A) b a0

runBatch (Return_subset A) (b ⧆ a) a0
now left.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

f1 a = f2 a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B: Type
f1, f2: A -> G B
t: T A
C: Type
b: Batch A B (B -> C)
a: A
hyp: forall a0 : A, runBatch (Return_subset A) (b ⧆ a) a0 -> f1 a0 = f2 a0
IHb: (forall a : A, runBatch (Return_subset A) b a -> f1 a = f2 a) -> runBatch f1 b = runBatch f2 b

runBatch (Return_subset A) (b ⧆ a) a
now right. Qed. (** *** Corollaries *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A : Type) (f1 : A -> G A) (t : T A), (forall a : A, a ∈ t -> f1 a = pure a) -> traverse f1 t = pure t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A : Type) (f1 : A -> G A) (t : T A), (forall a : A, a ∈ t -> f1 a = pure a) -> traverse f1 t = pure t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A: Type
f1: A -> G A
t: T A
H1: forall a : A, a ∈ t -> f1 a = pure a

traverse f1 t = pure t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A: Type
f1: A -> G A
t: T A
H1: forall a : A, a ∈ t -> f1 a = pure a

traverse f1 t = traverse pure t
now apply traverse_respectful. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (t : T A) (f : A -> G B) (g : A -> B), (forall a : A, a ∈ t -> f a = pure (g a)) -> traverse f t = pure (map g t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (t : T A) (f : A -> G B) (g : A -> B), (forall a : A, a ∈ t -> f a = pure (g a)) -> traverse f t = pure (map g t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
t: T A
f: A -> G B
g: A -> B
H1: forall a : A, a ∈ t -> f a = pure (g a)

traverse f t = pure (map g t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
t: T A
f: A -> G B
g: A -> B
H1: forall a : A, a ∈ t -> f a = pure (g a)

traverse f t = traverse pure (map g t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
t: T A
f: A -> G B
g: A -> B
H1: forall a : A, a ∈ t -> f a = pure (g a)

traverse f t = (traverse pure ∘ map g) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
t: T A
f: A -> G B
g: A -> B
H1: forall a : A, a ∈ t -> f a = pure (g a)

traverse f t = traverse (pure ∘ g) t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
t: T A
f: A -> G B
g: A -> B
H1: forall a : A, a ∈ t -> f a = pure (g a)

forall a : A, a ∈ t -> f a = (pure ∘ g) a
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall (t : T A) (f : A -> A), (forall a : A, a ∈ t -> f a = id a) -> traverse f t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall (t : T A) (f : A -> A), (forall a : A, a ∈ t -> f a = id a) -> traverse f t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
f: A -> A
H0: forall a : A, a ∈ t -> f a = id a

traverse f t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
f: A -> A
H0: forall a : A, a ∈ t -> f a = id a

traverse f t = pure t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
f: A -> A
H0: forall a : A, a ∈ t -> f a = id a

forall a : A, a ∈ t -> f a = pure a
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) -> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (f1 f2 : A -> B) (t : T A), (forall a : A, a ∈ t -> f1 a = f2 a) -> map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

map f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

traverse f1 t = map f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

traverse f1 t = traverse f2 t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
f1, f2: A -> B
t: T A
hyp: forall a : A, a ∈ t -> f1 a = f2 a

forall a : A, a ∈ t -> f1 a = f2 a
assumption. Qed. (** ** Typeclass Instances *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

ContainerFunctor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

ContainerFunctor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Natural (@tosubset T ToSubset_inst)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
Functor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
forall (A B : Type) (t : T A) (f g : A -> B), (forall a : A, a ∈ t -> f a = g a) -> map f t = map g t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Natural (@tosubset T ToSubset_inst)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Natural ToSubset_Traverse
typeclasses eauto.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Functor T
apply DerivedInstances.Functor_TraversableFunctor.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (f g : A -> B), (forall a : A, a ∈ t -> f a = g a) -> map f t = map g t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f, g: A -> B
H0: forall a : A, a ∈ t -> f a = g a

map f t = map g t
now apply map_respectful. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

ShapelyFunctor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

ShapelyFunctor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Natural (@tolist T Tolist_Traverse)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
Functor T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
shapeliness T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Natural (@tolist T Tolist_Traverse)
typeclasses eauto.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

Functor T
typeclasses eauto.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

shapeliness T
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t1 t2 : T A), shape t1 = shape t2 /\ tolist t1 = tolist t2 -> t1 = t2
apply Traversable_shapeliness. Qed. End pointwise. (** * <<plength>> *) (**********************************************************************) Section length. Context `{Map T} `{ToBatch T} `{Traverse T} `{! TraversableFunctor T} `{! Compat_Map_Traverse T} `{! Compat_ToBatch_Traverse T}.
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A), length_Batch (toBatch t) = plength t
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A), length_Batch (toBatch t) = plength t
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

length_Batch (toBatch t) = plength t
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

length_Batch (toBatch t) = mapReduce (fun _ : A => 1) t
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

length_Batch (toBatch t) = (runBatch (fun _ : A => 1) ∘ toBatch) t
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

length_Batch (toBatch t) = runBatch (fun _ : A => 1) (toBatch t)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
c: C

length_Batch (Done c) = runBatch (fun _ : A => 1) (Done c)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
b: Batch A B (B -> C)
a: A
IHb: length_Batch b = runBatch (fun _ : A => 1) b
length_Batch (b ⧆ a) = runBatch (fun _ : A => 1) (b ⧆ a)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
c: C

length_Batch (Done c) = runBatch (fun _ : A => 1) (Done c)
reflexivity.
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
b: Batch A B (B -> C)
a: A
IHb: length_Batch b = runBatch (fun _ : A => 1) b

length_Batch (b ⧆ a) = runBatch (fun _ : A => 1) (b ⧆ a)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
b: Batch A B (B -> C)
a: A
IHb: length_Batch b = runBatch (fun _ : A => 1) b

S (length_Batch b) = runBatch (fun _ : A => 1) b ● 1
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
b: Batch A B (B -> C)
a: A
IHb: length_Batch b = runBatch (fun _ : A => 1) b

S (runBatch (fun _ : A => 1) b) = runBatch (fun _ : A => 1) b ● 1
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
C: Type
b: Batch A B (B -> C)
a: A
IHb: length_Batch b = runBatch (fun _ : A => 1) b

S (runBatch (fun _ : A => 1) b) = (runBatch (fun _ : A => 1) b + 1)%nat
lia. Qed.
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), plength t = length_Batch (toBatch t)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), plength t = length_Batch (toBatch t)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

plength t = length_Batch (toBatch t)
T: Type -> Type
H: Map T
H0: ToBatch T
H1: Traverse T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

length_Batch (toBatch t) = plength t
apply plength_eq_length. Qed. End length. (** * Factorizing Terms into <<shape>> and <<contents>> *) (**********************************************************************) Section deconstruction. Definition trav_contents {T: Type -> Type} {toBatch_T: ToBatch T} {traverse_T: Traverse T} {map_T: Map T} {cmt: Compat_Map_Traverse T} {cbt: Compat_ToBatch_Traverse T} {Trav_T: TraversableFunctor T} {A} (t: T A): Vector (plength t) A := let v: Vector (length_Batch (toBatch (ToBatch := toBatch_T) (A' := False) t)) A := Batch_contents (toBatch t) in coerce_Vector_length (plength_eq_length t) v. Definition trav_make {T: Type -> Type} {map_T: Map T} {traverse_T: Traverse T} {toBatch_T: ToBatch T} {cmt: Compat_Map_Traverse T} {cmt: Compat_ToBatch_Traverse T} {Trav_T: TraversableFunctor T} {A B: Type} (t: T A): Vector (plength t) B -> T B := (fun v => let v' := coerce_Vector_length (eq_sym (plength_eq_length t)) v in Batch_make (toBatch t) v'). Context `{Traverse T} `{Map T} `{ToBatch T} `{! TraversableFunctor T} `{! Compat_Map_Traverse T} `{! Compat_ToBatch_Traverse T}. #[local] Generalizable Variables v. (** ** Operations on Vectors *) (********************************************************************) Section traverse_vector.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type

forall v : Vector n A, trav_contents v ~~ reverse_Vector v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type

forall v : Vector n A, trav_contents v ~~ reverse_Vector v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
v: Vector n A

trav_contents v ~~ reverse_Vector v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
v: Vector n A

proj1_sig (trav_contents v) = proj1_sig (reverse_Vector v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
v: Vector n A

proj1_sig (coerce plength_eq_length v in Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
v: Vector n A

proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type

proj1_sig (Batch_contents (toBatch vnil)) = proj1_sig (reverse_Vector vnil)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)
proj1_sig (Batch_contents (toBatch (vcons m a v))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type

proj1_sig (Batch_contents (toBatch vnil)) = proj1_sig (reverse_Vector vnil)
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (toBatch (vcons m a v))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) (vcons m a v))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (pure (vcons m) <⋆> batch A False a <⋆> traverse (batch A False) v)) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Vector_append (Batch_contents (traverse (batch A False) v)) (Batch_contents (pure (vcons m) <⋆> batch A False a))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Batch_contents (pure (vcons m) <⋆> batch A False a)) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Vector_append (Batch_contents (batch A False a)) (Batch_contents (pure (vcons m)))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Batch_contents (batch A False a)) ++ proj1_sig (Batch_contents (pure (vcons m))) = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Batch_contents (batch A False a)) ++ proj1_sig vnil = proj1_sig (reverse_Vector (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Batch_contents (batch A False a)) ++ proj1_sig vnil = List.rev (proj1_sig (vcons m a v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ proj1_sig (Batch_contents (batch A False a)) ++ proj1_sig vnil = List.rev (a :: proj1_sig v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ a :: nil = List.rev (proj1_sig v) ++ a :: nil
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ a :: nil = proj1_sig (reverse_Vector v) ++ a :: nil
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A: Type
a: A
m: nat
v: Vector m A
IHv: proj1_sig (Batch_contents (toBatch v)) = proj1_sig (reverse_Vector v)

proj1_sig (Batch_contents (traverse (batch A False) v)) ++ a :: nil = proj1_sig (Batch_contents (toBatch v)) ++ a :: nil
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type

forall (v1 : Vector n A) (v2 : Vector (plength v1) B), trav_make v1 v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type

forall (v1 : Vector n A) (v2 : Vector (plength v1) B), trav_make v1 v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v1: Vector n A
v2: Vector (plength v1) B

trav_make v1 v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B

trav_make vnil v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
a: A
m: nat
v1: Vector m A
v2: Vector (plength (vcons m a v1)) B
IHv1: forall v2 : Vector (plength v1) B, trav_make v1 v2 ~~ v2
trav_make (vcons m a v1) v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B

trav_make vnil v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B

v2 = vnil
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B
Hey: v2 = vnil
trav_make vnil v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B

v2 = vnil
apply Vector_nil_eq.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B
Hey: v2 = vnil

trav_make vnil v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
v2: Vector (plength vnil) B
Hey: v2 = vnil

trav_make vnil vnil ~~ vnil
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
a: A
m: nat
v1: Vector m A
v2: Vector (plength (vcons m a v1)) B
IHv1: forall v2 : Vector (plength v1) B, trav_make v1 v2 ~~ v2

trav_make (vcons m a v1) v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
a: A
m: nat
v1: Vector m A
v2: Vector (plength (vcons m a v1)) B
IHv1: forall v2 : Vector (plength v1) B, trav_make v1 v2 ~~ v2

trav_make (vcons m a v1) v2 ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
a: A
m: nat
v1: Vector m A
v2: Vector (plength (vcons m a v1)) B
IHv1: forall v2 : Vector (plength v1) B, trav_make v1 v2 ~~ v2

Batch_make (toBatch (vcons m a v1)) (coerce eq_sym (plength_eq_length (vcons m a v1)) in v2) ~~ v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B: Type
a: A
m: nat
v1: Vector m A
v2: Vector (plength (vcons m a v1)) B
IHv1: forall v2 : Vector (plength v1) B, trav_make v1 v2 ~~ v2
e:= toBatch_to_traverse A B: toBatch = traverse (batch A B)

Batch_make (toBatch (vcons m a v1)) (coerce eq_sym (plength_eq_length (vcons m a v1)) in v2) ~~ v2
Abort. End traverse_vector. (** ** Lemmas regarding <<trav_make>> *) (********************************************************************) Section trav_make_lemmas. Context {A B: Type}.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall t : T A, trav_make t ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall t : T A, trav_make t ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

trav_make t ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

(Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) ~!~ (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

plength t = plength t /\ (forall v1 v2 : Vector (plength t) B, v1 ~~ v2 -> Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

plength t = plength t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
forall v1 v2 : Vector (plength t) B, v1 ~~ v2 -> Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

plength t = plength t
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

forall v1 v2 : Vector (plength t) B, v1 ~~ v2 -> Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

coerce eq_sym (plength_eq_length t) in v1 ~~ coerce eq_sym (plength_eq_length t) in v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

v1 ~~ coerce eq_sym (plength_eq_length t) in v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

v1 ~~ v2
assumption. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

toBatch (trav_make t v) = Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

toBatch (trav_make t v) = Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

toBatch (Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v)) = Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

Batch_make (map toBatch (toBatch t)) (coerce batch_length_map toBatch (toBatch t) in coerce eq_sym (plength_eq_length t) in v) = Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

Batch_make (map toBatch (toBatch t)) (coerce batch_length_map toBatch (toBatch t) in coerce eq_sym (plength_eq_length t) in v) = Batch_make (cojoin_Batch (toBatch t)) (coerce length_cojoin_Batch (toBatch t) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

map toBatch (toBatch t) = cojoin_Batch (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B
coerce batch_length_map toBatch (toBatch t) in coerce eq_sym (plength_eq_length t) in v ~~ coerce length_cojoin_Batch (toBatch t) in coerce eq_sym (plength_eq_length t) in v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

map toBatch (toBatch t) = cojoin_Batch (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

(map toBatch ∘ toBatch) t = (cojoin_Batch ∘ toBatch) t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

(map toBatch ∘ toBatch) t = (map toBatch ∘ toBatch) t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

(map (DerivedOperations.ToBatch_Traverse B A') ∘ DerivedOperations.ToBatch_Traverse A B) t = (map (DerivedOperations.ToBatch_Traverse B A') ∘ DerivedOperations.ToBatch_Traverse A B) t
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A': Type
t: T A
v: Vector (plength t) B

coerce batch_length_map toBatch (toBatch t) in coerce eq_sym (plength_eq_length t) in v ~~ coerce length_cojoin_Batch (toBatch t) in coerce eq_sym (plength_eq_length t) in v
vector_sim. Qed. (** ** Naturality of <<trav_contents>> and <<trav_make>> *) (******************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (A B : Type) (t : T A) (f : A -> B), trav_contents (map f t) ~~ map f (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (A B : Type) (t : T A) (f : A -> B), trav_contents (map f t) ~~ map f (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

trav_contents (map f t) ~~ map f (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (trav_contents (map f t)) = proj1_sig (map f (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (coerce plength_eq_length (map f t) in Batch_contents (toBatch (map f t))) = proj1_sig (map f (coerce plength_eq_length t in Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents (toBatch (map f t))) = proj1_sig (map f (coerce plength_eq_length t in Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents (toBatch (map f t))) = proj1_sig (map f (Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents ((toBatch ∘ map f) t)) = proj1_sig (map f (Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents ((mapfst_Batch f ∘ toBatch) t)) = proj1_sig (map f (Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents (mapfst_Batch f (toBatch t))) = proj1_sig (map f (Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0: Type
t: T A0
f: A0 -> B0

proj1_sig (Batch_contents (mapfst_Batch f (toBatch t))) = proj1_sig (Batch_contents (mapfst_Batch f (toBatch t)))
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (A B C : Type) (t : T A) (f : B -> C) (v : Vector (plength t) B), trav_make t (map f v) = map f (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (A B C : Type) (t : T A) (f : B -> C) (v : Vector (plength t) B), trav_make t (map f v) = map f (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

trav_make t (map f v) = map f (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = map f (Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (map (map f) (toBatch t)) (coerce batch_length_map (map f) (toBatch t) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)
Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (map (map f) (toBatch t)) (coerce batch_length_map (map f) (toBatch t) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0

(map (map f) ∘ toBatch) t = (mapsnd_Batch f ∘ toBatch) t
now rewrite (toBatch_mapsnd).
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (map (map f) (toBatch t)) (coerce batch_length_map (map f) (toBatch t) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (mapsnd_Batch f (toBatch t)) (coerce eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut in coerce batch_length_map (map f) (toBatch t) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (mapsnd_Batch f (toBatch t)) (coerce eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut) in coerce eq_sym (plength_eq_length t) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (mapsnd_Batch f (toBatch t)) (coerce eq_trans (eq_sym (plength_eq_length t)) (eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut)) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in map f v) = Batch_make (toBatch t) (coerce eq_sym (batch_length_mapsnd f (toBatch t)) in map f (coerce eq_trans (eq_sym (plength_eq_length t)) (eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut)) in v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

coerce eq_sym (plength_eq_length t) in map f v ~~ coerce eq_sym (batch_length_mapsnd f (toBatch t)) in map f (coerce eq_trans (eq_sym (plength_eq_length t)) (eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut)) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

coerce eq_sym (plength_eq_length t) in map f v ~~ map f (coerce eq_trans (eq_sym (plength_eq_length t)) (eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut)) in v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, A0, B0, C: Type
t: T A0
f: B0 -> C
v: Vector (plength t) B0
cut: map (map f) (toBatch t) = mapsnd_Batch f (toBatch t)

map f v ~~ map f (coerce eq_trans (eq_sym (plength_eq_length t)) (eq_trans (batch_length_map (map f) (toBatch t)) (eq_ind_r (fun z : Batch A0 B0 (T C) => length_Batch z = length_Batch (mapsnd_Batch f (toBatch t))) eq_refl cut)) in v)
apply map_coerce_Vector. Qed. End trav_make_lemmas. (** ** Relating <<tolist>> and <<trav_contents>> *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Vector_to_list A (trav_contents t) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Vector_to_list A (trav_contents t) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Vector_to_list A (trav_contents t) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (trav_contents t) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (coerce plength_eq_length t in Batch_contents (toBatch t)) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (Batch_contents (toBatch t)) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

List.rev (tolist (toBatch t)) = List.rev (tolist t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

List.rev (tolist t) = List.rev (tolist t)
reflexivity. Qed. (** ** Lens-like laws *) (********************************************************************) Section lens_laws. (** *** get-put *) (******************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

trav_make t (trav_contents t) = t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

trav_make t (trav_contents t) = t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in coerce plength_eq_length t in Batch_contents (toBatch t)) = t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_make (toBatch t) (coerce eq_trans (plength_eq_length t) (eq_sym (plength_eq_length t)) in Batch_contents (toBatch t)) = t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_make (toBatch t) (coerce eq_trans (plength_eq_length t) (eq_sym (plength_eq_length t)) in Batch_contents (toBatch t)) = extract_Batch (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_make (toBatch t) (coerce eq_trans (plength_eq_length t) (eq_sym (plength_eq_length t)) in Batch_contents (toBatch t)) = Batch_make (toBatch t) (Batch_contents (toBatch t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

coerce eq_trans (plength_eq_length t) (eq_sym (plength_eq_length t)) in Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
apply Batch_contents_toBatch_sim. Qed. (** *** put-get *) (******************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

trav_contents (trav_make t v) ~~ v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

trav_contents (trav_make t v) ~~ v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

coerce plength_eq_length (trav_make t v) in Batch_contents (toBatch (trav_make t v)) ~~ v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

Batch_contents (toBatch (trav_make t v)) ~~ v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

Batch_contents (Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v)) ~~ v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v: Vector (plength t) B

coerce length_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v) in coerce eq_sym (plength_eq_length t) in v ~~ v
vector_sim. Qed. (** *** put-put *) (******************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

trav_make (trav_make t v) v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

trav_make (trav_make t v) v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

Batch_make (toBatch (trav_make t v)) (coerce eq_sym (plength_eq_length (trav_make t v)) in v1) = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

Batch_make (toBatch (trav_make t v)) (coerce eq_sym (plength_eq_length (trav_make t v)) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

shape (toBatch (trav_make t v)) = shape (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2
coerce eq_sym (plength_eq_length (trav_make t v)) in v1 ~~ coerce eq_sym (plength_eq_length t) in v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

shape (toBatch (trav_make t v)) = shape (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

shape (toBatch t) = shape (toBatch (trav_make t v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

shape (toBatch t) = shape (Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v))
apply Batch_shape_replace_contents.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
B': Type
v1: Vector (plength (trav_make t v)) B'
v2: Vector (plength t) B'
pf: v1 ~~ v2

coerce eq_sym (plength_eq_length (trav_make t v)) in v1 ~~ coerce eq_sym (plength_eq_length t) in v2
vector_sim. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (v : Vector (plength t) B), plength t = plength (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (v : Vector (plength t) B), plength t = plength (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

plength t = plength (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

mapReduce (fun _ : A => 1) t = mapReduce (fun _ : B => 1) (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

mapReduce (const 1) t = mapReduce (const 1) (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

(runBatch (const 1) ∘ toBatch) t = (runBatch (const 1) ∘ toBatch) (trav_make t v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

runBatch (const 1) (toBatch t) = runBatch (const 1) (toBatch (trav_make t v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

runBatch (const 1) (toBatch t) = runBatch (const 1) (Batch_replace_contents (toBatch t) (coerce eq_sym (plength_eq_length t) in v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B

runBatch (const 1) (toBatch t) = runBatch (const 1) (toBatch t)
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (v : Vector (plength t) B) (C : Type), trav_make (trav_make t v) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (v : Vector (plength t) B) (C : Type), trav_make (trav_make t v) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

trav_make (trav_make t v) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

plength (trav_make t v) = plength t /\ (forall (v1 : Vector (plength (trav_make t v)) C) (v2 : Vector (plength t) C), v1 ~~ v2 -> trav_make (trav_make t v) v1 = trav_make t v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

plength (trav_make t v) = plength t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type
forall (v1 : Vector (plength (trav_make t v)) C) (v2 : Vector (plength t) C), v1 ~~ v2 -> trav_make (trav_make t v) v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

plength (trav_make t v) = plength t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

plength t = plength t
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type

forall (v1 : Vector (plength (trav_make t v)) C) (v2 : Vector (plength t) C), v1 ~~ v2 -> trav_make (trav_make t v) v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
v: Vector (plength t) B
C: Type
v1: Vector (plength (trav_make t v)) C
v2: Vector (plength t) C
H2: v1 ~~ v2

trav_make (trav_make t v) v1 = trav_make t v2
now rewrite (trav_make_make_ t v v1 v2). Qed. (** ** Lemmas regarding <<shape>> and <<trav_make>> *) (******************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 -> forall B : Type, trav_make t1 ~!~ trav_make t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 -> forall B : Type, trav_make t1 ~!~ trav_make t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

trav_make t1 ~!~ trav_make t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

(Batch_make (toBatch t1) ○ coerce_Vector_length (eq_sym (plength_eq_length t1))) ~!~ (Batch_make (toBatch t2) ○ coerce_Vector_length (eq_sym (plength_eq_length t2)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

Batch_make (toBatch t1) ~!~ (Batch_make (toBatch t2) ○ coerce_Vector_length (eq_sym (plength_eq_length t2)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

Batch_make (toBatch t1) ~!~ Batch_make (toBatch t2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

shape (toBatch t1) = shape (toBatch t2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
H2: shape t1 = shape t2
B: Type

shape t1 = shape t2
assumption. Qed. (** ** Lemmas regarding <<trav_make>> *) (****************************************************************) Section trav_make_lemmas. Context {A B: Type}.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t : T A) (v1 v2 : Vector (plength t) B), v1 ~~ v2 -> trav_make t v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t : T A) (v1 v2 : Vector (plength t) B), v1 ~~ v2 -> trav_make t v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

trav_make t v1 = trav_make t v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v1) = Batch_make (toBatch t) (coerce eq_sym (plength_eq_length t) in v2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
v1, v2: Vector (plength t) B
H2: v1 ~~ v2

coerce eq_sym (plength_eq_length t) in v1 ~~ coerce eq_sym (plength_eq_length t) in v2
vector_sim. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t1 t2 : T A) (v1 : Vector (plength t1) B) (v2 : Vector (plength t2) B), t1 = t2 -> v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t1 t2 : T A) (v1 : Vector (plength t1) B) (v2 : Vector (plength t2) B), t1 = t2 -> v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t1, t2: T A
v1: Vector (plength t1) B
v2: Vector (plength t2) B
H2: t1 = t2
H3: v1 ~~ v2

trav_make t1 v1 = trav_make t2 v2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t2: T A
v1, v2: Vector (plength t2) B
H3: v1 ~~ v2

trav_make t2 v1 = trav_make t2 v2
now apply trav_make_sim1. Qed. End trav_make_lemmas. End lens_laws. (** ** Representation theorems *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A B : Type) (t : T A) (f : A -> G B), traverse f t = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (A B : Type) (t : T A) (f : A -> G B), traverse f t = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

traverse f t = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

(runBatch f ∘ toBatch) t = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

runBatch f (toBatch t) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

map (Batch_make (toBatch t)) (forwards (traverse (mkBackwards ∘ f) (Batch_contents (toBatch t)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (trav_contents t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

map (Batch_make (toBatch t)) (forwards (traverse (mkBackwards ∘ f) (Batch_contents (toBatch t)))) = map (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

map (Batch_make (toBatch t)) (forwards (map (fun v : Vector (plength t) B => coerce eq_sym (plength_eq_length t) in v) (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))) = map (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

map (Batch_make (toBatch t)) (map (fun v : Vector (plength t) B => coerce eq_sym (plength_eq_length t) in v) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))) = map (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

(map (Batch_make (toBatch t)) ∘ map (fun v : Vector (plength t) B => coerce eq_sym (plength_eq_length t) in v)) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t)))) = map (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

map (Batch_make (toBatch t) ∘ (fun v : Vector (plength t) B => coerce eq_sym (plength_eq_length t) in v)) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t)))) = map (Batch_make (toBatch t) ○ coerce_Vector_length (eq_sym (plength_eq_length t))) (forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))) = forwards (traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t)))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t)) = traverse (mkBackwards ∘ f) (coerce plength_eq_length t in Batch_contents (toBatch t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

coerce plength_eq_length t in Batch_contents (toBatch t) = coerce plength_eq_length t in Batch_contents (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

proj1_sig (coerce plength_eq_length t in Batch_contents (toBatch t)) = proj1_sig (coerce plength_eq_length t in Batch_contents (toBatch t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

Batch_contents (toBatch t) ~~ coerce plength_eq_length t in Batch_contents (toBatch t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
A, B: Type
t: T A
f: A -> G B

Batch_contents (toBatch t) ~~ Batch_contents (toBatch t)
eapply Batch_contents_toBatch_sim. Qed. (** ** Corollary: Spec for <<traverse>> After Applying <<trav_make>> *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (X A B : Type) (t : T X) (f : A -> G B) (v : Vector (plength t) A), traverse f (trav_make t v) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (X A B : Type) (t : T X) (f : A -> G B) (v : Vector (plength t) A), traverse f (trav_make t v) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A

traverse f (trav_make t v) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A

map (trav_make (trav_make t v)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A

plength (trav_make t v) = plength t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t
map (trav_make (trav_make t v)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A

plength (trav_make t v) = plength t
now rewrite <- plength_trav_make.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (trav_make (trav_make t v)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (trav_make t ○ coerce_Vector_length Hlen) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t
trav_make (trav_make t v) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

trav_make (trav_make t v) ~!~ trav_make t
apply trav_make_make.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (trav_make t ○ coerce_Vector_length Hlen) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (trav_make t ∘ coerce_Vector_length Hlen) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

(map (trav_make t) ∘ map (coerce_Vector_length Hlen)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (trav_make t) (map (coerce_Vector_length Hlen) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v))))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (coerce_Vector_length Hlen) (forwards (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v)))) = forwards (traverse (mkBackwards ∘ f) v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

(map (coerce_Vector_length Hlen) ∘ forwards) (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v))) = forwards (traverse (mkBackwards ∘ f) v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

(forwards ∘ map (coerce_Vector_length Hlen)) (traverse (mkBackwards ∘ f) (trav_contents (trav_make t v))) = forwards (traverse (mkBackwards ∘ f) v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

forwards (map (coerce_Vector_length Hlen) (traverse (mkBackwards ○ f) (trav_contents (trav_make t v)))) = forwards (traverse (mkBackwards ○ f) v)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

map (coerce_Vector_length Hlen) (traverse (mkBackwards ○ f) (trav_contents (trav_make t v))) = traverse (mkBackwards ○ f) v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H2: Applicative G
X, A, B: Type
t: T X
f: A -> G B
v: Vector (plength t) A
Hlen: plength (trav_make t v) = plength t

trav_contents (trav_make t v) ~~ v
apply trav_contents_make. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall (M : Type) (op : Monoid_op M) (unit0 : Monoid_unit M), Monoid M -> forall (T' : Type -> Type) (Traverse_T : Traverse T'), TraversableFunctor T' -> forall H4 : ToBatch T', Compat_ToBatch_Traverse T' -> forall (t : T' A) (f : A -> M), mapReduce f t = forwards (traverse (mkBackwards ∘ f) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type

forall (M : Type) (op : Monoid_op M) (unit0 : Monoid_unit M), Monoid M -> forall (T' : Type -> Type) (Traverse_T : Traverse T'), TraversableFunctor T' -> forall H4 : ToBatch T', Compat_ToBatch_Traverse T' -> forall (t : T' A) (f : A -> M), mapReduce f t = forwards (traverse (mkBackwards ∘ f) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M

mapReduce f t = forwards (traverse (mkBackwards ∘ f) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M

traverse f t = forwards (traverse (mkBackwards ∘ f) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M

(runBatch f ∘ toBatch) t = forwards (traverse (mkBackwards ∘ f) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M

(runBatch f ∘ toBatch) t = forwards ((runBatch (mkBackwards ∘ f) ∘ toBatch) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M

runBatch f (toBatch t) = forwards (runBatch (mkBackwards ○ f) (toBatch t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
c: C

runBatch f (Done c) = forwards (runBatch (mkBackwards ○ f) (Done c))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
b: Batch A False (False -> C)
a: A
IHb: runBatch f b = forwards (runBatch (mkBackwards ○ f) b)
runBatch f (b ⧆ a) = forwards (runBatch (mkBackwards ○ f) (b ⧆ a))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
c: C

runBatch f (Done c) = forwards (runBatch (mkBackwards ○ f) (Done c))
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
b: Batch A False (False -> C)
a: A
IHb: runBatch f b = forwards (runBatch (mkBackwards ○ f) b)

runBatch f (b ⧆ a) = forwards (runBatch (mkBackwards ○ f) (b ⧆ a))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
b: Batch A False (False -> C)
a: A
IHb: runBatch f b = forwards (runBatch (mkBackwards ○ f) b)

runBatch f b <⋆> f a = forwards (runBatch (mkBackwards ○ f) (b ⧆ a))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
b: Batch A False (False -> C)
a: A
IHb: runBatch f b = forwards (runBatch (mkBackwards ○ f) b)

forwards (runBatch (mkBackwards ○ f) b) <⋆> f a = forwards (runBatch (mkBackwards ○ f) (b ⧆ a))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
T': Type -> Type
Traverse_T: Traverse T'
H3: TraversableFunctor T'
H4: ToBatch T'
Compat_ToBatch_Traverse1: Compat_ToBatch_Traverse T'
t: T' A
f: A -> M
C: Type
b: Batch A False (False -> C)
a: A
IHb: runBatch f b = forwards (runBatch (mkBackwards ○ f) b)

forwards (runBatch (mkBackwards ○ f) b) <⋆> f a = forwards (runBatch (mkBackwards ○ f) b <⋆> {| forwards := f a |})
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (M : Type) (op : Monoid_op M) (unit0 : Monoid_unit M), Monoid M -> forall (X A : Type) (t : T X) (f : A -> M) (v : Vector (plength t) A), mapReduce f (trav_make t v) = mapReduce f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (M : Type) (op : Monoid_op M) (unit0 : Monoid_unit M), Monoid M -> forall (X A : Type) (t : T X) (f : A -> M) (v : Vector (plength t) A), mapReduce f (trav_make t v) = mapReduce f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
X, A: Type
t: T X
f: A -> M
v: Vector (plength t) A

mapReduce f (trav_make t v) = mapReduce f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
X, A: Type
t: T X
f: A -> M
v: Vector (plength t) A

traverse f (trav_make t v) = traverse f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
X, A: Type
t: T X
f: A -> M
v: Vector (plength t) A

map (trav_make t) (forwards (traverse (mkBackwards ∘ f) v)) = traverse f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
X, A: Type
t: T X
f: A -> M
v: Vector (plength t) A

forwards (traverse (mkBackwards ∘ f) v) = traverse f v
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H2: Monoid M
X, A: Type
t: T X
f: A -> M
v: Vector (plength t) A

mapReduce f v = traverse f v
reflexivity. Qed. (** ** Corollary: Specs for Functor Operations in Terms of Lens Operations *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), id t = trav_make t (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), id t = trav_make t (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

id t = trav_make t (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

id t = t
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (f : A -> B), map f t = trav_make t (map f (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (f : A -> B), map f t = trav_make t (map f (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

map f t = trav_make t (map f (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

trav_make (map f t) (trav_contents (map f t)) = trav_make t (map f (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

trav_make (map f t) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B
trav_contents (map f t) ~~ map f (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

trav_make (map f t) ~!~ trav_make t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

shape (map f t) = shape t
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

shape t = shape t
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
f: A -> B

trav_contents (map f t) ~~ map f (trav_contents t)
apply trav_contents_natural. Qed. (** ** Corollary: Specification for <<shape>> *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), trav_contents (shape t) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), trav_contents (shape t) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

trav_contents (shape t) ~~ Vector_tt (plength t)
(* LHS *)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

coerce plength_eq_length (shape t) in Batch_contents (toBatch (shape t)) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (toBatch (shape t)) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (toBatch (map (const tt) t)) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
mapfst_Batch (const tt) (toBatch t) = toBatch (map (const tt) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

mapfst_Batch (const tt) (toBatch t) = toBatch (map (const tt) t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

(mapfst_Batch (const tt) ∘ toBatch) t = (toBatch ∘ map (const tt)) t
now rewrite toBatch_mapfst.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_repeat (plength t) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_repeat (mapReduce (fun _ : A => 1) t) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_repeat ((runBatch (fun _ : A => 1) ∘ toBatch) t) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

Batch_contents (mapfst_Batch (const tt) (toBatch t)) ~~ Vector_repeat (runBatch (fun _ : A => 1) (toBatch t)) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
c: C

Batch_contents (mapfst_Batch (const tt) (Done c)) ~~ Vector_repeat (runBatch (fun _ : A => 1) (Done c)) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt
Batch_contents (mapfst_Batch (const tt) (b ⧆ a)) ~~ Vector_repeat (runBatch (fun _ : A => 1) (b ⧆ a)) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
c: C

Batch_contents (mapfst_Batch (const tt) (Done c)) ~~ Vector_repeat (runBatch (fun _ : A => 1) (Done c)) tt
reflexivity.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

Batch_contents (mapfst_Batch (const tt) (b ⧆ a)) ~~ Vector_repeat (runBatch (fun _ : A => 1) (b ⧆ a)) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

vcons (length_Batch (mapfst_Batch (const tt) b)) (const tt a) (Batch_contents (mapfst_Batch (const tt) b)) ~~ Vector_repeat (runBatch (fun _ : A => 1) b ● 1) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

vcons (length_Batch (mapfst_Batch (const tt) b)) (const tt a) (Batch_contents (mapfst_Batch (const tt) b)) ~~ Vector_repeat (runBatch (fun _ : A => 1) b + 1) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

vcons (length_Batch (mapfst_Batch (const tt) b)) (const tt a) (Batch_contents (mapfst_Batch (const tt) b)) ~~ Vector_repeat (S (runBatch (fun _ : A => 1) b)) tt
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

vcons (length_Batch (mapfst_Batch (const tt) b)) (const tt a) (Batch_contents (mapfst_Batch (const tt) b)) ~~ vcons (runBatch (fun _ : A => 1) b) tt (Vector_repeat (runBatch (fun _ : A => 1) b) tt)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
C: Type
b: Batch A False (False -> C)
a: A
IHb: Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt

Batch_contents (mapfst_Batch (const tt) b) ~~ Vector_repeat (runBatch (fun _ : A => 1) b) tt
assumption. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), shape t = trav_make t (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A), shape t = trav_make t (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

shape t = trav_make t (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

map (const tt) t = trav_make t (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

trav_make t (map (const tt) (trav_contents t)) = trav_make t (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

map (const tt) (trav_contents t) = Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

map (const tt) (trav_contents t) ~~ Vector_tt (plength t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (map (const tt) (trav_contents t)) = proj1_sig (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (trav_contents (map (const tt) t)) = proj1_sig (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (trav_contents (shape t)) = proj1_sig (Vector_tt (plength t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A

proj1_sig (Vector_tt (plength t)) = proj1_sig (Vector_tt (plength t))
reflexivity. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

(forall B : Type, trav_make t1 ~!~ trav_make t2) -> shape t1 = shape t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

(forall B : Type, trav_make t1 ~!~ trav_make t2) -> shape t1 = shape t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2

shape t1 = shape t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2

trav_make t1 (Vector_tt (plength t1)) = shape t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2

trav_make t1 (Vector_tt (plength t1)) = trav_make t2 (Vector_tt (plength t2))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2
Hlen: plength t1 = plength t2
Hmake': forall (v1 : Vector (plength t1) unit) (v2 : Vector (plength t2) unit), v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2

trav_make t1 (Vector_tt (plength t1)) = trav_make t2 (Vector_tt (plength t2))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2
Hlen: plength t1 = plength t2
Hmake': forall (v1 : Vector (plength t1) unit) (v2 : Vector (plength t2) unit), v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2

trav_make t1 ~!~ trav_make t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2
Hlen: plength t1 = plength t2
Hmake': forall (v1 : Vector (plength t1) unit) (v2 : Vector (plength t2) unit), v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2
Vector_tt (plength t1) ~~ Vector_tt (plength t2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2
Hlen: plength t1 = plength t2
Hmake': forall (v1 : Vector (plength t1) unit) (v2 : Vector (plength t2) unit), v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2

trav_make t1 ~!~ trav_make t2
apply Hmake.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
Hmake: forall B : Type, trav_make t1 ~!~ trav_make t2
Hlen: plength t1 = plength t2
Hmake': forall (v1 : Vector (plength t1) unit) (v2 : Vector (plength t2) unit), v1 ~~ v2 -> trav_make t1 v1 = trav_make t2 v2

Vector_tt (plength t1) ~~ Vector_tt (plength t2)
now inversion Hlen. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 <-> (forall B : Type, trav_make t1 ~!~ trav_make t2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 <-> (forall B : Type, trav_make t1 ~!~ trav_make t2)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 -> forall B : Type, trav_make t1 ~!~ trav_make t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2
(forall B : Type, trav_make t1 ~!~ trav_make t2) -> shape t1 = shape t2
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

shape t1 = shape t2 -> forall B : Type, trav_make t1 ~!~ trav_make t2
apply trav_same_shape.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2: Type
t1: T A1
t2: T A2

(forall B : Type, trav_make t1 ~!~ trav_make t2) -> shape t1 = shape t2
apply trav_same_shape_rev. Qed.
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (f : A -> B) (C : Type), trav_make t ~!~ trav_make (map f t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A : Type) (t : T A) (B : Type) (f : A -> B) (C : Type), trav_make t ~!~ trav_make (map f t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
f: A -> B
C: Type

trav_make t ~!~ trav_make (map f t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
f: A -> B
C: Type

shape t = shape (map f t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A: Type
t: T A
B: Type
f: A -> B
C: Type

shape t = shape t
reflexivity. Qed. (** ** <<trav_make>> is Preserved by <<shape>> *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall t : T A, trav_make t ~!~ trav_make (shape t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall t : T A, trav_make t ~!~ trav_make (shape t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

trav_make t ~!~ trav_make (shape t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

shape t = shape (shape t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A

shape t = shape t
reflexivity. Qed. (** ** <<tosubset>> is Preserved by <<trav_contents>> *) (********************************************************************)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A : Type) (t : T A), tosubset t = tosubset (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T

forall (A : Type) (t : T A), tosubset t = tosubset (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset t = tosubset (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

(tosubset ∘ tolist) t = tosubset (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset (tolist t) = tosubset (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset (tolist t) = (tosubset ∘ tolist) (trav_contents t)
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset (tolist t) = tosubset (tolist (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset (tolist t) = tosubset (Vector_to_list A (trav_contents t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

tosubset (tolist t) = tosubset (List.rev (tolist t))
T: Type -> Type
H: Traverse T
H0: Map T
H1: ToBatch T
TraversableFunctor0: TraversableFunctor T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
H2: ToSubset T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
A: Type
t: T A

mapReduce ret (tolist t) = mapReduce ret (List.rev (tolist t))
apply mapReduce_comm_list. Qed. End deconstruction. (** * Lemmas about <<shape>> *) (**********************************************************************) Section misc. Context `{Classes.Kleisli.TraversableFunctor.TraversableFunctor T} `{ToMap_inst: Map T} `{ToSubset_inst: ToSubset T} `{ToBatch_inst: ToBatch T} `{! Compat_Map_Traverse T} `{! Compat_ToSubset_Traverse T} `{! Compat_ToBatch_Traverse T}. (* (** ** Same <<shape>> Implies Same <<trav_make>> *) (********************************************************************) Lemma same_shape_implies_make_sim: forall (A B C: Type) (t: T A) (u: T B), shape t = shape u -> trav_make (B := C) t ~!~ trav_make u. Proof. intros. apply trav_same_shape. assumption. introv Hshape. eapply (transitive_Vector_fun_sim). apply (trav_make_shape_spec t). rewrite Hshape. apply symmetric_Vector_fun_sim. apply (trav_make_shape_spec u). Qed. *) (** ** Specification for <<id>> given two terms with the same <<shape>> *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u : T B) (Hshape : shape t = shape u), t = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u : T B) (Hshape : shape t = shape u), t = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

t = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

id t = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (trav_contents t) = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u
cut:= trav_same_shape Hshape A: trav_make t ~!~ trav_make u

trav_make t (trav_contents t) = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u
Hlen: plength t = plength u
H_make_eq: forall (v1 : Vector (plength t) A) (v2 : Vector (plength u) A), v1 ~~ v2 -> trav_make t v1 = trav_make u v2

trav_make t (trav_contents t) = trav_make u (coerce same_shape_implies_plength t u Hshape in trav_contents t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u
Hlen: plength t = plength u
H_make_eq: forall (v1 : Vector (plength t) A) (v2 : Vector (plength u) A), v1 ~~ v2 -> trav_make t v1 = trav_make u v2

trav_contents t ~~ coerce same_shape_implies_plength t u Hshape in trav_contents t
vector_sim. Qed. End misc. (** * Zipping Terms *) (**********************************************************************) From Tealeaves Require Import Functors.Pair. Section traversable_functors_zipping. Context `{Classes.Kleisli.TraversableFunctor.TraversableFunctor T} `{ToMap_inst: Map T} `{ToSubset_inst: ToSubset T} `{ToBatch_inst: ToBatch T} `{! Compat_Map_Traverse T} `{! Compat_ToSubset_Traverse T} `{! Compat_ToBatch_Traverse T}. (** ** Operation to Zip Contents of Same-<<shape>> Terms *) (********************************************************************) Definition same_shape_zip_contents (A B: Type) (t: T A) (u: T B) (Hshape: shape t = shape u): Vector (plength t) (A * B) := Vector_zip A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape). #[global] Arguments same_shape_zip_contents {A B}%type_scope t u Hshape. (** ** Proof Irrelevance *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u : T B) (Hshape1 Hshape2 : shape t = shape u), same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u : T B) (Hshape1 Hshape2 : shape t = shape u), same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape1, Hshape2: shape t = shape u

same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape1, Hshape2: shape t = shape u

Vector_zip A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape1) = Vector_zip A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape1, Hshape2: shape t = shape u

same_shape_implies_plength t u Hshape1 = same_shape_implies_plength t u Hshape2
apply proof_irrelevance. Qed. (* useful when <<u>> can't be rewritten due to Hshape proofs *)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t = shape u'), u = u' -> same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t = shape u'), u = u' -> same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u, u': T B
Hshape1: shape t = shape u
Hshape2: shape t = shape u'
Heq: u = u'

same_shape_zip_contents t u Hshape1 = same_shape_zip_contents t u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u': T B
Hshape1, Hshape2: shape t = shape u'

same_shape_zip_contents t u' Hshape1 = same_shape_zip_contents t u' Hshape2
apply same_shape_zip_contents_proof_irrelevance. Qed. (* useful when <<u>> can't be rewritten due to Hshape proofs *)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t t' : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t' = shape u'), t = t' -> u = u' -> same_shape_zip_contents t u Hshape1 ~~ same_shape_zip_contents t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t t' : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t' = shape u'), t = t' -> u = u' -> same_shape_zip_contents t u Hshape1 ~~ same_shape_zip_contents t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t, t': T A
u, u': T B
Hshape1: shape t = shape u
Hshape2: shape t' = shape u'
Heqt: t = t'
Hequ: u = u'

same_shape_zip_contents t u Hshape1 ~~ same_shape_zip_contents t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t': T A
u': T B
Hshape1, Hshape2: shape t' = shape u'

same_shape_zip_contents t' u' Hshape1 ~~ same_shape_zip_contents t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t': T A
u': T B
Hshape1, Hshape2: shape t' = shape u'

same_shape_zip_contents t' u' ?Hshape2 ~~ same_shape_zip_contents t' u' Hshape2
reflexivity. Qed. (** ** Roundtrip Properties *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (same_shape_zip_contents t u Hshape) = trav_contents t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (same_shape_zip_contents t u Hshape) = trav_contents t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (Vector_zip A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape)) = trav_contents t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_contents t = trav_contents t
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (same_shape_zip_contents t u Hshape) ~~ trav_contents u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (same_shape_zip_contents t u Hshape) ~~ trav_contents u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (Vector_zip A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape)) ~~ trav_contents u
apply (Vector_zip_snd A B (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape)). Qed. (** ** Naturality Properties *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1), shape t = shape u -> forall (f : A1 -> A2) (g : B1 -> B2), shape (map f t) = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1), shape t = shape u -> forall (f : A1 -> A2) (g : B1 -> B2), shape (map f t) = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

shape (map f t) = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

shape t = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

shape t = shape u
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B), shape t = shape u -> forall f : A1 -> A2, shape (map f t) = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B), shape t = shape u -> forall f : A1 -> A2, shape (map f t) = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

shape (map f t) = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

shape t = shape u
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1), shape t = shape u -> forall g : B1 -> B2, shape t = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1), shape t = shape u -> forall g : B1 -> B2, shape t = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

shape t = shape (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

shape t = shape u
assumption. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (f : A1 -> A2) (g : B1 -> B2), shape (map f t) = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (f : A1 -> A2) (g : B1 -> B2), shape (map f t) = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2

shape (map f t) = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2

shape t = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2

shape t = shape u -> shape t = shape u
easy. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (f : A1 -> A2), shape (map f t) = shape u -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (f : A1 -> A2), shape (map f t) = shape u -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2

shape (map f t) = shape u -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2

shape t = shape u -> shape t = shape u
easy. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (g : B1 -> B2), shape t = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (g : B1 -> B2), shape t = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2

shape t = shape (map g u) -> shape t = shape u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2

shape t = shape u -> shape t = shape u
easy. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (Hshape : shape t = shape u) (f : A1 -> A2) (g : B1 -> B2), map (map_pair f g) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (Hshape : shape t = shape u) (f : A1 -> A2) (g : B1 -> B2), map (map_pair f g) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (same_shape_zip_contents t u Hshape) ~~ coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (same_shape_zip_contents t u Hshape) ~~ same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (Vector_zip A1 B1 (plength t) (plength u) (trav_contents t) (trav_contents u) (same_shape_implies_plength t u Hshape)) ~~ Vector_zip A2 B2 (plength (map f t)) (plength (map g u)) (trav_contents (map f t)) (trav_contents (map g u)) (same_shape_implies_plength (map f t) (map g u) (same_shape_map t u Hshape f g))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (Vector_zip_eq (trav_contents t) (coerce eq_sym (same_shape_implies_plength t u Hshape) in trav_contents u)) ~~ Vector_zip_eq (trav_contents (map f t)) (coerce eq_sym (same_shape_implies_plength (map f t) (map g u) (same_shape_map t u Hshape f g)) in trav_contents (map g u))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

Vector_zip_eq (map f (trav_contents t)) (map g (coerce eq_sym (same_shape_implies_plength t u Hshape) in trav_contents u)) ~~ Vector_zip_eq (trav_contents (map f t)) (coerce eq_sym (same_shape_implies_plength (map f t) (map g u) (same_shape_map t u Hshape f g)) in trav_contents (map g u))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map f (trav_contents t) ~~ trav_contents (map f t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2
map g (coerce eq_sym (same_shape_implies_plength t u Hshape) in trav_contents u) ~~ coerce eq_sym (same_shape_implies_plength (map f t) (map g u) (same_shape_map t u Hshape f g)) in trav_contents (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map f (trav_contents t) ~~ trav_contents (map f t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_contents (map f t) ~~ map f (trav_contents t)
apply trav_contents_natural.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map g (coerce eq_sym (same_shape_implies_plength t u Hshape) in trav_contents u) ~~ coerce eq_sym (same_shape_implies_plength (map f t) (map g u) (same_shape_map t u Hshape f g)) in trav_contents (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map g (trav_contents u) ~~ trav_contents (map g u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_contents (map g u) ~~ map g (trav_contents u)
apply trav_contents_natural. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (f : A1 -> A2) (g : B1 -> B2) (Hshape : shape (map f t) = shape (map g u)), same_shape_zip_contents (map f t) (map g u) Hshape = coerce eq_sym (natural_plength f t) in map (map_pair f g) (same_shape_zip_contents t u (same_shape_map_rev t u f g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (f : A1 -> A2) (g : B1 -> B2) (Hshape : shape (map f t) = shape (map g u)), same_shape_zip_contents (map f t) (map g u) Hshape = coerce eq_sym (natural_plength f t) in map (map_pair f g) (same_shape_zip_contents t u (same_shape_map_rev t u f g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape = coerce eq_sym (natural_plength f t) in map (map_pair f g) (same_shape_zip_contents t u (same_shape_map_rev t u f g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape = coerce eq_sym (natural_plength f t) in coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u (same_shape_map_rev t u f g Hshape) f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape ~~ coerce eq_sym (natural_plength f t) in coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u (same_shape_map_rev t u f g Hshape) f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape ~~ same_shape_zip_contents (map f t) (map g u) (same_shape_map t u (same_shape_map_rev t u f g Hshape) f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape ~~ same_shape_zip_contents (map f t) (map g u) (same_shape_map t u (same_shape_map_rev t u f g Hshape) f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

same_shape_zip_contents (map f t) (map g u) Hshape = same_shape_zip_contents (map f t) (map g u) (same_shape_map t u (same_shape_map_rev t u f g Hshape) f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
f: A1 -> A2
g: B1 -> B2
Hshape: shape (map f t) = shape (map g u)

Hshape = same_shape_map t u (same_shape_map_rev t u f g Hshape) f g
apply proof_irrelevance. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (Hshape : shape t = shape u) (f : A1 -> A2), map (map_fst f) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (Hshape : shape t = shape u) (f : A1 -> A2), map (map_fst f) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map (map_fst f) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map (map_pair f id) (same_shape_zip_contents t u Hshape) = coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

coerce natural_plength f t in same_shape_zip_contents (map f t) (map id u) (same_shape_map t u Hshape f id) = coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

coerce natural_plength f t in same_shape_zip_contents (map f t) (map id u) (same_shape_map t u Hshape f id) ~~ coerce natural_plength f t in same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

same_shape_zip_contents (map f t) (map id u) (same_shape_map t u Hshape f id) ~~ same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

same_shape_zip_contents (map f t) (map id u) (same_shape_map t u Hshape f id) = same_shape_zip_contents (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map id u = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

id u = u
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (f : A1 -> A2) (Hshape : shape (map f t) = shape u), same_shape_zip_contents (map f t) u Hshape = coerce eq_sym (natural_plength f t) in map (map_fst f) (same_shape_zip_contents t u (same_shape_map_rev_l t u f Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (f : A1 -> A2) (Hshape : shape (map f t) = shape u), same_shape_zip_contents (map f t) u Hshape = coerce eq_sym (natural_plength f t) in map (map_fst f) (same_shape_zip_contents t u (same_shape_map_rev_l t u f Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape = coerce eq_sym (natural_plength f t) in map (map_fst f) (same_shape_zip_contents t u (same_shape_map_rev_l t u f Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape = coerce eq_sym (natural_plength f t) in map (map_pair f id) (same_shape_zip_contents t u (same_shape_map_rev_l t u f Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape = coerce eq_sym (natural_plength f t) in coerce natural_plength f t in same_shape_zip_contents (map f t) (map id u) (same_shape_map t u (same_shape_map_rev_l t u f Hshape) f id)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape ~~ coerce eq_sym (natural_plength f t) in coerce natural_plength f t in same_shape_zip_contents (map f t) (map id u) (same_shape_map t u (same_shape_map_rev_l t u f Hshape) f id)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape ~~ same_shape_zip_contents (map f t) (map id u) (same_shape_map t u (same_shape_map_rev_l t u f Hshape) f id)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

same_shape_zip_contents (map f t) u Hshape = same_shape_zip_contents (map f t) (map id u) (same_shape_map t u (same_shape_map_rev_l t u f Hshape) f id)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

u = map id u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
f: A1 -> A2
Hshape: shape (map f t) = shape u

u = id u
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (Hshape : shape t = shape u) (g : B1 -> B2), map (map_snd g) (same_shape_zip_contents t u Hshape) = same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (Hshape : shape t = shape u) (g : B1 -> B2), map (map_snd g) (same_shape_zip_contents t u Hshape) = same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map (map_snd g) (same_shape_zip_contents t u Hshape) = same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map (map_pair id g) (same_shape_zip_contents t u Hshape) = same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

coerce natural_plength id t in same_shape_zip_contents (map id t) (map g u) (same_shape_map t u Hshape id g) = same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

coerce natural_plength id t in same_shape_zip_contents (map id t) (map g u) (same_shape_map t u Hshape id g) ~~ same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

same_shape_zip_contents (map id t) (map g u) (same_shape_map t u Hshape id g) ~~ same_shape_zip_contents t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map id t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2
map g u = map g u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

id t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2
map g u = map g u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map g u = map g u
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (g : B1 -> B2) (Hshape : shape t = shape (map g u)), same_shape_zip_contents t (map g u) Hshape = map (map_snd g) (same_shape_zip_contents t u (same_shape_map_rev_r t u g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (g : B1 -> B2) (Hshape : shape t = shape (map g u)), same_shape_zip_contents t (map g u) Hshape = map (map_snd g) (same_shape_zip_contents t u (same_shape_map_rev_r t u g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

same_shape_zip_contents t (map g u) Hshape = map (map_snd g) (same_shape_zip_contents t u (same_shape_map_rev_r t u g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

same_shape_zip_contents t (map g u) Hshape = map (map_pair id g) (same_shape_zip_contents t u (same_shape_map_rev_r t u g Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

same_shape_zip_contents t (map g u) Hshape = coerce natural_plength id t in same_shape_zip_contents (map id t) (map g u) (same_shape_map t u (same_shape_map_rev_r t u g Hshape) id g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

same_shape_zip_contents t (map g u) Hshape ~~ coerce natural_plength id t in same_shape_zip_contents (map id t) (map g u) (same_shape_map t u (same_shape_map_rev_r t u g Hshape) id g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

same_shape_zip_contents t (map g u) Hshape ~~ same_shape_zip_contents (map id t) (map g u) (same_shape_map t u (same_shape_map_rev_r t u g Hshape) id g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

t = map id t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)
map g u = map g u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

t = id t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)
map g u = map g u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
g: B1 -> B2
Hshape: shape t = shape (map g u)

map g u = map g u
reflexivity. Qed. (** ** Operation to Zip Same-<<shape>> Terms *) (********************************************************************) Definition same_shape_zip (A B: Type) (t: T A) (u: T B) (Hshape: shape t = shape u): T (A * B) := trav_make t (same_shape_zip_contents t u Hshape). #[global] Arguments same_shape_zip {A B}%type_scope t u Hshape.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (same_shape_zip t u Hshape) = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (same_shape_zip t u Hshape) = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map fst (trav_make t (same_shape_zip_contents t u Hshape)) = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (map fst (same_shape_zip_contents t u Hshape)) = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (trav_contents t) = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

t = t
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (same_shape_zip t u Hshape) = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (same_shape_zip t u Hshape) = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (trav_make t (same_shape_zip_contents t u Hshape)) = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (map snd (same_shape_zip_contents t u Hshape)) = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (map snd (same_shape_zip_contents t u Hshape)) = id u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t (map snd (same_shape_zip_contents t u Hshape)) = trav_make u (trav_contents u)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t ~!~ trav_make u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u
map snd (same_shape_zip_contents t u Hshape) ~~ trav_contents u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

trav_make t ~!~ trav_make u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

shape t = shape u
assumption.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

map snd (same_shape_zip_contents t u Hshape) ~~ trav_contents u
apply same_shape_zip_contents_snd. Qed. (** ** Proof Irrelevance *) (********************************************************************) (* useful when <<u>> can't be rewritten due to Hshape proofs *)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t t' : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t' = shape u'), t = t' -> u = u' -> same_shape_zip t u Hshape1 = same_shape_zip t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (A B : Type) (t t' : T A) (u u' : T B) (Hshape1 : shape t = shape u) (Hshape2 : shape t' = shape u'), t = t' -> u = u' -> same_shape_zip t u Hshape1 = same_shape_zip t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t, t': T A
u, u': T B
Hshape1: shape t = shape u
Hshape2: shape t' = shape u'
Heqt: t = t'
Hequ: u = u'

same_shape_zip t u Hshape1 = same_shape_zip t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t': T A
u': T B
Hshape1, Hshape2: shape t' = shape u'

same_shape_zip t' u' Hshape1 = same_shape_zip t' u' Hshape2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t': T A
u': T B
Hshape1, Hshape2: shape t' = shape u'

Hshape1 = Hshape2
apply proof_irrelevance. Qed. (** ** Naturality Properties *) (********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (Hshape : shape t = shape u) (f : A1 -> A2) (g : B1 -> B2), map (map_pair f g) (same_shape_zip t u Hshape) = same_shape_zip (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type

forall (t : T A1) (u : T B1) (Hshape : shape t = shape u) (f : A1 -> A2) (g : B1 -> B2), map (map_pair f g) (same_shape_zip t u Hshape) = same_shape_zip (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (same_shape_zip t u Hshape) = same_shape_zip (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

map (map_pair f g) (trav_make t (same_shape_zip_contents t u Hshape)) = trav_make (map f t) (same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_make t (map (map_pair f g) (same_shape_zip_contents t u Hshape)) = trav_make (map f t) (same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_make t (coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)) = trav_make (map f t) (same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_make t ~!~ trav_make (map f t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2
coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g) ~~ same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

trav_make t ~!~ trav_make (map f t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

shape t = shape (map f t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

shape t = shape t
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B1, B2: Type
t: T A1
u: T B1
Hshape: shape t = shape u
f: A1 -> A2
g: B1 -> B2

coerce natural_plength f t in same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g) ~~ same_shape_zip_contents (map f t) (map g u) (same_shape_map t u Hshape f g)
vector_sim. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (Hshape : shape t = shape u) (f : A1 -> A2), map (map_fst f) (same_shape_zip t u Hshape) = same_shape_zip (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type

forall (t : T A1) (u : T B) (Hshape : shape t = shape u) (f : A1 -> A2), map (map_fst f) (same_shape_zip t u Hshape) = same_shape_zip (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map (map_fst f) (same_shape_zip t u Hshape) = same_shape_zip (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map (map_pair f id) (same_shape_zip t u Hshape) = same_shape_zip (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

same_shape_zip (map f t) (map id u) (same_shape_map t u Hshape f id) = same_shape_zip (map f t) u (same_shape_map_l t u Hshape f)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map f t = map f t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2
map id u = u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map f t = map f t
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A1, A2, B: Type
t: T A1
u: T B
Hshape: shape t = shape u
f: A1 -> A2

map id u = u
now rewrite fun_map_id. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (Hshape : shape t = shape u) (g : B1 -> B2), map (map_snd g) (same_shape_zip t u Hshape) = same_shape_zip t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type

forall (t : T A) (u : T B1) (Hshape : shape t = shape u) (g : B1 -> B2), map (map_snd g) (same_shape_zip t u Hshape) = same_shape_zip t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map (map_snd g) (same_shape_zip t u Hshape) = same_shape_zip t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map (map_pair id g) (same_shape_zip t u Hshape) = same_shape_zip t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

same_shape_zip (map id t) (map g u) (same_shape_map t u Hshape id g) = same_shape_zip t (map g u) (same_shape_map_r t u Hshape g)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map id t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2
map g u = map g u
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map id t = t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

id t = t
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B1, B2: Type
t: T A
u: T B1
Hshape: shape t = shape u
g: B1 -> B2

map g u = map g u
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t : T A) (u : T B) (Hshape : shape t = shape u), shape (same_shape_zip t u Hshape) = shape t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type

forall (t : T A) (u : T B) (Hshape : shape t = shape u), shape (same_shape_zip t u Hshape) = shape t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

shape (same_shape_zip t u Hshape) = shape t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

shape (map fst (same_shape_zip t u Hshape)) = shape (map id t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

shape (map fst (same_shape_zip t u Hshape)) = shape (id t)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B: Type
t: T A
u: T B
Hshape: shape t = shape u

shape t = shape (id t)
reflexivity. Qed. (** ** Traversals over the zip *) (**********************************************************************)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (n m : nat) (A B C : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (mk1 : Vector n B -> C) (v1 : Vector n A) (mk2 : Vector m B -> C) (v2 : Vector m A) (f : A -> G B), mk1 ~!~ mk2 -> v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (n m : nat) (A B C : Type) (G : Type -> Type) (Map_G : Map G) (Pure_G : Pure G) (Mult_G : Mult G), Applicative G -> forall (mk1 : Vector n B -> C) (v1 : Vector n A) (mk2 : Vector m B -> C) (v2 : Vector m A) (f : A -> G B), mk1 ~!~ mk2 -> v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n, m: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector n B -> C
v1: Vector n A
mk2: Vector m B -> C
v2: Vector m A
f: A -> G B
H1: mk1 ~!~ mk2
H2: v1 ~~ v2

map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n, m: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector n B -> C
v1: Vector n A
mk2: Vector m B -> C
v2: Vector m A
f: A -> G B
H1: mk1 ~!~ mk2
H2: v1 ~~ v2
Heq: n = m

map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n, m: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector n B -> C
v1: Vector n A
mk2: Vector m B -> C
f: A -> G B
H1: mk1 ~!~ mk2
Heq: n = m

forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector n B -> C
v1: Vector n A
f: A -> G B

forall (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: v1 ~~ v2
map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

map mk1 (traverse f vnil) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

map mk1 (traverse f vnil) = map mk2 (traverse f vnil)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

map mk1 (pure vnil) = map mk2 (pure vnil)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2

mk1 = mk2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2
v: Vector 0 B

mk1 v = mk2 v
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2
v: Vector 0 B

mk1 ~!~ mk2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2
v: Vector 0 B
v ~~ v
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector 0 B -> C
v1: Vector 0 A
f: A -> G B
mk2: Vector 0 B -> C
H1: mk1 ~!~ mk2
v2: Vector 0 A
H2: v1 ~~ v2
v: Vector 0 B

v ~~ v
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: v1 ~~ v2

map mk1 (traverse f v1) = map mk2 (traverse f v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: v1 ~~ vcons n (Vector_hd v2) (Vector_tl v2)

map mk1 (traverse f v1) = map mk2 (traverse f (vcons n (Vector_hd v2) (Vector_tl v2)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)

map mk1 (traverse f (vcons n (Vector_hd v1) (Vector_tl v1))) = map mk2 (traverse f (vcons n (Vector_hd v2) (Vector_tl v2)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)

map mk1 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1)) = map mk2 (traverse f (vcons n (Vector_hd v2) (Vector_tl v2)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)

map mk1 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1)) = map mk2 (pure (vcons n) <⋆> f (Vector_hd v2) <⋆> traverse f (Vector_tl v2))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: proj1_sig (vcons n (Vector_hd v1) (Vector_tl v1)) = proj1_sig (vcons n (Vector_hd v2) (Vector_tl v2))

map mk1 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1)) = map mk2 (pure (vcons n) <⋆> f (Vector_hd v2) <⋆> traverse f (Vector_tl v2))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)

map mk1 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1)) = map mk2 (pure (vcons n) <⋆> f (Vector_hd v2) <⋆> traverse f (Vector_tl v2))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

map mk1 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1)) = map mk2 (pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v2))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

mk1 = mk2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)
pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1) = pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

mk1 = mk2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)
v: Vector (S n) B

mk1 v = mk2 v
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)
v: Vector (S n) B

mk1 ~!~ mk2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)
v: Vector (S n) B
v ~~ v
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)
v: Vector (S n) B

v ~~ v
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v1) = pure (vcons n) <⋆> f (Vector_hd v1) <⋆> traverse f (Vector_tl v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

traverse f (Vector_tl v1) = traverse f (Vector_tl v2)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

Vector_tl v1 = Vector_tl v2
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
n: nat
A, B, C: Type
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
mk1: Vector (S n) B -> C
v1: Vector (S n) A
f: A -> G B
IHn: forall (mk1 : Vector n B -> C) (v1 : Vector n A) (m : nat) (mk2 : Vector m B -> C), mk1 ~!~ mk2 -> n = m -> forall v2 : Vector m A, v1 ~~ v2 -> map mk1 (traverse f v1) = map mk2 (traverse f v2)
mk2: Vector (S n) B -> C
H1: mk1 ~!~ mk2
v2: Vector (S n) A
H2: vcons n (Vector_hd v1) (Vector_tl v1) ~~ vcons n (Vector_hd v2) (Vector_tl v2)
H4: Vector_hd v1 :: proj1_sig (Vector_tl v1) = Vector_hd v2 :: proj1_sig (Vector_tl v2)
H5: Vector_hd v1 = Vector_hd v2
H6: proj1_sig (Vector_tl v1) = proj1_sig (Vector_tl v2)

Vector_tl v1 ~~ Vector_tl v2
apply H6. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u

traverse f (same_shape_zip t u Hshape) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u

traverse f (same_shape_zip t u Hshape) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u

trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
traverse f (same_shape_zip t u Hshape) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u

trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u

shape (same_shape_zip t u Hshape) = shape t
apply same_shape_zip_same_shape.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

traverse f (same_shape_zip t u Hshape) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

map (trav_make (same_shape_zip t u Hshape)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape
map (trav_make (same_shape_zip t u Hshape)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

trav_contents (trav_make t (same_shape_zip_contents t u Hshape)) ~~ same_shape_zip_contents t u Hshape
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

proj1_sig (trav_contents (trav_make t (same_shape_zip_contents t u Hshape))) = proj1_sig (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t

proj1_sig (same_shape_zip_contents t u Hshape) = proj1_sig (same_shape_zip_contents t u Hshape)
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

map (trav_make (same_shape_zip t u Hshape)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

map (trav_make (same_shape_zip t u Hshape)) (forwards (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape)))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

(map (trav_make (same_shape_zip t u Hshape)) ∘ forwards) (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape))) = map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

(map (trav_make (same_shape_zip t u Hshape)) ∘ forwards) (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape))) = (map (trav_make t) ∘ forwards) (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

(forwards ∘ map (trav_make (same_shape_zip t u Hshape))) (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape))) = (map (trav_make t) ∘ forwards) (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

(forwards ∘ map (trav_make (same_shape_zip t u Hshape))) (traverse (mkBackwards ∘ f) (trav_contents (same_shape_zip t u Hshape))) = (forwards ∘ map (trav_make t)) (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

forwards (map (trav_make (same_shape_zip t u Hshape)) (traverse (mkBackwards ○ f) (trav_contents (same_shape_zip t u Hshape)))) = forwards (map (trav_make t) (traverse (mkBackwards ○ f) (same_shape_zip_contents t u Hshape)))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

map (trav_make (same_shape_zip t u Hshape)) (traverse (mkBackwards ○ f) (trav_contents (same_shape_zip t u Hshape))) = map (trav_make t) (traverse (mkBackwards ○ f) (same_shape_zip_contents t u Hshape))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
G: Type -> Type
Map_G: Map G
Pure_G: Pure G
Mult_G: Mult G
H0: Applicative G
A, B, C: Type
t: T A
u: T B
f: A * B -> G C
Hshape: shape t = shape u
H1: trav_make (same_shape_zip t u Hshape) ~!~ trav_make t
H2: trav_contents (same_shape_zip t u Hshape) ~~ same_shape_zip_contents t u Hshape

Applicative (Backwards G)
typeclasses eauto. } Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

ApplicativeMorphism (const M) (Backwards (const M)) (@mkBackwards (const M))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

ApplicativeMorphism (const M) (Backwards (const M)) (@mkBackwards (const M))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (f : A -> B) (x : const M A), {| forwards := map f x |} = map f {| forwards := x |}
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M
forall (A : Type) (a : A), {| forwards := pure a |} = pure a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M
forall (A B : Type) (x : const M A) (y : const M B), {| forwards := x ⊗ y |} = {| forwards := x |} ⊗ {| forwards := y |}
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (f : A -> B) (x : const M A), {| forwards := map f x |} = map f {| forwards := x |}
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A : Type) (a : A), {| forwards := pure a |} = pure a
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (x : const M A) (y : const M B), {| forwards := x ⊗ y |} = {| forwards := x |} ⊗ {| forwards := y |}
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

ApplicativeMorphism (Backwards (const M)) (const M) (@forwards (const M))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

ApplicativeMorphism (Backwards (const M)) (const M) (@forwards (const M))
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (f : A -> B) (x : Backwards (const M) A), forwards (map f x) = map f (forwards x)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M
forall (A : Type) (a : A), forwards (pure a) = pure a
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M
forall (A B : Type) (x : Backwards (const M) A) (y : Backwards (const M) B), forwards (x ⊗ y) = forwards x ⊗ forwards y
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (f : A -> B) (x : Backwards (const M) A), forwards (map f x) = map f (forwards x)
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A : Type) (a : A), forwards (pure a) = pure a
reflexivity.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit: Monoid_unit M
Monoid0: Monoid M

forall (A B : Type) (x : Backwards (const M) A) (y : Backwards (const M) B), forwards (x ⊗ y) = forwards x ⊗ forwards y
reflexivity. Qed.
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

mapReduce f (same_shape_zip t u Hshape) = mapReduce f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

mapReduce f (same_shape_zip t u Hshape) = mapReduce f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

mapReduce f (same_shape_zip t u Hshape) = mapReduce f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

traverse f (same_shape_zip t u Hshape) = mapReduce f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape))) = mapReduce f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

map (trav_make t) (forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape))) = traverse f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

forwards (traverse (mkBackwards ∘ f) (same_shape_zip_contents t u Hshape)) = traverse f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

(forwards ∘ traverse (mkBackwards ∘ f)) (same_shape_zip_contents t u Hshape) = traverse f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

(forwards ∘ traverse (mkBackwards ∘ f)) (same_shape_zip_contents t u Hshape) = traverse f (same_shape_zip_contents t u Hshape)
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToSubset_inst: ToSubset T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToSubset_Traverse0: Compat_ToSubset_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
M: Type
op: Monoid_op M
unit0: Monoid_unit M
H0: Monoid M
A, B, C: Type
t: T A
u: T B
f: A * B -> M
Hshape: shape t = shape u

traverse (forwards ∘ (mkBackwards ∘ f)) (same_shape_zip_contents t u Hshape) = traverse f (same_shape_zip_contents t u Hshape)
reflexivity. Qed. (* Lemma traverse_const_opposite `{Monoid M} {A B: Type} (f: A -> M): traverse (T := T) (G := const M) (@Mult_const M (@Monoid_op_Opposite M op)) Search traverse same_shape_zip_contents. rewrite t . unfold mapReduce. rewrite traverse_same_shape_zip. rewrite <- traverse_repr. rewrite traverse_same_shape_zip. reflexivity. Qed. *) End traversable_functors_zipping. (** ** Folding over a Vector of pairs *) (**********************************************************************) Section fold_over_vector_pairs. Context {A B A0 B0: Type} `{Monoid M} `(f: A * B -> M).
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fl : A0 -> A) (fr : B0 -> B) (n : nat) (v : Vector n (A0 * B0)), mapReduce f (map (map_tensor fl fr) v) = mapReduce (f ∘ map_tensor fl fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fl : A0 -> A) (fr : B0 -> B) (n : nat) (v : Vector n (A0 * B0)), mapReduce f (map (map_tensor fl fr) v) = mapReduce (f ∘ map_tensor fl fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
fr: B0 -> B
n: nat
v: Vector n (A0 * B0)

mapReduce f (map (map_tensor fl fr) v) = mapReduce (f ∘ map_tensor fl fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
fr: B0 -> B
n: nat
v: Vector n (A0 * B0)

(mapReduce f ∘ map (map_tensor fl fr)) v = mapReduce (f ∘ map_tensor fl fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
fr: B0 -> B
n: nat
v: Vector n (A0 * B0)

mapReduce (f ∘ map_tensor fl fr) v = mapReduce (f ∘ map_tensor fl fr) v
reflexivity. Qed.
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fl : A0 -> A) (n : nat) (v : Vector n (A0 * B)), mapReduce f (map (map_fst fl) v) = mapReduce (f ∘ map_fst fl) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fl : A0 -> A) (n : nat) (v : Vector n (A0 * B)), mapReduce f (map (map_fst fl) v) = mapReduce (f ∘ map_fst fl) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
n: nat
v: Vector n (A0 * B)

mapReduce f (map (map_fst fl) v) = mapReduce (f ∘ map_fst fl) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
n: nat
v: Vector n (A0 * B)

(mapReduce f ∘ map (map_fst fl)) v = mapReduce (f ∘ map_fst fl) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fl: A0 -> A
n: nat
v: Vector n (A0 * B)

mapReduce (f ∘ map_fst fl) v = mapReduce (f ∘ map_fst fl) v
reflexivity. Qed.
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fr : B0 -> B) (n : nat) (v : Vector n (A * B0)), mapReduce f (map (map_snd fr) v) = mapReduce (f ∘ map_snd fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M

forall (fr : B0 -> B) (n : nat) (v : Vector n (A * B0)), mapReduce f (map (map_snd fr) v) = mapReduce (f ∘ map_snd fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fr: B0 -> B
n: nat
v: Vector n (A * B0)

mapReduce f (map (map_snd fr) v) = mapReduce (f ∘ map_snd fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fr: B0 -> B
n: nat
v: Vector n (A * B0)

(mapReduce f ∘ map (map_snd fr)) v = mapReduce (f ∘ map_snd fr) v
A, B, A0, B0, M: Type
op: Monoid_op M
unit0: Monoid_unit M
H: Monoid M
f: A * B -> M
fr: B0 -> B
n: nat
v: Vector n (A * B0)

mapReduce (f ∘ map_snd fr) v = mapReduce (f ∘ map_snd fr) v
reflexivity. Qed. End fold_over_vector_pairs. (** * Uniqueness *) (**********************************************************************) Section uniqueness_lemmas. Context {A B: Type}. Context `{Classes.Kleisli.TraversableFunctor.TraversableFunctor T} `{ToMap_inst: Map T} `{ToBatch_inst: ToBatch T} `{! Compat_Map_Traverse T} `{! Compat_ToBatch_Traverse T}.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

v ~~ trav_contents (trav_make t v)
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

proj1_sig v = proj1_sig (trav_contents (trav_make t v))
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

proj1_sig v = proj1_sig v
reflexivity. Qed.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> forall C : Type, trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> forall C : Type, trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

forall C : Type, trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u
C: Type

trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u
C: Type

trav_make t ~!~ trav_make (trav_make t v)
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u
C: Type

trav_make (trav_make t v) ~!~ trav_make t
apply trav_make_make. Qed.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

forall C : Type, trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u
v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

v ~~ trav_contents u
auto using trav_contents_unique. Qed.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u <-> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u <-> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B

trav_make t v = u <-> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B

trav_make t v = u -> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
(forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u -> trav_make t v = u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B

trav_make t v = u -> (forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u
apply trav_decomposition_unique.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B

(forall C : Type, trav_make t ~!~ trav_make u) /\ v ~~ trav_contents u -> trav_make t v = u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: forall C : Type, trav_make t ~!~ trav_make u
Hcontents: v ~~ trav_contents u

trav_make t v = u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: forall C : Type, trav_make t ~!~ trav_make u
Hcontents: v ~~ trav_contents u

trav_make t v = trav_make u (trav_contents u)
apply Vector_fun_sim_eq; auto. Qed.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> shape t = shape u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> shape t = shape u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

shape t = shape u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

forall B0 : Type, trav_make t ~!~ trav_make u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

trav_make t ?v = u
eassumption. Qed.
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> plength t = plength u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T

forall (t : T A) (u : T B) (v : Vector (plength t) B), trav_make t v = u -> plength t = plength u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

plength t = plength u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

shape t = shape u
A, B: Type
T: Type -> Type
Traverse_T: Traverse T
H: TraversableFunctor T
ToMap_inst: Map T
ToBatch_inst: ToBatch T
Compat_Map_Traverse0: Compat_Map_Traverse T
Compat_ToBatch_Traverse0: Compat_ToBatch_Traverse T
t: T A
u: T B
v: Vector (plength t) B
Hmake: trav_make t v = u

trav_make t ?v = u
eassumption. Qed. End uniqueness_lemmas.