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.Multisorted.DecoratedTraversableMonad
Classes.Multisorted.Theory.Container
Classes.Multisorted.Theory.Targeted
Adapters.KleisliToCoalgebraic.Multisorted.DTM.Import ContainerFunctor.Import Functors.List.Import Subset.Notations.Import TypeFamily.Notations.Import Monoid.Notations.Import Theory.Container.Notations.Import List.ListNotations.#[local] Open Scope list_scope.#[local] Generalizable VariablesA B C F G W T U K.(** * Respectfulness Conditions for <<mbindd>> and Derived Operations *)(**********************************************************************)(** ** Identities for <<tolist>> and <<mapReduce>> *)(**********************************************************************)SectiontoBatchM.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd_gen U fake t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd_gen U fake t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
mmapdt U (const (list (W * (K * A)))) tolistmd_gen_loc
t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
runBatchM
(funk : K => map (mret T k) ∘ tolistmd_gen_loc k)
(toBatchM U fake t) =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd U t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd U t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd_gen U False t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistmd_gen U fake t =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t) =
runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)
reflexivity.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tosetmd U t =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tosetmd U t =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tosubset (tolistmd U t) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tosubset
(runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
const tosubset (U fake)
(runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
const tosubset (U fake)
(runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
runBatchM
(funk : K =>
const tosubset (T k fake)
∘ (fun '(w, a) => [(w, (k, a))]))
(toBatchM U fake t) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
runBatchM
(fun (k : K) (a : W * A) =>
const tosubset (T k fake)
(let '(w, a0) := a in [(w, (k, a0))]))
(toBatchM U fake t) =
runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
(fun (k : K) (a : W * A) =>
const tosubset (T k fake)
(let '(w, a0) := a in [(w, (k, a0))])) =
(fun (k : K) '(w, a) => {{(w, (k, a))}})
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A k: K w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A k: K w: W a: A
tosubset [(w, (k, a))] = {{(w, (k, a))}}
apply tosubset_list_one.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistm U t =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
tolistm U t =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
(map extract ∘ tolistmd U) t =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
map extract (tolistmd U t) =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
map extract
(runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)) =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
const (map extract) (U fake)
(runBatchM (fun (k : K) '(w, a) => [(w, (k, a))])
(toBatchM U fake t)) =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
runBatchM
(funk : K =>
const (map extract) (T k fake)
∘ (fun '(w, a) => [(w, (k, a))]))
(toBatchM U fake t) =
runBatchM (fun (k : K) '(_, a) => [(k, a)])
(toBatchM U fake t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T fake, A: Type t: U A
(funk : K =>
const (map extract) (T k fake)
∘ (fun '(w, a) => [(w, (k, a))])) =
(fun (k : K) '(_, a) => [(k, a)])
now ext k [w a].Qed.EndtoBatchM.(** ** Respectfulness for <<mbindd>> *)(**********************************************************************)Sectionmbindd_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : W * A ~k~> T B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)) ->
mbindd U f t = mbindd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : W * A ~k~> T B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)) ->
mbindd U f t = mbindd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)
mbindd U f t = mbindd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
runBatchM
(fun (k0 : K) '(w0, a0) => {{(w0, (k0, a0))}})
(toBatchM U B t) (
w, (k, a)) ->
f k (w, a) = g k (w, a)
mbindd U f t = mbindd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
runBatchM
(fun (k0 : K) '(w0, a0) => {{(w0, (k0, a0))}})
(toBatchM U B t) (
w, (k, a)) ->
f k (w, a) = g k (w, a)
runBatchM f (toBatchM U B t) = mbindd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
runBatchM
(fun (k0 : K) '(w0, a0) => {{(w0, (k0, a0))}})
(toBatchM U B t) (
w, (k, a)) ->
f k (w, a) = g k (w, a)
runBatchM f (toBatchM U B t) =
runBatchM g (toBatchM U B t)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type c: C hyp: forall (w : W) (k : K) (a : A),
runBatchM
(fun (k0 : K) '(w0, a0) => {{(w0, (k0, a0))}})
(Go c) (w, (k, a)) ->
f k (w, a) = g k (w, a)
runBatchM f (Go c) = runBatchM g (Go c)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) p: W * A hyp: forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
(Ap b p) (
w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
runBatchM f (Ap b p) = runBatchM g (Ap b p)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type c: C hyp: forall (w : W) (k : K) (a : A),
runBatchM
(fun (k0 : K) '(w0, a0) => {{(w0, (k0, a0))}})
(Go c) (w, (k, a)) ->
f k (w, a) = g k (w, a)
runBatchM f (Go c) = runBatchM g (Go c)
easy.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) p: W * A hyp: forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
(Ap b p) (
w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
runBatchM f (Ap b p) = runBatchM g (Ap b p)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}})
(Ap b (w, a)) (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
runBatchM f (Ap b (w, a)) = runBatchM g (Ap b (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}})
(Ap b (w, a)) (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
ap (funA : Type => A) (runBatchM f b) (f k (w, a)) =
runBatchM g (Ap b (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}})
(Ap b (w, a)) (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
ap (funA : Type => A) (runBatchM f b) (f k (w, a)) =
ap (funA : Type => A) (runBatchM g b) (g k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
ap (funA : Type => A) (runBatchM f b) (f k (w, a)) =
ap (funA : Type => A) (runBatchM g b) (g k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
runBatchM f b = runBatchM g b
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
f k (w, a) = g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
runBatchM f b = runBatchM g b
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
forall (w : W) (k0 : K) (a : A),
runBatchM (fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) -> f k0 (w, a) = g k0 (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b w0: W k0: K a0: A H1: runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b
(w0, (k0, a0))
f k0 (w0, a0) = g k0 (w0, a0)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b w0: W k0: K a0: A H1: runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b
(w0, (k0, a0))
ap (const (W * (K * A) -> Prop))
(runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
b) {{(w, (k, a))}} (w0, (k0, a0))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b w0: W k0: K a0: A H1: runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b
(w0, (k0, a0))
(runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}}) b
● {{(w, (k, a))}}) (w0, (k0, a0))
nowleft.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
f k (w, a) = g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: W * A ~k~> T B C: Type k: K b: BatchM (T k B -> C) w: W a: A hyp: forall (w0 : W) (k0 : K) (a0 : A),
ap (const (W * (K * A) -> Prop))
(runBatchM
(fun (k : K) '(w, a) => {{(w, (k, a))}}) b)
{{(w, (k, a))}} (
w0, (k0, a0)) ->
f k0 (w0, a0) = g k0 (w0, a0) IHb: (forall (w : W) (k0 : K) (a : A),
runBatchM
(fun (k : K) '(w0, a0) => {{(w0, (k, a0))}})
b (w, (k0, a)) ->
f k0 (w, a) = g k0 (w, a)) ->
runBatchM f b = runBatchM g b
ap (const (W * (K * A) -> Prop))
(runBatchM (fun (k : K) '(w, a) => {{(w, (k, a))}})
b) {{(w, (k, a))}} (w, (k, a))
nowright.Qed.(** *** For equalities with special cases *)(** Corollaries with conclusions of the form <<mbindd t = f t>> for other <<m*>> operations *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : A ~k~> T B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a) ->
mbindd U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : A ~k~> T B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a) ->
mbindd U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
mbindd U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
mbindd U f t = mbindd U (g ◻ allK extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = (g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = (g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = g k (allK extract k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: A ~k~> T B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = g k a
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : K -> W * A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a))) ->
mbindd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : K -> W * A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a))) ->
mbindd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a))
mbindd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a))
mbindd U f t = mbindd U (mret T ◻ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a))
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = (mret T ◻ g) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = (mret T ◻ g) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = mret T k (g k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = mret T k (g k (w, a))
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : K -> A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k (g k a)) ->
mbindd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : W * A ~k~> T B)
(g : K -> A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k (g k a)) ->
mbindd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a)
mbindd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a)
mbindd U f t =
mbindd U ((mret T ◻ g) ◻ allK extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a)
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = ((mret T ◻ g) ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = ((mret T ◻ g) ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = mret T k (g k (allK extract k (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: W * A ~k~> T B g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = mret T k (g k a) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = mret T k (g k a)
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : W * A ~k~> T A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a) ->
mbindd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : W * A ~k~> T A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a) ->
mbindd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: W * A ~k~> T A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
mbindd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: W * A ~k~> T A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
mbindd U f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: W * A ~k~> T A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
mbindd U f t = mbindd U (mret T ◻ allK extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: W * A ~k~> T A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = (mret T ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: W * A ~k~> T A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = mret T k a
auto.Qed.Endmbindd_respectful.(** ** Respectfulness for <<mbindd>> *)(**********************************************************************)Sectionmbind_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : A ~k~> T B),
(forall (k : K) (a : A), (k, a) ∈m t -> f k a = g k a) ->
mbind U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : A ~k~> T B),
(forall (k : K) (a : A), (k, a) ∈m t -> f k a = g k a) ->
mbind U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a
mbind U f t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a
mbindd U (f ◻ allK extract) t = mbind U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
(f ◻ allK extract) k (w, a) =
(g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a w: W k: K a: A premise: (w, (k, a)) ∈md t
(f ◻ allK extract) k (w, a) =
(g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a w: W k: K a: A premise: (k, a) ∈m t
(f ◻ allK extract) k (w, a) =
(g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: A ~k~> T B hyp: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = g k a w: W k: K a: A premise: (k, a) ∈m t
f k a = g k a
auto.Qed.(** *** For equalities with other operations *)(** Corollaries with conclusions of the form <<mbind t = f t>> for other <<m*>> operations *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : A ~k~> T B)
(g : K -> W * A -> B),
(forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t -> f k a = mret T k (g k (w, a))) ->
mbind U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : A ~k~> T B)
(g : K -> W * A -> B),
(forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t -> f k a = mret T k (g k (w, a))) ->
mbind U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a))
mbind U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a))
mbind U f t = mbindd U (mret T ◻ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a))
mbindd U (mret T ◻ g) t = mbind U f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a))
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> (mret T ◻ g) k (w, a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
(mret T ◻ g) k (w, a) = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k a = (mret T ◻ g) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> W * A -> B H1: forall (k : K) (w : W) (a : A),
(w, (k, a)) ∈md t ->
f k a = mret T k (g k (w, a)) w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k a = mret T k (g k (w, a))
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : A ~k~> T B)
(g : K -> A -> B),
(forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)) ->
mbind U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (f : A ~k~> T B)
(g : K -> A -> B),
(forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)) ->
mbind U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)
mbind U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)
mbind U f t = mbind U (mret T ◻ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)
mbind U (mret T ◻ g) t = mbind U f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a)
forall (k : K) (a : A),
(k, a) ∈m t -> (mret T ◻ g) k a = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a) k: K a: A Hin: (k, a) ∈m t
(mret T ◻ g) k a = f k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a) k: K a: A Hin: (k, a) ∈m t
f k a = (mret T ◻ g) k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f: A ~k~> T B g: K -> A -> B H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k (g k a) k: K a: A Hin: (k, a) ∈m t
f k a = mret T k (g k a)
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : A ~k~> T A),
(forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a) -> mbind U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : A ~k~> T A),
(forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a) -> mbind U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: A ~k~> T A H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
mbind U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: A ~k~> T A H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
mbind U f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: A ~k~> T A H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
mbind U f t = mbind U (funk : K => mret T k) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: A ~k~> T A H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: A ~k~> T A H1: forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
forall (k : K) (a : A),
(k, a) ∈m t -> f k a = mret T k a
auto.Qed.Endmbind_respectful.(** ** Respectfulness for <<mmapd>> *)(**********************************************************************)Sectionmmapd_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : K -> W * A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)) ->
mmapd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : K -> W * A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)) ->
mmapd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)
mmapd U f t = mmapd U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)
mbindd U (mret T ◻ f) t = mbindd U (mret T ◻ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a)
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
(mret T ◻ f) k (w, a) = (mret T ◻ g) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t
(mret T ◻ f) k (w, a) = (mret T ◻ g) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t
mret T k (f k (w, a)) = mret T k (g k (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> W * A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t
f k (w, a) = g k (w, a)
auto.Qed.(** *** For equalities with other operations *)(** Corollaries with conclusions of the form <<mmapd t = f t>> for other <<m*>> operations *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> W * A -> A)
(g : K -> A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a) ->
mmapd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> W * A -> A)
(g : K -> A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a) ->
mmapd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A g: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
mmapd U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A g: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
mmapd U f t = mmapd U (g ◻ allK extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A g: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = (g ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A g: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = g k a w: W k: K a: A Hin: (w, (k, a)) ∈md t
f k (w, a) = (g ◻ allK extract) k (w, a)
unfold vec_compose, compose; cbn; auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> W * A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a) ->
mmapd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> W * A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a) ->
mmapd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
mmapd U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
mmapd U f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
mmapd U f t = mmapd U (allK extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
f k (w, a) = allK extract k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> W * A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k (w, a) = a
auto.Qed.Endmmapd_respectful.(** ** Respectfulness for <<mmap>> *)(**********************************************************************)Sectionmmap_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : K -> A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = g k a) ->
mmap U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (AB : Type) (t : U A) (fg : K -> A -> B),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = g k a) ->
mmap U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = g k a
mmap U f t = mmap U g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A, B: Type t: U A f, g: K -> A -> B hyp: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = g k a
mmapd U (f ◻ allK extract) t =
mmapd U (g ◻ allK extract) t
nowapply mmapd_respectful.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a) -> mmap U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T
forall (A : Type) (t : U A) (f : K -> A -> A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a) -> mmap U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a
mmap U f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a
mmap U f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a
mmap U f t = mmap U (allK id) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f: K -> A -> A H1: forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> f k a = allK id k a
auto.Qed.Endmmap_respectful.(** * Respectfulness for Targeted Operations *)(**********************************************************************)(** ** Respectfulness for <<kbindd>> *)(**********************************************************************)Sectionkbindd_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} (j: K).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : W * A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)) ->
kbindd U j f t = kbindd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : W * A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)) ->
kbindd U j f t = kbindd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
kbindd U j f t = kbindd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
mbindd U (btgd j f) t = mbindd U (btgd j g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
btgd j f k (w, a) = btgd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t
btgd j f k (w, a) = btgd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: W * A -> T k A hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
btgd k f k (w, a) = btgd k g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btgd j f k (w, a) = btgd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: W * A -> T k A hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
btgd k f k (w, a) = btgd k g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: W * A -> T k A hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
f (w, a) = g (w, a)
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btgd j f k (w, a) = btgd j g k (w, a)
do2 (rewrite btgd_neq; auto).Qed.(** *** For equalities with special cases *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a) ->
kbindd U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a) ->
kbindd U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
kbindd U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
kbindd U j f t = kbindd U j (g ∘ extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = (g ∘ extract) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a w: W a: A Hin: (w, (j, a)) ∈md t
f (w, a) = (g ∘ extract) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a w: W a: A Hin: (w, (j, a)) ∈md t
(w, (j, a)) ∈md t
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g (w, a))) ->
kbindd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g (w, a))) ->
kbindd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j (g (w, a))
kbindd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j (g (w, a))
kbindd U j f t = kbindd U j (mret T j ∘ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j (g (w, a))
forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = (mret T j ∘ g) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j (g (w, a)) w: W a: A Hin: (w, (j, a)) ∈md t
f (w, a) = (mret T j ∘ g) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j (g (w, a)) w: W a: A Hin: (w, (j, a)) ∈md t
(w, (j, a)) ∈md t
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a)) ->
kbindd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A)
(g : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a)) ->
kbindd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a)
kbindd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a)
kbindd U j f t = kmapd U j (g ∘ extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a)
forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = mret T j ((g ∘ extract) (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a) w: W a: A Hin: (w, (j, a)) ∈md t
f (w, a) = mret T j ((g ∘ extract) (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j (g a) w: W a: A Hin: (w, (j, a)) ∈md t
(w, (j, a)) ∈md t
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a) ->
kbindd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> T j A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a) ->
kbindd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a
kbindd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a
kbindd U j f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a
kbindd U j f t = kbindd U ?j (mret T ?j ∘ extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> T j A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = mret T j a
forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
f (w, a) = (mret T j ∘ extract) (w, a)
auto.Qed.Endkbindd_respectful.(** ** Respectfulness for Heterogeneous Operations *)(**********************************************************************)Sectionmixed_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} (j: K).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A)
(g : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))) ->
kbind U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A)
(g : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))) ->
kbind U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))
kbind U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))
kbind U j f t = kbindd U j (mret T j ∘ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))
kbindd U j (f ∘ extract) t =
kbindd U j (mret T j ∘ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a))
forall (w : W) (a : A),
(w, (j, a)) ∈md t ->
(f ∘ extract) (w, a) = (mret T j ∘ g) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a)) w: W a: A Hin: (w, (j, a)) ∈md t
(f ∘ extract) (w, a) = (mret T j ∘ g) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = mret T j (g (w, a)) w: W a: A Hin: (w, (j, a)) ∈md t
(w, (j, a)) ∈md t
auto.Qed.Endmixed_respectful.(** ** Respectfulness for <<kbind>> *)(**********************************************************************)Sectionkbindd_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} (j: K).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : A -> T j A),
(foralla : A, (j, a) ∈m t -> f a = g a) ->
kbind U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : A -> T j A),
(foralla : A, (j, a) ∈m t -> f a = g a) ->
kbind U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a
kbind U j f t = kbind U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a
mbind U (btg j f) t = mbind U (btg j g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a
forall (k : K) (a : A),
(k, a) ∈m t -> btg j f k a = btg j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a k: K a: A premise: (k, a) ∈m t
btg j f k a = btg j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: A -> T k A hyp: foralla : A, (k, a) ∈m t -> f a = g a a: A premise: (k, a) ∈m t DESTR_EQs: k = k
btg k f k a = btg k g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a k: K a: A premise: (k, a) ∈m t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btg j f k a = btg j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: A -> T k A hyp: foralla : A, (k, a) ∈m t -> f a = g a a: A premise: (k, a) ∈m t DESTR_EQs: k = k
btg k f k a = btg k g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A k: K g, f: A -> T k A hyp: foralla : A, (k, a) ∈m t -> f a = g a a: A premise: (k, a) ∈m t DESTR_EQs: k = k
f a = g a
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = g a k: K a: A premise: (k, a) ∈m t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btg j f k a = btg j g k a
do2 (rewrite btg_neq; auto).Qed.(** *** For equalities with special cases *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A)
(g : A -> A),
(foralla : A, (j, a) ∈m t -> f a = mret T j (g a)) ->
kbind U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A)
(g : A -> A),
(foralla : A, (j, a) ∈m t -> f a = mret T j (g a)) ->
kbind U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: A -> A hyp: foralla : A,
(j, a) ∈m t -> f a = mret T j (g a)
kbind U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: A -> A hyp: foralla : A,
(j, a) ∈m t -> f a = mret T j (g a)
kbind U j f t = kbind U j (mret T j ∘ g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: A -> A hyp: foralla : A,
(j, a) ∈m t -> f a = mret T j (g a)
foralla : A, (j, a) ∈m t -> f a = (mret T j ∘ g) a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: A -> A hyp: foralla : A,
(j, a) ∈m t -> f a = mret T j (g a) a: A Hin: (j, a) ∈m t
f a = (mret T j ∘ g) a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A g: A -> A hyp: foralla : A,
(j, a) ∈m t -> f a = mret T j (g a) a: A Hin: (j, a) ∈m t
(j, a) ∈m t
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A),
(foralla : A, (j, a) ∈m t -> f a = mret T j a) ->
kbind U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> T j A),
(foralla : A, (j, a) ∈m t -> f a = mret T j a) ->
kbind U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = mret T j a
kbind U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = mret T j a
kbind U j f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> T j A hyp: foralla : A, (j, a) ∈m t -> f a = mret T j a
kbind U j f t = kbind U j (mret T j) t
nowapply kbind_respectful.Qed.Endkbindd_respectful.(** ** Respectfulness for <<kmapd>> *)(**********************************************************************)Sectionkmapd_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} (j: K).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)) ->
kmapd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)) ->
kmapd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
kmapd U j f t = kmapd U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
mmapd U (tgtd j f) t = mmapd U (tgtd j g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a)
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t ->
tgtd j f k (w, a) = tgtd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t
tgtd j f k (w, a) = tgtd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: W * A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
tgtd k f k (w, a) = tgtd k g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j f k (w, a) = tgtd j g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: W * A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
tgtd k f k (w, a) = tgtd k g k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: W * A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f (w, a) = g (w, a) w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
f (w, a) = g (w, a)
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g (w, a) w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j f k (w, a) = tgtd j g k (w, a)
do2 (rewrite tgtd_neq; auto).Qed.(** *** For equalities with other operations *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> A)
(g : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a) ->
kmapd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> A)
(g : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a) ->
kmapd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
kmapd U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
kmapd U j f t = kmapd U j (g ∘ extract) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = g a
forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = (g ∘ extract) (w, a)
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a) ->
kmapd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : W * A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a) ->
kmapd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a
kmapd U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a
kmapd U j f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a
kmapd U j f t = kmapd U j extract t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: W * A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = a
forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f (w, a) = extract (w, a)
auto.Qed.Endkmapd_respectful.(** ** Respectfulness for <<kmap>> *)(**********************************************************************)Sectionkmap_respectful.Context
{U: Type -> Type}
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T} (j: K).
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a) ->
kmap U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (fg : A -> A),
(forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a) ->
kmap U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a
kmap U j f t = kmap U j g t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a
mmap U (tgt j f) t = mmap U (tgt j g) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a
forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> tgt j f k a = tgt j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a w: W k: K a: A premise: (w, (k, a)) ∈md t
tgt j f k a = tgt j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f a = g a w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
tgt k f k a = tgt k g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j f k a = tgt j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f a = g a w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
tgt k f k a = tgt k g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type t: U A f, g: A -> A k: K hyp: forall (w : W) (a : A),
(w, (k, a)) ∈md t -> f a = g a w: W a: A premise: (w, (k, a)) ∈md t DESTR_EQs: k = k
f a = g a
eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j f k a = tgt j g k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f, g: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = g a w: W k: K a: A premise: (w, (k, a)) ∈md t DESTR_NEQ: j <> k DESTR_NEQs: k <> j
id a = id a
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> A),
(forall (w : W) (a : A), (w, (j, a)) ∈md t -> f a = a) ->
kmap U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (t : U A) (f : A -> A),
(forall (w : W) (a : A), (w, (j, a)) ∈md t -> f a = a) ->
kmap U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = a
kmap U j f t = t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = a
kmap U j f t = id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = a
kmap U j f t = kmap U j id t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type t: U A f: A -> A hyp: forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = a
forall (w : W) (a : A),
(w, (j, a)) ∈md t -> f a = id a