Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import
Classes.Kleisli.DecoratedTraversableFunctor
Classes.Coalgebraic.DecoratedTraversableFunctor.Import Product.Notations.Import Kleisli.DecoratedTraversableFunctor.Notations.Import Batch.Notations.Import Monoid.Notations.#[local] Generalizable VariablesE G T M A B.#[local] Arguments batch {A} (B)%type_scope _.(** * Coalgebraic DTFs from Kleisli DTFs *)(**********************************************************************)(** ** Derived Operations *)(**********************************************************************)ModuleDerivedOperations.#[export] InstanceToBatch3_Mapdt `{Mapdt E T}
: Coalgebraic.DecoratedTraversableFunctor.ToBatch3 E T :=
(funAB => mapdt (G := Batch (E * A) B) (batch B):
T A -> Batch (E * A) B (T B)).EndDerivedOperations.ClassCompat_ToBatch3_Mapdt
(E: Type)
(T: Type -> Type)
`{Mapdt_inst: Mapdt E T}
`{ToBatch3_inst: ToBatch3 E T} :=
compat_toBatch3_mapdt:
ToBatch3_inst = DerivedOperations.ToBatch3_Mapdt.
E: Type T: Type -> Type Mapdt_inst: Mapdt E T ToBatch3_inst: ToBatch3 E T H: Compat_ToBatch3_Mapdt E T
forallAB : Type, toBatch3 = mapdt (batch B)
E: Type T: Type -> Type Mapdt_inst: Mapdt E T ToBatch3_inst: ToBatch3 E T H: Compat_ToBatch3_Mapdt E T
forallAB : Type, toBatch3 = mapdt (batch B)
E: Type T: Type -> Type Mapdt_inst: Mapdt E T ToBatch3_inst: ToBatch3 E T H: Compat_ToBatch3_Mapdt E T A, B: Type
toBatch3 = mapdt (batch B)
E: Type T: Type -> Type Mapdt_inst: Mapdt E T ToBatch3_inst: ToBatch3 E T H: Compat_ToBatch3_Mapdt E T A, B: Type
DerivedOperations.ToBatch3_Mapdt A B = mapdt (batch B)
reflexivity.Qed.#[export] InstanceCompat_ToBatch3_Mapdt_Self
`{Mapdt E T}:
Compat_ToBatch3_Mapdt E T
(ToBatch3_inst := DerivedOperations.ToBatch3_Mapdt)
:= ltac:(hnf; reflexivity).ModuleDerivedInstances.Import DerivedOperations.Sectionto_coalgebraic.Context
`{Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T}
`{ToBatch3 E T}
`{! Compat_ToBatch3_Mapdt E T}.(** ** <<double_batch3>> as <<batch ⋆3 batch>> *)(******************************************************************)
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T
forallABC : Type,
double_batch3 C = batch C ⋆3 batch B
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T
forallABC : Type,
double_batch3 C = batch C ⋆3 batch B
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
double_batch3 C = batch C ⋆3 batch B
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
(fun '(e, a) =>
(map (batch C ∘ pair e) ∘ batch B) (e, a)) =
batch C ⋆3 batch B
now ext [e a].Qed.(** ** Derived Laws *)(******************************************************************)
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch ∘ mapfst_Batch extract ∘ toBatch3 = id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch ∘ (mapfst_Batch extract ∘ toBatch3) = id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch
∘ (mapfst_Batch extract ∘ mapdt (batch A)) = id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch ∘ mapdt (mapfst_Batch extract ∘ batch A) =
id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
mapdt
(extract_Batch ∘ (mapfst_Batch extract ∘ batch A)) =
id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
mapdt (extract_Batch ∘ mapfst_Batch extract ∘ batch A) =
id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type cut: extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
mapdt (extract_Batch ∘ mapfst_Batch extract ∘ batch A) =
id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type
extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type e: E a: A
(extract_Batch ∘ mapfst_Batch extract ∘ batch A)
(e, a) = extract (e, a)
reflexivity.
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type cut: extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
mapdt (extract_Batch ∘ mapfst_Batch extract ∘ batch A) =
id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type cut: extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
mapdt extract = id
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A: Type cut: extract_Batch ∘ mapfst_Batch extract ∘ batch A =
extract
id = id
reflexivity.Qed.
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
cojoin_Batch3 ∘ mapdt (batch C) =
map toBatch3 ∘ toBatch3
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
mapdt (cojoin_Batch3 ∘ batch C) =
map toBatch3 ∘ toBatch3
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
mapdt (cojoin_Batch3 ∘ batch C) =
map (mapdt (batch C)) ∘ mapdt (batch B)
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
mapdt (cojoin_Batch3 ∘ batch C) =
mapdt (batch C ⋆3 batch B)
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
mapdt (cojoin_Batch3 ∘ batch C) =
mapdt (double_batch3 C)
E: Type T: Type -> Type H: Mapdt E T H0: Kleisli.DecoratedTraversableFunctor.DecoratedTraversableFunctor
E T H1: ToBatch3 E T Compat_ToBatch3_Mapdt0: Compat_ToBatch3_Mapdt E T A, B, C: Type
mapdt (cojoin_Batch3 ∘ batch C) =
mapdt (cojoin_Batch3 ∘ batch C)
reflexivity.Qed.#[export] InstanceCoalgebraic_DecoratedTraversableFunctor_of_Kleisli:
Coalgebraic.DecoratedTraversableFunctor.DecoratedTraversableFunctor E T :=
{| dtf_extract := toBatch3_extract_Kleisli;
dtf_duplicate := toBatch3_duplicate_Kleisli;
|}.Endto_coalgebraic.EndDerivedInstances.