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 VariablesF 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>> *)(**********************************************************************)Sectionstuff.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 (AB : 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 (AB : 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
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
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
forallt : 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
forallt : 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
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
nowrewrite 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
forallt : 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
forallt : 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
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
foralltu : T A,
(forallA' : 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
foralltu : T A,
(forallA' : 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
(forallA' : 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
(forallA' : 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 -> forallA' : 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
(forallA' : 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: forallA' : 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: forallA' : 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: forallA' : 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: forallA' : 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: forallA' : 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 -> forallA' : Type, toBatch t = toBatch u
intro; nowsubst.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
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
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
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
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
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'BA : 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'BA : 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
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
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)
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 (AB : Type) (t1t2 : 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 (AB : Type) (t1t2 : 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'BA : 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'BA : 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'
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 (AB : Type) (t1t2 : 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 (AB : Type) (t1t2 : 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 (AB : Type) (t1t2 : 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 (AB : Type) (t1t2 : 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
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
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 (AB : Type) (t1t2 : 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 (AB : Type) (t1t2 : 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.Endstuff.(** * 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) (BC : 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) (BC : Type),
length_Batch (toBatch t) = length_Batch (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 ToSubset0: ToSubset T Functor0: Functor T Compat_ToSubset_Traverse0: 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
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
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
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 (AB : Type) (f1f2 : A -> B) (t : T A),
map f1 (tolist t) = map f2 (tolist t) <->
(foralla : 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 (AB : Type) (f1f2 : A -> B) (t : T A),
map f1 (tolist t) = map f2 (tolist t) <->
(foralla : 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) <->
(foralla : 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) <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
map f1 (a :: l) = map f2 (a :: l) <->
(foralla0 : 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 <->
(foralla : 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 <-> (foralla : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
map f1 (a :: l) = map f2 (a :: l) <->
(foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
f1 a :: map f1 l = f2 a :: map f2 l <->
(foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
f1 a :: map f1 l = f2 a :: map f2 l ->
foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
(foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
f1 a :: map f1 l = f2 a :: map f2 l ->
foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) Hyp: f1 a :: map f1 l = f2 a :: map f2 l
foralla0 : 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 <->
(foralla : 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
foralla0 : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a)
(foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : A,
a = a0 \/ List.In a0 l -> f1 a0 = f2 a0
a = a \/ List.In a l
nowleft.
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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : 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 <->
(foralla : A, a ∈ l -> f1 a = f2 a) X: foralla0 : A,
a = a0 \/ List.In a0 l -> f1 a0 = f2 a0 cut: f1 a = f2 a
foralla : 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 (AB : Type) (f1f2 : 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 (AB : Type) (f1f2 : 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 (AB : Type) (f1f2 : A -> B) (t : T A),
(foralla : 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 (AB : Type) (f1f2 : A -> B) (t : T A),
(foralla : 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
(foralla : 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
(foralla : 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
(foralla : A, a ∈ t -> f1 a = f2 a) <->
(foralla : A, a ∈ t -> 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
forall (G : Type -> Type) (Map_G : Map G)
(Pure_G : Pure G) (Mult_G : Mult G),
Applicative G ->
forall (AB : Type) (f1f2 : A -> G B) (t : T A),
(foralla : 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 (AB : Type) (f1f2 : A -> G B) (t : T A),
(foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (Return_subset A) b a -> f1 a = f2 a) ->
runBatch f1 b = runBatch f2 b
foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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
nowleft.
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : 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: foralla0 : A,
runBatch (Return_subset A) (b ⧆ a) a0 ->
f1 a0 = f2 a0 IHb: (foralla : A,
runBatch (Return_subset A) b a -> f1 a = f2 a) ->
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
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),
(foralla : 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),
(foralla : 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: foralla : 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: foralla : A, a ∈ t -> f1 a = pure a
traverse f1 t = traverse pure t
nowapply 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),
(foralla : 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),
(foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : A, a ∈ t -> f a = pure (g a)
foralla : 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),
(foralla : 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),
(foralla : 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: foralla : 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: foralla : 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: foralla : A, a ∈ t -> f a = id a
foralla : 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 (AB : Type) (f1f2 : A -> B) (t : T A),
(foralla : 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 (AB : Type) (f1f2 : A -> B) (t : T A),
(foralla : 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: foralla : 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: foralla : 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: foralla : 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: foralla : A, a ∈ t -> 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
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 (AB : Type) (t : T A) (fg : A -> B),
(foralla : 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
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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 (AB : Type) (t : T A) (fg : A -> B),
(foralla : 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: foralla : A, a ∈ t -> f a = g a
map f t = map g t
nowapply 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
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 (AB : 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 (AB : 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
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.Endlength.(** * Factorizing Terms into <<shape>> and <<contents>> *)(**********************************************************************)Sectiondeconstruction.Definitiontrav_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 :=
letv: Vector
(length_Batch (toBatch (ToBatch := toBatch_T) (A' := False) t)) A
:= Batch_contents (toBatch t)
in coerce_Vector_length (plength_eq_length t) v.Definitiontrav_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}
{AB: Type} (t: T A):
Vector (plength t) B -> T B :=
(funv =>
letv' := 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 Variablesv.(** ** Operations on Vectors *)(********************************************************************)Sectiontraverse_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
forallv : 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
forallv : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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: forallv2 : 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: forallv2 : 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: forallv2 : 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: forallv2 : 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: forallv2 : 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
T: Type -> Type H: Traverse 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
forallt : 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
forallt : 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
T: Type -> Type H: Traverse 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 /\
(forallv1v2 : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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 (AB : 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 (AB : 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
T: Type -> Type H: Traverse 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 (ABC : 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 (ABC : 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
nowrewrite (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
(funz : Batch A0 B0 (T C) =>
length_Batch z =
length_Batch (mapsnd_Batch f (toBatch t)))
eq_refl cutin 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
(funz : 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
(funz : 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
(funz : 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
(funz : 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
(funz : 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
(funz : 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.Endtrav_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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
nowrewrite (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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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) (v1v2 : 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) (v1v2 : 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
T: Type -> Type H: Traverse 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: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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 (AB : 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 (AB : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
(funv : 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
(funv : 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
(funv : 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)
∘ (funv : 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
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 (XAB : 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 (XAB : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
nowrewrite <- 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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' ->
forallH4 : 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' ->
forallH4 : 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
T: Type -> Type H: Traverse 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 (XA : 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 (XA : 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 (AB : 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 (AB : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
nowrewrite 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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: forallB : 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: forallB : 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: forallB : 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 Hmake: forallB : 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: forallB : 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: forallB : 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: forallB : 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)
nowinversion 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
forallt : 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
forallt : 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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
T: Type -> Type H: Traverse 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.Enddeconstruction.(** * Lemmas about <<shape>> *)(**********************************************************************)Sectionmisc.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 (AB : 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 (AB : 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.Endmisc.(** * Zipping Terms *)(**********************************************************************)From Tealeaves Require Import Functors.Pair.Sectiontraversable_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 *)(********************************************************************)Definitionsame_shape_zip_contents
(AB: 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 (AB : Type) (t : T A) (u : T B)
(Hshape1Hshape2 : 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 (AB : Type) (t : T A) (u : T B)
(Hshape1Hshape2 : 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 (AB : Type) (t : T A) (uu' : 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 (AB : Type) (t : T A) (uu' : 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 (AB : Type) (tt' : T A) (uu' : 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 (AB : Type) (tt' : T A) (uu' : 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'
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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'
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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 ->
forallf : 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 ->
forallf : 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 ->
forallg : 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 ->
forallg : 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 *)(********************************************************************)Definitionsame_shape_zip
(AB: 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 (AB : Type) (tt' : T A) (uu' : 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 (AB : Type) (tt' : T A) (uu' : 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'
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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'
T: Type -> Type Traverse_T: Traverse T H: TraversableFunctor T ToMap_inst: Map T ToSubset_inst: ToSubset T ToBatch_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
nowrewrite 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 (nm : nat) (ABC : 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 (nm : nat) (ABC : 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
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 ->
forallv2 : 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 (AB : 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 (AB : 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 (AB : 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 (AB : 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 (AB : 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 (AB : 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 (AB : 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 (AB : 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. *)Endtraversable_functors_zipping.(** ** Folding over a Vector of pairs *)(**********************************************************************)Sectionfold_over_vector_pairs.Context {ABA0B0: 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
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 ->
forallC : 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 ->
forallC : 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
forallC : 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 ->
(forallC : 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 ->
(forallC : 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
forallC : 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 <->
(forallC : 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 <->
(forallC : 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 <->
(forallC : 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 ->
(forallC : 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
(forallC : 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 ->
(forallC : 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
(forallC : 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: forallC : 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: forallC : 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
forallB0 : 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