Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import
Classes.Multisorted.DecoratedTraversableMonad
Classes.Multisorted.Theory.Container
Classes.Multisorted.Theory.Targeted
Functors.List
Functors.Subset
Functors.Constant.Import TypeFamily.Notations.Import Monoid.Notations.Import List.ListNotations.Import Subset.Notations.Import Multisorted.Theory.Container.Notations.Import ContainerFunctor.Notations.#[local] Open Scope list_scope.#[local] Generalizable VariablesA B C F G W T U K M.(** * Foldmap *)(******************************************************************************)(** ** Operations *)(******************************************************************************)Sectionfoldmap.Context
(U : Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
`{M_mn_op: Monoid_op M}
`{M_mn_unit: Monoid_unit M}.DefinitionmapReducemd_gen {A} (fake: Type) (f : K -> (W * A) -> M): U A -> M :=
mmapdt (B := fake) U (const M) f.DefinitionmapReducemd {A} (f : K -> (W * A) -> M): U A -> M :=
mapReducemd_gen False f.DefinitionmapReducem {A} (f : K -> A -> M) : U A -> M :=
mapReducemd (f ◻ allK (extract (W := (prod W)))).DefinitionmapReducekd {A} (k: K) (f : W * A -> M): U A -> M :=
mapReducemd (tgt_def k f (const Ƶ)).DefinitionmapReducek {A} (k: K) (f : A -> M): U A -> M :=
mapReducem (tgt_def k f (const Ƶ)).
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M A: Type f: K -> W * A -> M
mapReducemd f = mmapdt U (const M) f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M A: Type f: K -> W * A -> M
mapReducemd f = mmapdt U (const M) f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M A: Type f: K -> A -> M
mapReducem f = mapReducemd (f ◻ allK extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M A: Type f: K -> A -> M
mapReducem f = mapReducemd (f ◻ allK extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A, fake1, fake2: Type
mapReducemd_gen fake1 = mapReducemd_gen fake2
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A, fake1, fake2: Type f: K -> W * A -> M
mapReducemd_gen fake1 f = mapReducemd_gen fake2 f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A, fake1, fake2: Type f: K -> W * A -> M
mmapdt U (const M) f = mmapdt U (const M) f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A, fake1, fake2: Type f: K -> W * A -> M
mbinddt U (const M) (mapMret ◻ f) =
mbinddt U (const M) (mapMret ◻ f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A, fake1, fake2: Type f: K -> W * A -> M
mbinddt U (const M) (mapMret ◻ f) =
mbinddt U (const M) (mapMret ◻ f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = kmapdt U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = kmapdt U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = mmapdt U (const M) (tgtdt k f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducemd_gen False (tgt_def k f (const Ƶ)) =
mmapdt U (const M) (tgtdt k f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducemd_gen A (tgt_def k f (const Ƶ)) =
mmapdt U (const M) (tgtdt k f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mmapdt U (const M) (tgt_def k f (const Ƶ)) =
mmapdt U (const M) (tgtdt k f)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
tgt_def k f (const Ƶ) = tgtdt k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k, j: K w: W a: A
tgt_def k f (const Ƶ) j (w, a) = tgtdt k f j (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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k, j: K w: W a: A
(if k == j then f else const Ƶ) (w, a) =
(if k == j then f (w, a) else pure a)
destruct_eq_args k j.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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducek k f = ktraverse U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducek k f = ktraverse U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducemd_gen False
(tgt_def k f (const Ƶ) ◻ allK extract) =
ktraverse U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducemd_gen A
(tgt_def k f (const Ƶ) ◻ allK extract) =
ktraverse U k f
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = mapReducemd (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = mapReducemd (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapReducekd k f = mapReducemd (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
kmapdt U k f = mapReducemd (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mmapdt U (const M) (tgtdt k f) =
mapReducemd (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mmapdt U (const M) (tgtdt k f) =
mmapdt U (const M) (tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mbinddt U (const M) (mapMret ◻ tgtdt k f) =
mbinddt U (const M) (mapMret ◻ tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mbinddt U (const M) (mapMret ◻ tgtdt k f) =
mbinddt U (const M) (mapMret ◻ tgt_def k f (const Ƶ))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
mapMret ◻ tgtdt k f = mapMret ◻ tgt_def k f (const Ƶ)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k: K
tgtdt k f = tgt_def k f (const Ƶ)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k, j: K w: W a: A
tgtdt k f j (w, a) = tgt_def k f (const Ƶ) j (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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: W * A -> M k, j: K w: W a: A
(if k == j then f (w, a) else pure a) =
(if k == j then f else const Ƶ) (w, a)
destruct_eq_args k j.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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducek k f = mapReducekd k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducek k f = mapReducekd k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mapReducek k f = mapReducekd k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
ktraverse U k f = mapReducekd k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mmapt U (const M) (tgtt k f) =
mapReducekd k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mmapt U (const M) (tgtt k f) =
kmapdt U k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mmapdt U (const M) (tgtt k f ◻ allK extract) =
kmapdt U k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
mmapdt U (const M) (tgtt k f ◻ allK extract) =
mmapdt U (const M) (tgtdt k (f ∘ extract))
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k: K
tgtt k f ◻ allK extract = tgtdt k (f ∘ extract)
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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k, j: K w: W a: A
(tgtt k f ◻ allK extract) j (w, a) =
tgtdt k (f ∘ extract) j (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 M: Type M_mn_op: Monoid_op M M_mn_unit: Monoid_unit M Monoid0: Monoid M A: Type f: A -> M k, j: K w: W a: A
(if k == j then f else pure) (allK extract j (w, a)) =
(if k == j then f (extract (w, a)) else pure a)
destruct_eq_args k j.Qed.Endfoldmap.Sectiontolist_and_tosubset.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 (Afake : Type) (t : U A),
tolistmd_gen U fake t =
mapReducemd_gen U fake tolistmd_gen_loc 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 (Afake : Type) (t : U A),
tolistmd_gen U fake t =
mapReducemd_gen U fake tolistmd_gen_loc 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
forallA : Type,
tolistmd U = mapReducemd U tolistmd_gen_loc
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
forallA : Type,
tolistmd U = mapReducemd U tolistmd_gen_loc
reflexivity.Qed.Definitiontosetmd_gen_loc {A}: K -> W * A -> subset (W * (K * A)) :=
funk '(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
forallA : Type,
tosetmd U = mapReducemd U tosetmd_gen_loc
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
forallA : Type,
tosetmd U = mapReducemd U tosetmd_gen_loc
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
tosetmd U = mapReducemd U tosetmd_gen_loc
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
ContainerFunctor.tosubset ∘ tolistmd U =
mapReducemd U tosetmd_gen_loc
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
ContainerFunctor.tosubset
∘ mapReducemd U tolistmd_gen_loc =
mapReducemd U tosetmd_gen_loc
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
ContainerFunctor.tosubset
∘ mbinddt U (const (list (W * (K * A))))
(mapMret ◻ tolistmd_gen_loc) =
mbinddt U (const (W * (K * A) -> Prop))
(mapMret ◻ tosetmd_gen_loc)
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
const ContainerFunctor.tosubset (list (W * (K * A)))
∘ mbinddt U (const (list (W * (K * A))))
(mapMret ◻ tolistmd_gen_loc) =
mbinddt U (const (W * (K * A) -> Prop))
(mapMret ◻ tosetmd_gen_loc)
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
const ContainerFunctor.tosubset (list (W * (K * A)))
∘ mbinddt U (const (list (W * (K * A))))
(mapMret ◻ tolistmd_gen_loc) =
mbinddt U (const (W * (K * A) -> Prop))
(mapMret ◻ tosetmd_gen_loc)
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
mbinddt U (const (W * (K * A) -> Prop))
((funk : K =>
const
(fun (l : list (W * (K * A))) (a : W * (K * A))
=>
(fix In
(a0 : W * (K * A)) (l0 : list (W * (K * A)))
{struct l0} : Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret ◻ tolistmd_gen_loc)) =
mbinddt U (const (W * (K * A) -> Prop))
(mapMret ◻ tosetmd_gen_loc)
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
mbinddt U (const (W * (K * A) -> Prop))
((funk : K =>
const
(fun (l : list (W * (K * A))) (a : W * (K * A))
=>
(fix In
(a0 : W * (K * A)) (l0 : list (W * (K * A)))
{struct l0} : Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret ◻ tolistmd_gen_loc)) =
mbinddt U (const (W * (K * A) -> Prop))
(mapMret ◻ tosetmd_gen_loc)
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
(funk : K =>
const
(fun (l : list (W * (K * A))) (a : W * (K * A)) =>
(fix In
(a0 : W * (K * A)) (l0 : list (W * (K * A)))
{struct l0} : Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret ◻ tolistmd_gen_loc) =
mapMret ◻ tosetmd_gen_loc
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 j: K w: W a: A
((funk : K =>
const
(fun (l : list (W * (K * A))) (a : W * (K * A)) =>
(fix In
(a0 : W * (K * A)) (l0 : list (W * (K * A)))
{struct l0} : Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret ◻ tolistmd_gen_loc)) j (w, a) =
(mapMret ◻ tosetmd_gen_loc) j (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 j: K w: W a: A j': W w': K a': A
((funk : K =>
const
(fun (l : list (W * (K * A))) (a : W * (K * A)) =>
(fix In
(a0 : W * (K * A)) (l0 : list (W * (K * A)))
{struct l0} : Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret ◻ tolistmd_gen_loc)) j (w, a)
(j', (w', a')) =
(mapMret ◻ tosetmd_gen_loc) j (w, a) (j', (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 j: K w: W a: A j': W w': K a': A
(fix In
(a : W * (K * A)) (l : list (W * (K * A))) {struct
l} : Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end) (j', (w', a'))
(map (mret T j) (tolistmd_gen_loc j (w, a))) =
map (mret T j) (tosetmd_gen_loc j (w, a))
(j', (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 j: K w: W a: A j': W w': K a': A
(fix In
(a : W * (K * A)) (l : list (W * (K * A))) {struct
l} : Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end) (j', (w', a')) (tolistmd_gen_loc j (w, a)) =
tosetmd_gen_loc j (w, a) (j', (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 j: K w: W a: A j': W w': K 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
forall (A : Type) (k : K),
ApplicativeMorphism (const (list (W * (K * A))))
(const (list (W * A))) (const (filterk 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
forall (A : Type) (k : K),
ApplicativeMorphism (const (list (W * (K * A))))
(const (list (W * A))) (const (filterk 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 A: Type k: K
ApplicativeMorphism (const (list (W * (K * A))))
(const (list (W * A))) (const (filterk k))
eapply ApplicativeMorphism_monoid_morphism.
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 k: K
Monoid_Morphism (list (W * (K * A))) (list (W * A))
(filterk 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 A: Type k: K
filterk 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 A: Type k: K
foralla1a2 : list (W * (K * A)),
filterk k (a1 ● a2) = filterk k a1 ● filterk k a2
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 k: K
filterk k Ƶ = Ƶ
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: Type k: K
foralla1a2 : list (W * (K * A)),
filterk k (a1 ● a2) = filterk k a1 ● filterk k a2
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 k: K a1, a2: list (W * (K * A))
filterk k (a1 ● a2) = filterk k a1 ● filterk k a2
apply filterk_app.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) (k : K),
toklistd U k = mapReducekd U k (funp : W * A => [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
forall (A : Type) (k : K),
toklistd U k = mapReducekd U k (funp : W * A => [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: Type k: K
toklistd U k = mapReducekd U k (funp : W * A => [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: Type k: K
filterk k ∘ tolistmd U =
mapReducekd U k (funp : W * A => [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: Type k: K
filterk k ∘ mapReducemd U tolistmd_gen_loc =
mapReducekd U k (funp : W * A => [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: Type k: K
filterk k
∘ mbinddt U (const (list (W * (K * A))))
(mapMret ◻ tolistmd_gen_loc) =
mapReducekd U k (funp : W * A => [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: Type k: K
mbinddt U (const (list (W * A)))
((funk0 : K => const (filterk k) (T k0 False))
◻ (mapMret ◻ tolistmd_gen_loc)) =
mapReducekd U k (funp : W * A => [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: Type k: K
mbinddt U (const (list (W * A)))
((funk0 : K => const (filterk k) (T k0 False))
◻ (mapMret ◻ tolistmd_gen_loc)) =
mbinddt U (const (list (W * A)))
(mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))
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 k: K
(funk0 : K => const (filterk k) (T k0 False))
◻ (mapMret ◻ tolistmd_gen_loc) =
mapMret ◻ tgt_def k (funp : W * A => [p]) (const Ƶ)
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 k, j: K w: W a: A
((funk0 : K => const (filterk k) (T k0 False))
◻ (mapMret ◻ tolistmd_gen_loc)) j (w, a) =
(mapMret ◻ tgt_def k (funp : W * A => [p]) (const Ƶ))
j (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 k, j: K w: W a: A
const (filterk k) (T j False)
(map (mret T j) (tolistmd_gen_loc j (w, a))) =
map (mret T j)
((if k == j thenfunp : W * A => [p] else const Ƶ)
(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 k, j: K w: W a: A
(if k == j then [(w, a)] else []) =
map (mret T j)
((if k == j thenfunp : W * A => [p] else const Ƶ)
(w, a))
destruct_eq_args k j.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) (k : K),
toksetd U k t =
mapReducekd U k (funp : W * A => {{p}}) 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) (k : K),
toksetd U k t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
toksetd U k t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
(ContainerFunctor.tosubset ∘ toklistd U k) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
(ContainerFunctor.tosubset
∘ mapReducekd U k (funp : W * A => [p])) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
(ContainerFunctor.tosubset
∘ mapReducekd U k (funp : W * A => [p])) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
(const ContainerFunctor.tosubset (list (W * A))
∘ mapReducekd U k (funp : W * A => [p])) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
(const ContainerFunctor.tosubset (list (W * A))
∘ mapReducekd U k (funp : W * A => [p])) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
mbinddt U (const (W * A -> Prop))
((funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
mbinddt U (const (W * A -> Prop))
((funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))) t =
mapReducekd U k (funp : W * A => {{p}}) 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 k: K
mbinddt U (const (W * A -> Prop))
((funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))) t =
mbinddt U (const (W * A -> Prop))
(mapMret
◻ tgt_def k (funp : W * A => {{p}}) (const Ƶ)) 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 k: K
(funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ)) =
mapMret ◻ tgt_def k (funp : W * A => {{p}}) (const Ƶ)
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, j: K w: W a: A
((funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))) j
(w, a) =
(mapMret
◻ tgt_def k (funp : W * A => {{p}}) (const Ƶ)) j
(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, j: K w: W a: A w': W a': A
((funk : K =>
const
(fun (l : list (W * A)) (a : W * A) =>
(fix In
(a0 : W * A) (l0 : list (W * A)) {struct l0} :
Prop :=
match l0 with
| [] => False
| b :: m => b = a0 \/ In a0 m
end) a l) (T k False))
◻ (mapMret
◻ tgt_def k (funp : W * A => [p]) (const Ƶ))) j
(w, a) (w', a') =
(mapMret
◻ tgt_def k (funp : W * A => {{p}}) (const Ƶ)) j
(w, a) (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, j: K w: W a: A w': W a': A
(fix In (a : W * A) (l : list (W * A)) {struct l} :
Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end) (w', a')
(map (mret T j)
(tgt_def k (funp : W * A => [p])
(fun_ : W * A => Ƶ) j (w, a))) =
map (mret T j)
(tgt_def k (funp : W * A => {{p}})
(fun_ : W * A => Ƶ) j (w, a)) (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, j: K w: W a: A w': W a': A
(fix In (a : W * A) (l : list (W * A)) {struct l} :
Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end) (w', a')
(tgt_def k (funp : W * A => [p])
(fun_ : W * A => Ƶ) j (w, a)) =
tgt_def k (funp : W * A => {{p}})
(fun_ : W * A => Ƶ) j (w, a) (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, j: K w: W a: A w': W a': A
(fix In (a : W * A) (l : list (W * A)) {struct l} :
Prop :=
match l with
| [] => False
| b :: m => b = a \/ In a m
end) (w', a')
((if k == j
thenfunp : W * A => [p]
elsefun_ : W * A => Ƶ) (w, a)) =
(if k == j
thenfunp : W * A => {{p}}
elsefun_ : W * A => Ƶ) (w, a) (w', a')
propext; destruct_eq_args k j; intuition.Qed.Endtolist_and_tosubset.Sectionmorphisms.Context
(U : Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.Generalizable Variablesϕ.
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
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
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, M1: Type op: Monoid_op M1 unit0: Monoid_unit M1 H1: Monoid M1 M2: Type op0: Monoid_op M2 unit1: Monoid_unit M2 H2: Monoid M2 ϕ: M1 -> M2 Monoid_Morphism0: Monoid_Morphism M1 M2 ϕ f: K -> W * A -> M1
ϕ ∘ mapReducemd U f = mapReducemd U (compose ϕ ○ f)
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, M1: Type op: Monoid_op M1 unit0: Monoid_unit M1 H1: Monoid M1 M2: Type op0: Monoid_op M2 unit1: Monoid_unit M2 H2: Monoid M2 ϕ: M1 -> M2 Monoid_Morphism0: Monoid_Morphism M1 M2 ϕ f: K -> W * A -> M1
const ϕ (U False) ∘ mapReducemd U f =
mapReducemd U (compose (const ϕ (U False)) ○ f)
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, M1: Type op: Monoid_op M1 unit0: Monoid_unit M1 H1: Monoid M1 M2: Type op0: Monoid_op M2 unit1: Monoid_unit M2 H2: Monoid M2 ϕ: M1 -> M2 Monoid_Morphism0: Monoid_Morphism M1 M2 ϕ f: K -> W * A -> M1
const ϕ (U False) ∘ mbinddt U (const M1) (mapMret ◻ f) =
mbinddt U (const M2)
(mapMret ◻ compose (const ϕ (U False)) ○ f)
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, M1: Type op: Monoid_op M1 unit0: Monoid_unit M1 H1: Monoid M1 M2: Type op0: Monoid_op M2 unit1: Monoid_unit M2 H2: Monoid M2 ϕ: M1 -> M2 Monoid_Morphism0: Monoid_Morphism M1 M2 ϕ f: K -> W * A -> M1
mbinddt U (const M2)
((funk : K => const ϕ (T k False)) ◻ (mapMret ◻ f)) =
mbinddt U (const M2)
(mapMret ◻ compose (const ϕ (U False)) ○ f)
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 A, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M
mapReducemd U f =
mapReduce_list (fun '(w, (k, a)) => f k (w, a))
∘ tolistmd U
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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M
mapReducemd U f =
mapReduce_list (fun '(w, (k, a)) => f k (w, a))
∘ tolistmd U
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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M
mapReducemd U f =
mapReduce_list (fun '(w, (k, a)) => f k (w, a))
∘ mapReducemd U tolistmd_gen_loc
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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M
mapReducemd U f =
mapReducemd U
(compose
(mapReduce_list
(fun '(w, (k0, a)) => f k0 (w, a)))
○ tolistmd_gen_loc)
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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M
f =
compose
(mapReduce_list (fun '(w, (k0, a)) => f k0 (w, a)))
○ tolistmd_gen_loc
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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M k: K w: W a: A
f k (w, a) =
(mapReduce_list (fun '(w, (k, a)) => f k (w, a))
∘ tolistmd_gen_loc 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, M: Type op: Monoid_op M unit0: Monoid_unit M H1: Monoid M f: K -> W * A -> M k: K w: W a: A
f k (w, a) = f k (w, a) ● Ƶ
now simpl_monoid.Qed.Endmorphisms.Sectionforall_and_exists.Context
(U : Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.DefinitionForallmd {A} (P: K -> W * A -> Prop) :=
mapReducemd U (T := T)
(M_mn_op := Monoid_op_and) (M_mn_unit := Monoid_unit_true) P.DefinitionForallkd {A} (k: K) (P: W * A -> Prop) :=
mapReducekd U k (T := T)
(M_mn_op := Monoid_op_and) (M_mn_unit := Monoid_unit_true) 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: Type P: K -> W * A -> Prop
Forallmd P = mapReducemd U 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: Type P: K -> W * A -> Prop
Forallmd P = mapReducemd U P
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 A: Type k: K P: W * A -> Prop
Forallkd k P = mapReducekd U k 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: Type k: K P: W * A -> Prop
Forallkd k P = mapReducekd U k P
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 A: Type k: K P: W * A -> Prop
Forallkd k P = Forallmd (tgt_def k P (const True))
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 k: K P: W * A -> Prop
Forallkd k P = Forallmd (tgt_def k P (const True))
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 k: K P: W * A -> Prop
mapReducekd U k P =
mapReducemd U (tgt_def k P (const True))
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 k: K P: W * A -> Prop
mapReducemd U (tgt_def k P (const Ƶ)) =
mapReducemd U (tgt_def k P (const True))
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
forall (A : Type) (P : W * (K * A) -> Prop) (t : U A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> P (w, (k, a))) =
Forallmd (fun (k : K) '(w, a) => P (w, (k, a))) 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) (P : W * (K * A) -> Prop) (t : U A),
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> P (w, (k, a))) =
Forallmd (fun (k : K) '(w, a) => P (w, (k, a))) 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> P (w, (k, a))) =
Forallmd (fun (k : K) '(w, a) => P (w, (k, a))) 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
(w, (k, a)) ∈md t -> P (w, (k, a))) =
mapReducemd U (fun (k : K) '(w, a) => P (w, (k, a))) 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
(ContainerFunctor.tosubset ∘ tolistmd U) t
(w, (k, a)) -> P (w, (k, a))) =
mapReducemd U (fun (k : K) '(w, a) => P (w, (k, a))) 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
(ContainerFunctor.tosubset ∘ tolistmd U) t
(w, (k, a)) -> P (w, (k, a))) =
(mapReduce_list (fun '(w, (k, a)) => P (w, (k, a)))
∘ tolistmd U) 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset (tolistmd U t) (w, (k, a)) ->
P (w, (k, a))) =
mapReduce_list (fun '(w, (k, a)) => P (w, (k, a)))
(tolistmd U 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset (tolistmd U t) (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list (fun '(w, (k, a)) => P (w, (k, a)))
(tolistmd U 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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset [] (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list (fun '(w, (k, a)) => P (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 A: Type P: W * (K * A) -> Prop t: U A a: W * (K * A) l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
(forall (w : W) (k : K) (a0 : A),
ContainerFunctor.tosubset (a :: l) (w, (k, a0)) ->
P (w, (k, a0))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a)))
(a :: l)
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 P: W * (K * A) -> Prop t: U A
(forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset [] (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list (fun '(w, (k, a)) => P (w, (k, a))) []
cbv; intuition.
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 P: W * (K * A) -> Prop t: U A a: W * (K * A) l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
(forall (w : W) (k : K) (a0 : A),
ContainerFunctor.tosubset (a :: l) (w, (k, a0)) ->
P (w, (k, a0))) <->
mapReduce_list (fun '(w, (k, a)) => P (w, (k, a)))
(a :: l)
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (w0, (k0, a0))
P (w, (k, a))
● crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l)
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (w0, (k0, a0))
P (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 A: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (w0, (k0, a0))
P (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 A: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l hyp: forall (w0 : W) (k0 : K) (a0 : A),
(w, (k, a)) = (w0, (k0, a0)) \/
List.In (w0, (k0, a0)) l ->
P (w0, (k0, a0))
forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, 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 A: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l case1: P (w, (k, a)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) w0: W k0: K a0: A Heq: (w, (k, a)) = (w0, (k0, a0))
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l case1: P (w, (k, a)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) w0: W k0: K a0: A Hin: List.In (w0, (k0, a0)) l
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l case1: P (w, (k, a)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) w0: W k0: K a0: A Heq: (w, (k, a)) = (w0, (k0, a0))
P (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: Type P: W * (K * A) -> Prop t: U A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l w0: W k0: K a0: A Heq: (w0, (k0, a0)) = (w0, (k0, a0)) case1: P (w0, (k0, a0)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l)
P (w0, (k0, a0))
cbvin *; tauto.
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 P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
mapReduce_list
(fun '(w, (k, a)) => P (w, (k, a))) l case1: P (w, (k, a)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) w0: W k0: K a0: A Hin: List.In (w0, (k0, a0)) l
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) case1: P (w, (k, a)) case2: crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) w0: W k0: K a0: A Hin: List.In (w0, (k0, a0)) l
P (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: Type P: W * (K * A) -> Prop t: U A w: W k: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a))) <->
crush_list
(map (fun '(w, (k, a)) => P (w, (k, a))) l) case1: P (w, (k, a)) case2: forall (w : W) (k : K) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, (k, a)) w0: W k0: K a0: A Hin: List.In (w0, (k0, a0)) l
P (w0, (k0, a0))
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) (k : K) (P : W * A -> Prop)
(t : U A),
(forall (w : W) (a : A), (w, (k, a)) ∈md t -> P (w, a)) =
Forallkd k (fun '(w, a) => P (w, a)) 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) (k : K) (P : W * A -> Prop)
(t : U A),
(forall (w : W) (a : A), (w, (k, a)) ∈md t -> P (w, a)) =
Forallkd k (fun '(w, a) => P (w, a)) 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A), (w, (k, a)) ∈md t -> P (w, a)) =
Forallkd k (fun '(w, a) => P (w, a)) 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
(ContainerFunctor.tosubset ∘ tolistmd U) t
(w, (k, a)) -> P (w, a)) =
mapReducekd U k (fun '(w, a) => P (w, a)) 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
(ContainerFunctor.tosubset ∘ tolistmd U) t
(w, (k, a)) -> P (w, a)) =
mapReducemd U
(tgt_def k (fun '(w, a) => P (w, a)) (const Ƶ)) 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
(ContainerFunctor.tosubset ∘ tolistmd U) t
(w, (k, a)) -> P (w, a)) =
(mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
k0 (w, a)) ∘ tolistmd U) 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
ContainerFunctor.tosubset (tolistmd U t) (w, (k, a)) ->
P (w, a)) =
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
k0 (w, a)) (tolistmd U 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
ContainerFunctor.tosubset (tolistmd U t) (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
k0 (w, a)) (tolistmd U 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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
ContainerFunctor.tosubset [] (w, (k, a)) -> P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
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: Type k: K P: W * A -> Prop t: U A a: W * (K * A) l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l
(forall (w : W) (a0 : A),
ContainerFunctor.tosubset (a :: l) (w, (k, a0)) ->
P (w, a0)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a))
(a :: l)
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 k: K P: W * A -> Prop t: U A
(forall (w : W) (a : A),
ContainerFunctor.tosubset [] (w, (k, a)) -> P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
k0 (w, a)) []
cbv; intuition.
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 k: K P: W * A -> Prop t: U A a: W * (K * A) l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l
(forall (w : W) (a0 : A),
ContainerFunctor.tosubset (a :: l) (w, (k, a0)) ->
P (w, a0)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0)) (const Ƶ)
k0 (w, a)) (a :: l)
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l -> P (w0, a0)) <->
tgt_def k (fun '(w, a) => P (w, a)) (const Ƶ) j (w, a)
● crush_list
(map
(fun '(w, (k0, a)) =>
tgt_def k (fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (w, a)) l)
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l -> P (w0, a0)) <->
(if k == j thenfun '(w, a) => P (w, a) else const Ƶ)
(w, a)
● crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l -> P (w0, a0)) <->
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l -> P (w0, a0)) <->
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l -> P (w0, a0)) ->
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) ->
forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/ List.In (w0, (j, a0)) l ->
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
(forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l -> P (w0, a0)) ->
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (w0, a0)
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (w0, a0)
P (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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (w0, a0)
P (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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (w0, a0)
P (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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/
List.In (w0, (j, a0)) l ->
P (w0, a0)
forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) -> P (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 A: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j
P (w, a)
● crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l) ->
forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (j, a0)) \/ List.In (w0, (j, a0)) l ->
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j case1: P (w, a) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Heq: (w, (j, a)) = (w0, (j, a0))
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j case1: P (w, a) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (j, a0)) l
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j case1: P (w, a) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Heq: (w, (j, a)) = (w0, (j, a0))
P (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: Type P: W * A -> Prop t: U A j: K l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j w0: W a0: A Heq: (w0, (j, a0)) = (w0, (j, a0)) case1: P (w0, a0) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l)
P (w0, a0)
cbvin *; tauto.
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 P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l DESTR_EQs: j = j case1: P (w, a) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (j, a0)) l
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
crush_list
(map
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l) DESTR_EQs: j = j case1: P (w, a) case2: crush_list
(map
(fun '(w, (k, a)) =>
(if j == k
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (j, a0)) l
P (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: Type P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a)) <->
crush_list
(map
(fun '(w, (k, a)) =>
tgt_def j
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k (
w, a)) l) DESTR_EQs: j = j case1: P (w, a) case2: forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (j, a)) ->
P (w, a) w0: W a0: A Hin: List.In (w0, (j, a0)) l
P (w0, a0)
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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (w0, a0)
const Ƶ (w, a)
● crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (w, a)) l)
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (w0, a0)
const Ƶ (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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (w0, a0)
const Ƶ (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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (w0, a0)
True
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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k hyp: forall (w0 : W) (a0 : A),
(w, (j, a)) = (w0, (k, a0)) \/
List.In (w0, (k, a0)) l ->
P (w0, a0)
forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) -> P (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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: 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 A: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Heq: (w, (j, a)) = (w0, (k, a0))
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (k, a0)) l
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Heq: (w, (j, a)) = (w0, (k, a0))
P (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: Type k: K P: W * A -> Prop t: U A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQs, DESTR_NEQ: k <> k w0: W a0: A Heq: (w0, (k, a0)) = (w0, (k, a0)) case1: const Ƶ (w0, a0) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l)
P (w0, a0)
cbvin *; tauto.
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 k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
mapReduce_list
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (k, a0)) l
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
crush_list
(map
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l) DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: crush_list
(map
(fun '(w, (k0, a)) =>
(if k == k0
thenfun '(w0, a0) => P (w0, a0)
else const Ƶ) (
w, a)) l) w0: W a0: A Hin: List.In (w0, (k, a0)) l
P (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: Type k: K P: W * A -> Prop t: U A w: W j: K a: A l: list (W * (K * A)) IHl: (forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a)) <->
crush_list
(map
(fun '(w, (k0, a)) =>
tgt_def k
(fun '(w0, a0) => P (w0, a0))
(const Ƶ) k0 (
w, a)) l) DESTR_NEQ: k <> j DESTR_NEQs: j <> k case1: const Ƶ (w, a) case2: forall (w : W) (a : A),
ContainerFunctor.tosubset l (w, (k, a)) ->
P (w, a) w0: W a0: A Hin: List.In (w0, (k, a0)) l