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
Categories.TypeFamily
Functors.List
Functors.Constant.Import TypeFamily.Notations.Import Product.Notations.Import Monoid.Notations.#[local] Generalizable VariablesA B C F G W S T K.(** * Targeted substitution-building combinators: [btg] and [btgd] *)(**********************************************************************)(* TODO: Define a version that works for applicative effects. *)(* #[program] Definition btga `{ix: Index} `{Map F} `{Pure F} `{Mult F} {A W: Type} (T: K -> Type -> Type) `{! MReturn T} (j: K) (f: W * A -> F (T j A)): forall (k: K), W * A -> F (T k A) := fun k '(w, a) => if k == j then f (w, a) else pure ∘ mret T k a. *)Require Import Coq.Program.Equality.#[program] Definitionbtgd `{ix: Index} {A W: Type}
{T: K -> Type -> Type} `{! MReturn T}
(j: K) (f: W * A -> T j A): forall (k: K), W * A -> T k A :=
funk '(w, a) => if k == j then f (w, a) else mret T k a.#[program] Definitionbtg `{ix: Index} {A: Type}
{T: K -> Type -> Type} `{! MReturn T}
(j: K) (f: A -> T j A): forall (k: K), A -> T k A :=
funk => if k == j then f else mret T k.Require Import Coq.Program.Equality.Sectionbtg_lemmas.Context
`{ix: Index}.Context
`{MReturn T}
{W A: Type}.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (k : K) (f : W * A -> T k A), btgd k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (k : K) (f : W * A -> T k A), btgd k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A
btgd k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A
(funpat : W * A =>
(let
'(w, a) asanonymous' := pat
return (anonymous' = pat -> T k A) infunHeq_anonymous : (w, a) = pat =>
match k == k with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W k k pat w a
Heq_anonymous x in f (w, a)
| right _ => mret T k a
end) eq_refl) = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A w: W a: A
match k == k with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W k k (w, a) w a
eq_refl x in f (w, a)
| right _ => mret T k a
end = f (w, a)
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A w: W a: A DESTR_EQ, DESTR_EQs: k = k
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W k k (w, a) w a eq_refl
DESTR_EQ in f (w, a) = f (w, a)
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W k k (w, a) w a eq_refl
eq_refl in f (w, a) = f (w, a)
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
f (w, a) = f (w, a)
reflexivity.Qed.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (kj : K) (f : W * A -> T j A),
k <> j -> btgd j f k = mret T k ∘ extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (kj : K) (f : W * A -> T j A),
k <> j -> btgd j f k = mret T k ∘ extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: W * A -> T j A
k <> j -> btgd j f k = mret T k ∘ extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: W * A -> T j A
k <> j ->
(funpat : W * A =>
(let
'(w, a) asanonymous' := pat
return (anonymous' = pat -> T k A) infunHeq_anonymous : (w, a) = pat =>
match k == j with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W j k pat w a
Heq_anonymous x in f (w, a)
| right _ => mret T k a
end) eq_refl) = mret T k ∘ extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: W * A -> T j A hyp: k <> j
(funpat : W * A =>
(let
'(w, a) asanonymous' := pat
return (anonymous' = pat -> T k A) infunHeq_anonymous : (w, a) = pat =>
match k == j with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W j k pat w a
Heq_anonymous x in f (w, a)
| right _ => mret T k a
end) eq_refl) = mret T k ∘ extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: W * A -> T j A hyp: k <> j w: W a: A
match k == j with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W j k (w, a) w a
eq_refl x in f (w, a)
| right _ => mret T k a
end = (mret T k ∘ extract) (w, a)
compare values k and j.Qed.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
btgd j (mret T j ∘ extract) = mret T ◻ allK extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
btgd j (mret T j ∘ extract) = mret T ◻ allK extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
(fun (k : K) (pat : W * A) =>
(let
'(w, a) asanonymous' := pat
return (anonymous' = pat -> T k A) infunHeq_anonymous : (w, a) = pat =>
match k == j with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W j k pat w a
Heq_anonymous x in
(mret T j ∘ extract) (w, a)
| right _ => mret T k a
end) eq_refl) = mret T ◻ allK extract
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j, k: K w: W a: A
match k == j with
| left x =>
rew [funH : K => T H A]
btgd_obligation_1 ix0 A W j k (w, a) w a
eq_refl x in (mret T j ∘ extract) (w, a)
| right _ => mret T k a
end = (mret T ◻ allK extract) k (w, a)
compare values k and j.Qed.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (k : K) (f : A -> T k A), btg k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (k : K) (f : A -> T k A), btg k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: A -> T k A
btg k f k = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: A -> T k A
match k == k with
| left x =>
funx0 : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 k k x in f x0
| right _ => mret T k
end = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: A -> T k A DESTR_EQ, DESTR_EQs: k = k
(funx : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 k k DESTR_EQ in f x) = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: A -> T k A DESTR_EQs: k = k
(funx : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 k k eq_refl in f x) = f
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k: K f: A -> T k A DESTR_EQs: k = k
(funx : A => f x) = f
reflexivity.Qed.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (kj : K) (f : A -> T j A),
k <> j -> btg j f k = mret T k
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type
forall (kj : K) (f : A -> T j A),
k <> j -> btg j f k = mret T k
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: A -> T j A
k <> j -> btg j f k = mret T k
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: A -> T j A
k <> j ->
match k == j with
| left x =>
funx0 : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 j k x in f x0
| right _ => mret T k
end = mret T k
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type k, j: K f: A -> T j A hyp: k <> j
match k == j with
| left x =>
funx0 : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 j k x in f x0
| right _ => mret T k
end = mret T k
compare values k and j.Qed.
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
btg j (mret T j) = mret T
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
btg j (mret T j) = mret T
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j: K
(funk : K =>
match k == j with
| left x =>
funx0 : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 j k x in mret T j x0
| right _ => mret T k
end) = mret T
ix, ix0: Index T: K -> Type -> Type H: MReturn T W, A: Type j, k: K
match k == j with
| left x =>
funx0 : A =>
rew [funH : K => T H A]
btg_obligation_1 ix0 j k x in mret T j x0
| right _ => mret T k
end = mret T k
compare values k and j.Qed.Endbtg_lemmas.(** ** Rewrite Hint registration *)(**********************************************************************)#[export] Hint Rewrite @btg_eq @btg_id @btgd_eq @btgd_id: tea_tgt.#[export] Hint Rewrite @tgtd_eq @tgtd_eq @tgtd_id: tea_tgt.#[export] Hint Rewrite @btgd_neq @btg_neq usingauto: tea_tgt.#[export] Hint Rewrite @btgd_eq @btg_eq @btg_id @btgd_id: tea_tgt_eq.#[export] Hint Rewrite @tgtd_eq @tgt_eq @tgt_id: tea_tgt_eq.#[export] Hint Rewrite @btgd_neq @btg_neq usingauto: tea_tgt_neq.#[export] Hint Rewrite @tgtd_neq: tea_tgt_neq.(** ** Derived targeted DTM operations *)(**********************************************************************)SectionDTM_targeted.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
(j: K).(** *** Definitions *)(* For now we ignore traversals because we don't need them for System F. *)(********************************************************************)Definitionkbindd {A} `(f: W * A -> T j A): U A -> U A
:= mbindd U (btgd j f).Definitionkbind `(f: A -> T j A): U A -> U A
:= mbind U (btg j f).Definitionkmapd `(f: W * A -> A): U A -> U A :=
mmapd U (tgtd j f).Definitionkmap `(f: A -> A): U A -> U A :=
mmap U (tgt j f).Sectiontraversals.Context `{Applicative G}.Definitiontgtdt
{A} (k: K) (f: W * A -> G A): W * A -k-> G A :=
funj '(w, a) => if k == j then f (w, a) else pure a.Definitiontgtdt_def
{AB} (k: K) (fdef: W * A -> G B): W * A -k-> G B :=
funj => if k == j then f else def.Definitiontgtt {A} (k: K) (f: A -> G A): A -k-> G A :=
funj => if k == j then f else pure.Definitiontgtt_def {AB} (k: K) (fdef: A -> G B): A -k-> G B :=
funj => if k == j then f else def.Definitionkmapdt `(f: W * A -> G A): U A -> G (U A) :=
mmapdt U G (tgtdt j f).Definitionktraverse `(f: A -> G A): U A -> G (U A) :=
mmapt U G (tgtt j 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 j: K G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G A: Type f: W * A -> G A
kmapdt f = mmapdt U G (tgtdt j 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 j: K G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G A: Type f: W * A -> G A
kmapdt f = mmapdt U G (tgtdt j 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 j: K G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G A: Type f: A -> G A
ktraverse f = mmapt U G (tgtt j 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 j: K G: Type -> Type Map_G: Map G Pure_G: Pure G Mult_G: Mult G H1: Applicative G A: Type f: A -> G A
ktraverse f = mmapt U G (tgtt j f)
reflexivity.Qed.Endtraversals.Sectionspecial_cases.Context
{A: Type}.(** *** Rewriting rules for special cases of <<kbindd>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> T j A
kbind f = kbindd (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 j: K A: Type f: A -> T j A
kbind f = kbindd (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 j: K A: Type f: A -> T j A
mbind U (btg j f) = mbindd U (btgd j (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 j: K A: Type f: A -> T j A
mbindd U (btg j f ◻ allK extract) =
mbindd U (btgd j (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 j: K A: Type f: A -> T j A
btg j f ◻ allK extract = btgd j (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 j: K A: Type f: A -> T j A k: K w: W a: A
(btg j f ◻ allK extract) k (w, a) =
btgd j (f ∘ extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> T j A k: K w: W a: A
btg j f k a =
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
f a
| right _ => mret T k a
end
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> T j A w: W a: A DESTR_EQs: j = j
btg j f j a =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
f 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 j: K A: Type f: A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
btg j f k a = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> T j A w: W a: A DESTR_EQs: j = j
btg j f j a =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
f 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 j: K A: Type f: A -> T j A w: W a: A DESTR_EQs: j = j
f a =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
f a
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 j: K A: Type f: A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
btg j f k a = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mret T k a = mret T k a
easy.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 j: K A: Type f: W * A -> A
kmapd f = kbindd (mret T j ∘ 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 j: K A: Type f: W * A -> A
kmapd f = kbindd (mret T j ∘ 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 j: K A: Type f: W * A -> A
mmapd U (tgtd j f) = mbindd U (btgd j (mret T j ∘ 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 j: K A: Type f: W * A -> A
mbindd U (mret T ◻ tgtd j f) =
mbindd U (btgd j (mret T j ∘ 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 j: K A: Type f: W * A -> A
mret T ◻ tgtd j f = btgd j (mret T j ∘ 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 j: K A: Type f: W * A -> A k: K w: W a: A
(mret T ◻ tgtd j f) k (w, a) =
btgd j (mret T j ∘ f) 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 j: K A: Type f: W * A -> A k: K w: W a: A
mret T k (tgtd j f k (w, a)) =
btgd j (mret T j ○ f) 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 j: K A: Type f: W * A -> A k: K w: W a: A
mret T k (if k == j then f (w, a) else a) =
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
mret T j (f (w, a))
| right _ => mret T k a
end
compare values k and 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 j: K A: Type f: A -> A
kmap f = kbindd (mret T j ∘ 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 j: K A: Type f: A -> A
kmap f = kbindd (mret T j ∘ 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 j: K A: Type f: A -> A
mmap U (tgt j f) =
mbindd U (btgd j (mret T j ∘ 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 j: K A: Type f: A -> A
mbindd U ((mret T ◻ tgt j f) ◻ allK extract) =
mbindd U (btgd j (mret T j ∘ 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 j: K A: Type f: A -> A
(mret T ◻ tgt j f) ◻ allK extract =
btgd j (mret T j ∘ 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 j: K A: Type f: A -> A k: K w: W a: A
((mret T ◻ tgt j f) ◻ allK extract) k (w, a) =
btgd j (mret T j ∘ f ∘ extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A k: K w: W a: A
mret T k (tgt j f k (allK extract k (w, a))) =
btgd j (funa : W * A => mret T j (f (extract a))) 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 j: K A: Type f: A -> A k: K w: W a: A
mret T k (tgt j f k a) =
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
mret T j (f a)
| right _ => mret T k a
end
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A w: W a: A DESTR_EQs: j = j
mret T j (tgt j f j a) =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
mret T j (f 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 j: K A: Type f: A -> A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mret T k (tgt j f k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A w: W a: A DESTR_EQs: j = j
mret T j (tgt j f j a) = mret T j (f 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 j: K A: Type f: A -> A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mret T k (tgt j f k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mret T k (tgt j f k a) = mret T k a
nowautorewrite with tea_tgt_neq.Qed.(** *** Rewriting rules for special cases of <<kmapd>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A
kmap f = kmapd (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 j: K A: Type f: A -> A
kmap f = kmapd (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 j: K A: Type f: A -> A
mmap U (tgt j f) = kmapd (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 j: K A: Type f: A -> A
mmap U (tgt j f) = mmapd U (tgtd j (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 j: K A: Type f: A -> A
mmapd U (tgt j f ◻ allK extract) =
mmapd U (tgtd j (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 j: K A: Type f: A -> A
tgt j f ◻ allK extract = tgtd j (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 j: K A: Type f: A -> A k: K
(tgt j f ◻ allK extract) k = tgtd j (f ∘ extract) 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 j: K A: Type f: A -> A k: K
tgt j f k ∘ allK extract k = tgtd j (f ∘ extract) 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 A: Type f: A -> A k: K DESTR_EQs: k = k
tgt k f k ∘ allK extract k = tgtd k (f ∘ extract) 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 j: K A: Type f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j f k ∘ allK extract k = tgtd j (f ∘ extract) 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 j: K A: Type f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j f k ∘ allK extract k = tgtd j (f ∘ extract) k
nowautorewrite with tea_tgt_neq.Qed.(** *** Rewriting rules for special cases of <<kbind>> *)(******************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U j: K A: Type f: A -> A
kmap f = kbind (mret T j ∘ 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 j: K A: Type f: A -> A
kmap f = kbind (mret T j ∘ 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 j: K A: Type f: A -> A
mmap U (tgt j f) = mbind U (btg j (mret T j ∘ 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 j: K A: Type f: A -> A
mbind U (mret T ◻ tgt j f) =
mbind U (btg j (mret T j ∘ 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 j: K A: Type f: A -> A
mret T ◻ tgt j f = btg j (mret T j ∘ 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 j: K A: Type f: A -> A k: K
(mret T ◻ tgt j f) k = btg j (mret T j ∘ f) 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 j: K A: Type f: A -> A k: K
mret T k ∘ tgt j f k = btg j (mret T j ∘ f) 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 A: Type f: A -> A k: K DESTR_EQs: k = k
mret T k ∘ tgt k f k = btg k (mret T k ∘ f) 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 j: K A: Type f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mret T k ∘ tgt j f k = btg j (mret T j ∘ f) 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 j: K A: Type f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mret T k ∘ tgt j f k = btg j (mret T j ∘ f) k
nowautorewrite with tea_tgt_neq.Qed.Endspecial_cases.EndDTM_targeted.(** ** Decorated monad (<<kbindd>>) *)(**********************************************************************)Definitioncompose_kdm
`{ix: Index}
{W: Type}
{T: K -> Type -> Type}
`{mn_op: Monoid_op W}
`{mn_unit: Monoid_unit W}
`{forallk, MBind W T (T k)}
`{! MReturn T}
{j: K}
{A: Type}
(g: W * A -> T j A)
(f: W * A -> T j A): W * A -> T j A :=
fun '(w, a) => kbindd (T j) j (g ∘ incr w) (f (w, a)).Infix"⋆kdm" := compose_kdm (at level40).SectionDecoratedMonad.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
{j: K}
{A: Type}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kbindd U j (mret T j ∘ extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kbindd U j (mret T j ∘ extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kbindd U j (mret T j ∘ extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mbindd U (btgd j (mret T j ∘ extract)) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mbindd U (btgd j (mret T j ∘ extract)) =
mbindd U (mret T ◻ 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 j: K A: Type
btgd j (mret T j ∘ extract) = mret T ◻ 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 j: K A: Type k: K w: W a: A
btgd j (mret T j ∘ extract) k (w, a) =
(mret T ◻ allK extract) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K w: W a: A
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
(mret T j ∘ extract) (w, a)
| right _ => mret T k a
end = (mret T ◻ allK extract) k (w, a)
compare values k and 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 j: K A: Type
forallgf : W * A -> T j A,
kbindd U j g ∘ kbindd U j f = kbindd U j (g ⋆kdm 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 j: K A: Type
forallgf : W * A -> T j A,
kbindd U j g ∘ kbindd U j f = kbindd U j (g ⋆kdm 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 j: K A: Type g, f: W * A -> T j A
kbindd U j g ∘ kbindd U j f = kbindd U j (g ⋆kdm 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 j: K A: Type g, f: W * A -> T j A
mbindd U (btgd j g) ∘ mbindd U (btgd j f) =
mbindd U (btgd j (g ⋆kdm 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 j: K A: Type g, f: W * A -> T j A
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k) (btgd j g ◻ allK (incr w))
(btgd j f k (w, a))) =
mbindd U (btgd j (g ⋆kdm 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 j: K A: Type g, f: W * A -> T j A
(fun (k : K) '(w, a) =>
mbindd (T k) (btgd j g ◻ allK (incr w))
(btgd j f k (w, a))) = btgd j (g ⋆kdm 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 j: K A: Type g, f: W * A -> T j A k: K w: W a: A
mbindd (T k) (btgd j g ◻ allK (incr w))
(btgd j f k (w, a)) = btgd j (g ⋆kdm f) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A
mbindd (T k) (btgd j g ◻ allK (incr w))
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
f (w, a)
| right _ => mret T k a
end =
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
kbindd (T j) j (g ∘ incr w) (f (w, a))
| right _ => mret T k a
end
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j
mbindd (T j) (btgd j g ◻ allK (incr w))
(rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
f (w, a)) =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
kbindd (T j) j (g ∘ incr w) (f (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mbindd (T k) (btgd j g ◻ allK (incr w)) (mret T k a) =
mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j
mbindd (T j) (btgd j g ◻ allK (incr w))
(rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
f (w, a)) =
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl eq_refl in
kbindd (T j) j (g ∘ incr w) (f (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j
btgd j g ◻ allK (incr w) = btgd j (g ∘ incr w)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A w: W a: A DESTR_EQs: j = j k: K w': W a': A
(btgd j g ◻ allK (incr w)) k (w', a') =
btgd j (g ∘ incr w) k (w', a')
compare values k and j.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
mbindd (T k) (btgd j g ◻ allK (incr w)) (mret T k a) =
mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
(mbindd (T k) (btgd j g ◻ allK (incr w)) ∘ mret T k) a =
mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
((btgd j g ◻ allK (incr w)) k ∘ Monad.ret) a =
mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> T j A k: K w: W a: A DESTR_NEQ: k <> j DESTR_NEQs: j <> k
match k == j with
| left x =>
rew [funH : K => T H A]
eq_ind_r (funk : K => j = k) eq_refl x in
g (w ● Ƶ, a)
| right _ => mret T k a
end = mret T k a
compare values k and 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 j: K A: Type
foralli : K,
j <> i ->
forall (g : W * A -> T i A) (f : W * A -> T j A),
kbindd U i g ∘ kbindd U j f =
mbindd U (btgd i g ⋆dm btgd j 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 j: K A: Type
foralli : K,
j <> i ->
forall (g : W * A -> T i A) (f : W * A -> T j A),
kbindd U i g ∘ kbindd U j f =
mbindd U (btgd i g ⋆dm btgd j 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 j: K A: Type i: K Hneq: j <> i g: W * A -> T i A f: W * A -> T j A
kbindd U i g ∘ kbindd U j f =
mbindd U (btgd i g ⋆dm btgd j 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 j: K A: Type i: K Hneq: j <> i g: W * A -> T i A f: W * A -> T j A
mbindd U (btgd i g) ∘ mbindd U (btgd j f) =
mbindd U (btgd i g ⋆dm btgd j f)
nowrewrite (mbindd_mbindd U).Qed.(** *** Right unit law for monads *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (a : A),
kbindd (T j) j f (mret T j a) = f (Ƶ, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (a : A),
kbindd (T j) j f (mret T j a) = f (Ƶ, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A a: A
kbindd (T j) j f (mret T j a) = f (Ƶ, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A a: A
mbindd (T j) (btgd j f) (mret T j a) = f (Ƶ, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A a: A
(mbindd (T j) (btgd j f) ∘ mret T j) a = f (Ƶ, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A a: A
(btgd j f j ∘ Monad.ret) a = f (Ƶ, a)
nowautorewrite with tea_tgt_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (a : A),
kbindd (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (a : A),
kbindd (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A a: A
kbindd (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A a: A
mbindd (T i) (btgd j f) (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A a: A
(mbindd (T i) (btgd j f) ∘ mret T i) a = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A a: A
(btgd j f i ∘ Monad.ret) a = mret T i a
nowautorewrite with tea_tgt_neq.Qed.(** *** Composition with special cases *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> A) (f : W * A -> T j A),
kmapd U j g ∘ kbindd U j f =
kbindd U j
(fun '(w, a) =>
kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> A) (f : W * A -> T j A),
kmapd U j g ∘ kbindd U j f =
kbindd U j
(fun '(w, a) =>
kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A
kmapd U j g ∘ kbindd U j f =
kbindd U j
(fun '(w, a) =>
kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A
kbindd U j (mret T j ∘ g) ∘ kbindd U j f =
kbindd U j
(fun '(w, a) =>
kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A
kbindd U j ((mret T j ∘ g) ⋆kdm f) =
kbindd U j
(fun '(w, a) =>
kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A
(mret T j ∘ g) ⋆kdm f =
(fun '(w, a) => kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A
(fun '(w, a) =>
kbindd (T j) j (mret T j ∘ g ∘ incr w) (f (w, a))) =
(fun '(w, a) => kmapd (T j) j (g ∘ incr w) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> A f: W * A -> T j A w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : A -> T j A) (f : W * A -> T j A),
kbind U j g ∘ kbindd U j f =
kbindd U j (kbind (T j) j g ∘ 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 j: K A: Type
forall (g : A -> T j A) (f : W * A -> T j A),
kbind U j g ∘ kbindd U j f =
kbindd U j (kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A
kbind U j g ∘ kbindd U j f =
kbindd U j (kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A
kbindd U j (g ∘ extract) ∘ kbindd U j f =
kbindd U j (kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A
kbindd U j ((g ∘ extract) ⋆kdm f) =
kbindd U j (kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A
(g ∘ extract) ⋆kdm f = kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A
(fun '(w, a) =>
kbindd (T j) j (g ∘ extract ∘ incr w) (f (w, a))) =
kbind (T j) j g ∘ 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 j: K A: Type g: A -> T j A f: W * A -> T j A w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> T j A f: W * A -> T j A w: W a: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> T j A f: W * A -> T j A w: W a: A
kbindd (T j) j (g ∘ extract) (f (w, a)) =
(kbind (T j) j g ∘ f) (w, a)
nowrewrite kbind_to_kbindd.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : A -> A) (f : W * A -> T j A),
kmap U j g ∘ kbindd U j f =
kbindd U j (fun '(w, a) => kmap (T j) j g (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : A -> A) (f : W * A -> T j A),
kmap U j g ∘ kbindd U j f =
kbindd U j (fun '(w, a) => kmap (T j) j g (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A
kmap U j g ∘ kbindd U j f =
kbindd U j (fun '(w, a) => kmap (T j) j g (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A
mmap U (tgt j g) ∘ mbindd U (btgd j f) =
mbindd U
(btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A
mbindd U ((mret T ◻ tgt j g) ◻ allK extract)
∘ mbindd U (btgd j f) =
mbindd U
(btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A
mbindd U
(fun (k : K) '(w, a) =>
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract)
◻ allK (incr w)) (btgd j f k (w, a))) =
mbindd U
(btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A
(fun (k : K) '(w, a) =>
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract)
◻ allK (incr w)) (btgd j f k (w, a))) =
btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract) ◻ allK (incr w))
(btgd j f k (w, a)) =
btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))) k
(w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
mbindd (T k)
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
(btgd k f k (w, a)) =
btgd k
(fun '(w, a) => mmap (T k) (tgt k g) (f (w, a))) k
(w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract) ◻ allK (incr w))
(btgd j f k (w, a)) =
btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))) k
(w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
mbindd (T k)
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
(btgd k f k (w, a)) =
btgd k
(fun '(w, a) => mmap (T k) (tgt k g) (f (w, a))) k
(w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
mbindd (T k)
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
(f (w, a)) = mmap (T k) (tgt k g) (f (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 g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
mbindd (T k)
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
(f (w, a)) =
mbindd (T k) ((mret T ◻ tgt k g) ◻ allK extract)
(f (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 g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k
((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w) =
(mret T ◻ tgt k g) ◻ 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 A: Type g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k k': K w': W a': A
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
k' (w', a') =
((mret T ◻ tgt k g) ◻ allK extract) k' (w', a')
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g: A -> A k: K f: W * A -> T k A w: W a: A DESTR_EQs: k = k k': K w': W a': A
(((mret T ◻ tgt k g) ◻ allK extract) ◻ allK (incr w))
k' (w', a') =
((mret T ◻ tgt k g) ◻ allK extract) k' (w', a')
reflexivity.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract) ◻ allK (incr w))
(btgd j f k (w, a)) =
btgd j
(fun '(w, a) => mmap (T j) (tgt j g) (f (w, a))) k
(w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbindd (T k)
(((mret T ◻ tgt j g) ◻ allK extract) ◻ allK (incr w))
((mret T k ∘ extract) (w, a)) =
(mret T k ∘ extract) (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbindd (T k)
(fun (k : K) (a : W * A) =>
mret T k
(tgt j g k (allK extract k (allK (incr w) k a))))
(mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
(mbindd (T k)
(fun (k : K) (a : W * A) =>
mret T k
(tgt j g k (allK extract k (allK (incr w) k a))))
∘ mret T k) a = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: A -> A f: W * A -> T j A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
((funa : W * A =>
mret T k
(tgt j g k (allK extract k (allK (incr w) k a))))
∘ Monad.ret) a = mret T k a
rewrite tgt_neq; auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> T j A) (f : W * A -> A),
kbindd U j g ∘ kmapd U j f =
kbindd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> T j A) (f : W * A -> A),
kbindd U j g ∘ kmapd U j f =
kbindd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A
kbindd U j g ∘ kmapd U j f =
kbindd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A
kbindd U j g ∘ kbindd U j (mret T j ∘ f) =
kbindd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A
kbindd U j (g ⋆kdm (mret T j ∘ f)) =
kbindd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A
g ⋆kdm (mret T j ∘ f) =
(fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A w: W a: A
(g ⋆kdm (mret T j ∘ f)) (w, a) = g (w, f (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A w: W a: A
kbindd (T j) j (g ∘ incr w) (mret T j (f (w, a))) =
g (w, f (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A w: W a: A
(g ∘ incr w) (Ƶ, f (w, a)) = g (w, f (w, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: W * A -> A w: W a: A
g (w ● Ƶ, f (w, a)) = g (w, f (w, a))
now simpl_monoid.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> T j A) (f : A -> T j A),
kbindd U j g ∘ kbind U j f =
kbindd U j
(fun '(w, a) => kbindd (T j) j (g ∘ incr w) (f a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (g : W * A -> T j A) (f : A -> T j A),
kbindd U j g ∘ kbind U j f =
kbindd U j
(fun '(w, a) => kbindd (T j) j (g ∘ incr w) (f a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: A -> T j A
kbindd U j g ∘ kbind U j f =
kbindd U j
(fun '(w, a) => kbindd (T j) j (g ∘ incr w) (f a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g: W * A -> T j A f: A -> T j A
kbindd U j g ∘ kbindd U j (f ∘ extract) =
kbindd U j
(fun '(w, a) => kbindd (T j) j (g ∘ incr w) (f a))
nowrewrite kbindd_kbindd_eq.Qed.(* TODO <<kbindd_kmap>> *)EndDecoratedMonad.(** ** Mixed structure composition laws *)(** Composition laws involving <<kbind>> and <<kmapd>> *)(**********************************************************************)(* TODO <<kbind_kmapd>> *)(* TODO <<kmapd_kbind>> *)(** ** Decorated functors (<<kmapd>>) *)(**********************************************************************)SectionDecoratedFunctor.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
{j: K}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kmapd U j extract = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kmapd U j extract = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kmapd U j extract = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mmapd U (tgtd j extract) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mmapd U (tgtd j extract) = mmapd U (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 j: K A: Type
tgtd j extract = 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 j: K A: Type k: K
tgtd j extract k = allK extract 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 DESTR_EQs: k = k
tgtd k extract k = allK extract k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j extract k = allK extract 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 DESTR_EQs: k = k
tgtd k extract k = allK extract k
nowautorewrite with tea_tgt.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j extract k = allK extract k
nowautorewrite with tea_tgt.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (gf : W * A -> A),
kmapd U j g ∘ kmapd U j f =
kmapd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (gf : W * A -> A),
kmapd U j g ∘ kmapd U j f =
kmapd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A
kmapd U j g ∘ kmapd U j f =
kmapd U j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A
mmapd U (tgtd j g) ∘ mmapd U (tgtd j f) =
mmapd U (tgtd j (fun '(w, a) => g (w, f (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A
mmapd U
(fun (k : K) '(w, a) =>
tgtd j g k (w, tgtd j f k (w, a))) =
mmapd U (tgtd j (fun '(w, a) => g (w, f (w, a))))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A
(fun (k : K) '(w, a) =>
tgtd j g k (w, tgtd j f k (w, a))) =
tgtd j (fun '(w, a) => g (w, f (w, a)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A k: K w: W a: A
tgtd j g k (w, tgtd j f k (w, a)) =
tgtd j (fun '(w, a) => g (w, f (w, a))) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g, f: W * A -> A k: K w: W a: A DESTR_EQs: k = k
tgtd k g k (w, tgtd k f k (w, a)) =
tgtd k (fun '(w, a) => g (w, f (w, a))) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j g k (w, tgtd j f k (w, a)) =
tgtd j (fun '(w, a) => g (w, f (w, a))) k (w, a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type g, f: W * A -> A k: K w: W a: A DESTR_EQs: k = k
tgtd k g k (w, tgtd k f k (w, a)) =
tgtd k (fun '(w, a) => g (w, f (w, a))) k (w, a)
nowautorewrite with tea_tgt.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: W * A -> A k: K w: W a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgtd j g k (w, tgtd j f k (w, a)) =
tgtd j (fun '(w, a) => g (w, f (w, a))) k (w, a)
nowautorewrite with tea_tgt_neq.Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (f : W * A -> A) (a : A),
kmapd (T j) j f (mret T j a) = mret T j (f (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (f : W * A -> A) (a : A),
kmapd (T j) j f (mret T j a) = mret T j (f (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A a: A
kmapd (T j) j f (mret T j a) = mret T j (f (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A a: A
mmapd (T j) (tgtd j f) (mret T j a) =
mret T j (f (Ƶ, a))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A a: A
mret T j (tgtd j f j (Ƶ, a)) = mret T j (f (Ƶ, a))
nowautorewrite with tea_tgt.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (k : K),
k <> j ->
forall (f : W * A -> A) (a : A),
kmapd (T k) j f (mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (k : K),
k <> j ->
forall (f : W * A -> A) (a : A),
kmapd (T k) j f (mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K neq: k <> j f: W * A -> A a: A
kmapd (T k) j f (mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K neq: k <> j f: W * A -> A a: A
mmapd (T k) (tgtd j f) (mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K neq: k <> j f: W * A -> A a: A
mret T k (tgtd j f k (Ƶ, a)) = mret T k a
nowautorewrite with tea_tgt_neq.Qed.(* TODO <<kmap_kmapd>> *)(* TODO <<kmapd_kmap>> *)EndDecoratedFunctor.(** ** Monads (<<kbind>>) *)(**********************************************************************)Definitioncompose_km
`{ix: Index}
{W: Type}
{T: K -> Type -> Type}
`{forallk, MBind W T (T k)}
`{! MReturn T}
{j: K}
{A: Type}
(g: A -> T j A)
(f: A -> T j A): A -> T j A :=
(kbind (T j) j g ∘ f).Infix"⋆km" := compose_km (at level40).SectionMonad.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
{j: K}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kbind U j (mret T j) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kbind U j (mret T j) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kbind U j (mret T j) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mbind U (btg j (mret T j)) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mbind U (btg j (mret T j)) =
mbind U (funk : K => mret T k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
btg j (mret T j) = (funk : K => mret T k)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K
btg j (mret T j) k = mret T 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 DESTR_EQs: k = k
btg k (mret T k) k = mret T k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btg j (mret T j) k = mret T 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 DESTR_EQs: k = k
btg k (mret T k) k = mret T k
nowautorewrite with tea_tgt_eq.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btg j (mret T j) k = mret T k
nowautorewrite with tea_tgt_neq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (gf : A -> T j A),
kbind U j g ∘ kbind U j f = kbind U j (g ⋆km 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 j: K
forall (A : Type) (gf : A -> T j A),
kbind U j g ∘ kbind U j f = kbind U j (g ⋆km 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 j: K A: Type g, f: A -> T j A
kbind U j g ∘ kbind U j f = kbind U j (g ⋆km 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 j: K A: Type g, f: A -> T j A
mbind U (btg j g) ∘ mbind U (btg j f) =
mbind U (btg j (g ⋆km 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 j: K A: Type g, f: A -> T j A
mbind U
(funk : K => mbind (T k) (btg j g) ○ btg j f k) =
mbind U (btg j (g ⋆km 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 j: K A: Type g, f: A -> T j A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> T j A k: K a: A
mbind (T k) (btg j g) (btg j f k a) =
btg j (g ⋆km f) k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type k: K f, g: A -> T k A a: A DESTR_EQs: k = k
mbind (T k) (btg k g) (btg k f k a) =
btg k (g ⋆km f) k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> T j A k: K a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbind (T k) (btg j g) (btg j f k a) =
btg j (g ⋆km f) k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T A: Type k: K f, g: A -> T k A a: A DESTR_EQs: k = k
mbind (T k) (btg k g) (btg k f k a) =
btg k (g ⋆km f) k a
nowautorewrite with tea_tgt_eq.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> T j A k: K a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbind (T k) (btg j g) (btg j f k a) =
btg j (g ⋆km f) k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> T j A k: K a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
mbind (T k) (btg j g) (mret T k a) = mret T k a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> T j A k: K a: A DESTR_NEQ: j <> k DESTR_NEQs: k <> j
btg j g k a = mret T k a
nowautorewrite with tea_tgt_neq.Qed.(** *** Composition with <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (f : A -> T j A) (a : A),
kbind (T j) j f (mret T j a) = f a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (f : A -> T j A) (a : A),
kbind (T j) j f (mret T j a) = f a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A a: A
kbind (T j) j f (mret T j a) = f a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A a: A
mbind (T j) (btg j f) (mret T j a) = f a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A a: A
btg j f j a = f a
nowautorewrite with tea_tgt_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (i : K),
j <> i ->
forall (f : A -> T j A) (a : A),
kbind (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (i : K),
j <> i ->
forall (f : A -> T j A) (a : A),
kbind (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A a: A
kbind (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A a: A
mbind (T i) (btg j f) (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A a: A
btg j f i a = mret T i a
nowautorewrite with tea_tgt_neq.Qed.(* TODO <<kmap_kbind>> *)(* TODO <<kbind_kmap>> *)EndMonad.(** ** Functors (<<kmap>>) *)(**********************************************************************)SectionFunctor.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}
{j: K}.(** *** Composition and identity law *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kmap U j id = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forallA : Type, kmap U j id = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
kmap U j id = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mmap U (tgt j id) = id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
mmap U (tgt j id) = mmap U (allK id)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
tgt j id = allK id
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K
tgt j id k = allK id k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type DESTR_EQs: j = j
tgt j id j = allK id j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: k <> j DESTR_NEQs: j <> k
tgt j id k = allK id k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type k: K DESTR_NEQ: k <> j DESTR_NEQs: j <> k
tgt j id k = allK id k
nowautorewrite with tea_tgt_neq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K
forall (A : Type) (gf : A -> A),
kmap U j g ∘ kmap U j f = kmap U j (g ∘ 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 j: K
forall (A : Type) (gf : A -> A),
kmap U j g ∘ kmap U j f = kmap U j (g ∘ 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 j: K A: Type g, f: A -> A
kmap U j g ∘ kmap U j f = kmap U j (g ∘ 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 j: K A: Type g, f: A -> A
mmap U (tgt j g) ∘ mmap U (tgt j f) =
mmap U (tgt j (g ∘ 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 j: K A: Type g, f: A -> A
mmap U (tgt j g ◻ tgt j f) = mmap U (tgt j (g ∘ 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 j: K A: Type g, f: A -> A
tgt j g ◻ tgt j f = tgt j (g ∘ 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 j: K A: Type g, f: A -> A k: K
(tgt j g ◻ tgt j f) k = tgt j (g ∘ f) k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> A k: K
tgt j g k ∘ tgt j f k = tgt j (g ∘ f) 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 g, f: A -> A k: K DESTR_EQs: k = k
tgt k g k ∘ tgt k f k = tgt k (g ∘ f) k
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j g k ∘ tgt j f k = tgt j (g ∘ f) 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 g, f: A -> A k: K DESTR_EQs: k = k
tgt k g k ∘ tgt k f k = tgt k (g ∘ f) k
nowautorewrite with tea_tgt_eq.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type g, f: A -> A k: K DESTR_NEQ: j <> k DESTR_NEQs: k <> j
tgt j g k ∘ tgt j f k = tgt j (g ∘ f) k
nowautorewrite with tea_tgt_neq.Qed.(** *** Naturality w.r.t. <<mret>> *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (a : A),
kmap (T j) j f (mret T j a) = mret T j (f a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (a : A),
kmap (T j) j f (mret T j a) = mret T j (f a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A a: A
kmap (T j) j f (mret T j a) = mret T j (f a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A a: A
mmap (T j) (tgt j f) (mret T j a) = mret T j (f a)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A a: A
mret T j (tgt j f j a) = mret T j (f a)
nowrewrite tgt_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (a : A),
kmap (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (a : A),
kmap (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A a: A
kmap (T i) j f (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A a: A
mmap (T i) (tgt j f) (mret T i a) = mret T i a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A a: A
mret T i (tgt j f i a) = mret T i a
rewrite tgt_neq; auto.Qed.EndFunctor.(** ** Notations **)(**********************************************************************)ModuleNotations.Infix"⋆dtm" := compose_dtm (at level40): tealeaves_scope.Infix"⋆kdm" := compose_kdm (at level40): tealeaves_scope.Infix"⋆km" := compose_km (at level40): tealeaves_scope.EndNotations.Import Container.Notations.(** * Characterizing occurrences post-operation (targetted operations) *)(**********************************************************************)SectionDTM_membership_targetted.Context
(U: Type -> Type)
`{MultiDecoratedTraversablePreModule W T U}
`{! MultiDecoratedTraversableMonad W T}.Context
(j: K)
{A: Type}.(** *** Occurrences in <<kbindd>> with context *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbindd U j f t ->
exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbindd U j f t ->
exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (j, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (j, a2)) ∈md mbindd U (btgd j f) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A hyp: exists (k1 : K)
(w1w2 : W)
(a : A),
(w1, (k1, a)) ∈md t /\
(w2, (j, a2)) ∈md btgd j f k1 (w1, a) /\
wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md btgd j f k1 (w1, a) hyp3: wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md btgd j f k1 (w1, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md btgd j f k1 (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w1, (k1, a)) ∈md t /\
(w2, (k1, a2)) ∈md f (w1, a) /\ w1 ● w2 = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w1, (k1, a)) ∈md 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w2, (k1, a2)) ∈md f (w1, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
w1 ● w2 = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w1, (k1, a)) ∈md t
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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w2, (k1, a2)) ∈md f (w1, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
w1 ● w2 = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w2, (k1, a2)) ∈md f (w1, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md f (w1, a) DESTR_EQs: k1 = k1
(w2, (k1, a2)) ∈md f (w1, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
w1 ● w2 = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 k1: K f: W * A -> T k1 A t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (k1, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
w1 ● w2 = w1 ● w2
reflexivity.}
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md btgd j f k1 (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md (mret T k1 ∘ extract) (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (j, a2)) ∈md mret T k1 a DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: w2 = Ƶ /\ k1 = j /\ a = a2 DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t H1: w2 = Ƶ H2: k1 = j H3: a = a2 DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A w1: W hyp1: (w1, (j, a2)) ∈md t DESTR_NEQs, DESTR_NEQ: j <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2) ->
(wtotal, (j, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2) ->
(wtotal, (j, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A hyp: (w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2
(wtotal, (j, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A H1: (w1, (j, a1)) ∈md t H2: (w2, (j, a2)) ∈md f (w1, a1) H3: wtotal = w1 ● w2
(wtotal, (j, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A H1: (w1, (j, a1)) ∈md t H2: (w2, (j, a2)) ∈md f (w1, a1) H3: wtotal = w1 ● w2
(wtotal, (j, a2)) ∈md mbindd U (btgd j f) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A H1: (w1, (j, a1)) ∈md t H2: (w2, (j, a2)) ∈md f (w1, a1) H3: wtotal = w1 ● w2
exists (k1 : K) (w1w2 : W) (a : A),
(w1, (k1, a)) ∈md t /\
(w2, (j, a2)) ∈md btgd j f k1 (w1, a) /\
wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A H1: (w1, (j, a1)) ∈md t H2: (w2, (j, a2)) ∈md f (w1, a1) H3: wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A H1: (w1, (j, a1)) ∈md t H2: (w2, (j, a2)) ∈md f (w1, a1) H3: wtotal = w1 ● w2
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbindd U j f t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbindd U j f t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
split; auto using inmd_kbindd_eq_iff1, inmd_kbindd_eq_iff2.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbindd U j f t ->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbindd U j f t ->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md mbindd U (btgd j f) t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: exists (k1 : K)
(w1w2 : W)
(a : A),
(w1, (k1, a)) ∈md t /\
(w2, (i, a2)) ∈md btgd j f k1 (w1, a) /\
wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd j f k1 (w1, a) hyp3: wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd j f k1 (w1, 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 i, k1: K f: W * A -> T k1 A Hneq: k1 <> i t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd j f k1 (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 i, k1: K f: W * A -> T k1 A Hneq: k1 <> i t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 i, k1: K f: W * A -> T k1 A Hneq: k1 <> i t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 i, k1: K f: W * A -> T k1 A Hneq: k1 <> i t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd k1 f k1 (w1, a) DESTR_EQs: k1 = k1
(w1, (k1, a)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a) /\ w1 ● w2 = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, 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 i, k1: K f: W * A -> T k1 A Hneq: k1 <> i t: U A a2: A w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a) DESTR_EQs: k1 = k1
(w1, (k1, a)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a) /\ w1 ● w2 = w1 ● w2
splits; auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd j f k1 (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md btgd j f k1 (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
(w1 ● w2, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md (mret T k1 ∘ extract) (w1, a) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
(w1 ● w2, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md mret T k1 (extract (w1, a)) DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
(w1 ● w2, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: (w2, (i, a2)) ∈md mret T k1 a DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
(w1 ● w2, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A k1: K w1, w2: W a: A hyp1: (w1, (k1, a)) ∈md t hyp2: w2 = Ƶ /\ k1 = i /\ a = a2 DESTR_NEQ: j <> k1 DESTR_NEQs: k1 <> j
(w1 ● w2, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1: W hyp1: (w1, (i, a2)) ∈md t DESTR_NEQs: i <> j DESTR_NEQ: j <> i
(w1 ● Ƶ, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1: W hyp1: (w1, (i, a2)) ∈md t DESTR_NEQs: i <> j DESTR_NEQ: j <> i
(w1, (i, a2)) ∈md t
auto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2) ->
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2) ->
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\
wtotal = w1 ● w2)
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\
wtotal = w1 ● w2
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
exists (k1 : K) (w1w2 : W) (a : A),
(w1, (k1, a)) ∈md t /\
(w2, (i, a2)) ∈md btgd j f k1 (w1, a) /\
wtotal = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(wtotal, (i, a2)) ∈md t /\
(Ƶ, (i, a2)) ∈md btgd j f i (wtotal, a2) /\
wtotal = wtotal ● Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(wtotal, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(Ƶ, (i, a2)) ∈md btgd j f i (wtotal, 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 j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
wtotal = wtotal ● Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(wtotal, (i, a2)) ∈md t
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(Ƶ, (i, a2)) ∈md btgd j f i (wtotal, 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 j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
wtotal = wtotal ● Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(Ƶ, (i, a2)) ∈md btgd j f i (wtotal, 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 j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(Ƶ, (i, a2)) ∈md (mret T i ∘ extract) (wtotal, 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 j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
(Ƶ, (i, a2)) ∈md mret T i a2
rewrite inmd_mret_iff; auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
wtotal = wtotal ● Ƶ
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: (wtotal, (i, a2)) ∈md t
wtotal = wtotal ● Ƶ
now simpl_monoid.}
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A hyp: exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\
wtotal = w1 ● w2
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A wtotal: W a2: A w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1) hyp3: wtotal = w1 ● w2
(wtotal, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1)
(w1 ● w2, (i, a2)) ∈md kbindd U j f t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1)
exists (k1 : K) (w3w4 : W) (a : A),
(w3, (k1, a)) ∈md t /\
(w4, (i, a2)) ∈md btgd j f k1 (w3, a) /\
w1 ● w2 = w3 ● w4
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbindd U j f t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbindd U j f t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ wtotal = w1 ● w2)
split; auto using inmd_kbindd_neq_iff1, inmd_kbindd_neq_iff2.Qed.(** *** Corollaries for <<kbind>>, <<kmapd>>, and <<kmap>>*)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbind U j f t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (j, a2)) ∈md kbind U j f t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A wtotal: W a2: A
(wtotal, (j, a2)) ∈md kbind U j f t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A wtotal: W a2: A
(wtotal, (j, a2)) ∈md kbindd U j (f ∘ extract) t <->
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
nowrewrite (inmd_kbindd_eq_iff).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbind U j f t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> T j A) (t : U A) (wtotal : W)
(a2 : A),
(wtotal, (i, a2)) ∈md kbind U j f t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A wtotal: W a2: A
(wtotal, (i, a2)) ∈md kbind U j f t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A wtotal: W a2: A
(wtotal, (i, a2)) ∈md kbindd U j (f ∘ extract) t <->
(wtotal, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f a1 /\ wtotal = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A wtotal: W a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A wtotal: W a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A wtotal: W a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> A) (t : U A) (w : W) (a2 : A),
(w, (j, a2)) ∈md kmapd U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> A) (t : U A) (w : W) (a2 : A),
(w, (j, a2)) ∈md kmapd U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A w: W a2: A
(w, (j, a2)) ∈md kmapd U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A w: W a2: A
(w, (j, a2)) ∈md mmapd U (tgtd j f) t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A w: W a2: A
(existsa : A,
(w, (j, a)) ∈md t /\ a2 = tgtd j f j (w, a)) <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f (w, a1))
nowrewrite tgtd_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> A) (t : U A) (w : W) (a2 : A),
(w, (i, a2)) ∈md kmapd U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> A) (t : U A) (w : W) (a2 : A),
(w, (i, a2)) ∈md kmapd U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md kmapd U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md mmapd U (tgtd j f) t <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(existsa : A,
(w, (i, a)) ∈md t /\ a2 = tgtd j f i (w, a)) <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(existsa : A,
(w, (i, a)) ∈md t /\ a2 = extract (w, a)) <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = a) <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = a) ->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md t ->
existsa : A, (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = a) ->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a: A hyp: (w, (i, a)) ∈md t
(w, (i, a)) ∈md t
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md t ->
existsa : A, (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a2: A hyp: (w, (i, a2)) ∈md t
existsa : A, (w, (i, a)) ∈md t /\ a2 = a
now (existsa2).Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (t : U A) (w : W) (a2 : A),
(w, (j, a2)) ∈md kmap U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (t : U A) (w : W) (a2 : A),
(w, (j, a2)) ∈md kmap U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A w: W a2: A
(w, (j, a2)) ∈md kmap U j f t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A w: W a2: A
(w, (j, a2)) ∈md mmap U (tgt j f) t <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A w: W a2: A
(existsa : A, (w, (j, a)) ∈md t /\ a2 = tgt j f j a) <->
(existsa1 : A, (w, (j, a1)) ∈md t /\ a2 = f a1)
nowrewrite tgt_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (t : U A) (w : W) (a2 : A),
(w, (i, a2)) ∈md kmap U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (t : U A) (w : W) (a2 : A),
(w, (i, a2)) ∈md kmap U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md kmap U j f t <-> (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md mmap U (tgt j f) t <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = tgt j f i a) <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = id a) <->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = id a) ->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md t ->
existsa : A, (w, (i, a)) ∈md t /\ a2 = id a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(existsa : A, (w, (i, a)) ∈md t /\ a2 = id a) ->
(w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a: A hyp: (w, (i, a)) ∈md t
(w, (i, id a)) ∈md t
auto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A
(w, (i, a2)) ∈md t ->
existsa : A, (w, (i, a)) ∈md t /\ a2 = id a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A w: W a2: A hyp: (w, (i, a2)) ∈md t
existsa : A, (w, (i, a)) ∈md t /\ a2 = id a
now (existsa2).Qed.(** *** Occurrences without context *)(********************************************************************)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (a2 : A),
(j, a2) ∈m kbindd U j f t <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (j, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> T j A) (t : U A) (a2 : A),
(j, a2) ∈m kbindd U j f t <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (j, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(j, a2) ∈m kbindd U j f t <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (j, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(existsw : W, (w, (j, a2)) ∈md kbindd U j f t) <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (j, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(existsw : W, (w, (j, a2)) ∈md kbindd U j f t) <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(exists (ww1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2) <->
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1)))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(exists (ww1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2) ->
exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1))) ->
exists (ww1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(exists (ww1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2) ->
exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A w, w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (j, a2)) ∈md f (w1, a1) hyp3: w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A w, w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (j, a2)) ∈md f (w1, a1) hyp3: w = w1 ● w2
existsa3 : A,
(?w1, (j, a3)) ∈md t /\
(existsw0 : W, (w0, (j, a2)) ∈md f (?w1, a3))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A w, w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (j, a2)) ∈md f (w1, a1) hyp3: w = w1 ● w2
(?w1, (j, ?a1)) ∈md t /\
(existsw0 : W, (w0, (j, a2)) ∈md f (?w1, ?a1))
split; eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (j, a2)) ∈md f (w1, a1))) ->
exists (ww1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> T j A t: U A a2: A w: W a1: A hyp1: (w, (j, a1)) ∈md t w2: W hyp2: (w2, (j, a2)) ∈md f (w, a1)
exists (ww1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (j, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
repeateexists; eauto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (a2 : A),
(i, a2) ∈m kbindd U j f t <->
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (i, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> T j A) (t : U A) (a2 : A),
(i, a2) ∈m kbindd U j f t <->
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (i, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
(i, a2) ∈m kbindd U j f t <->
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (i, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
(existsw : W, (w, (i, a2)) ∈md kbindd U j f t) <->
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (i, a2) ∈m f (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
existsw : W, (w, (i, a2)) ∈md t
eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w, w1, w2: W a1: A hyp1: (w1, (j, a1)) ∈md t hyp2: (w2, (i, a2)) ∈md f (w1, a1) hyp3: w = w1 ● w2
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A hyp: existsw : W, (w, (i, a2)) ∈md t
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (i, a2)) ∈md f (w1, a1))
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A hyp: existsw : W, (w, (i, a2)) ∈md t
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
(?w, (i, a2)) ∈md t
eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(existsw : W, (w, (i, a2)) ∈md f (w1, a1))
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1: W a1: A hyp1: (w1, (j, a1)) ∈md t w2: W hyp2: (w2, (i, a2)) ∈md f (w1, a1)
existsw : W,
(w, (i, a2)) ∈md t \/
(exists (w1w2 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(w2, (i, a2)) ∈md f (w1, a1) /\ w = w1 ● w2)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1: W a1: A hyp1: (w1, (j, a1)) ∈md t w2: W hyp2: (w2, (i, a2)) ∈md f (w1, a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> T j A t: U A a2: A w1: W a1: A hyp1: (w1, (j, a1)) ∈md t w2: W hyp2: (w2, (i, a2)) ∈md f (w1, a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> T j A) (t : U A) (a2 : A),
(j, a2) ∈m kbind U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ (j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> T j A) (t : U A) (a2 : A),
(j, a2) ∈m kbind U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ (j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
(j, a2) ∈m kbind U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ (j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
(j, a2) ∈m kbindd U j (f ∘ extract) t <->
(existsa1 : A, (j, a1) ∈m t /\ (j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(j, a2) ∈m (f ∘ extract) (w1, a1)) <->
(existsa1 : A, (j, a1) ∈m t /\ (j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(j, a2) ∈m f (extract (w1, a1))) <->
(existsa1 : A,
(existsw : W, (w, (j, a1)) ∈md t) /\
(j, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> T j A t: U A a2: A
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\ (j, a2) ∈m f a1) <->
(existsa1 : A,
(existsw : W, (w, (j, a1)) ∈md t) /\
(j, a2) ∈m f a1)
firstorder.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> T j A) (t : U A) (a2 : A),
(i, a2) ∈m kbind U j f t <->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> T j A) (t : U A) (a2 : A),
(i, a2) ∈m kbind U j f t <->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m kbind U j f t <->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m kbindd U j (f ∘ extract) t <->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)) <->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)) ->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1) ->
(i, a2) ∈m t \/
(exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)) ->
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: (i, a2) ∈m t
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: (i, a2) ∈m t
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
nowleft.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1)
existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m f (extract (w1, a1))
existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: exists (w1 : W)
(a1 : A), (w1, (j, a1)) ∈md t /\ (i, a2) ∈m f a1
existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A x: W a1: A hyp1: (x, (j, a1)) ∈md t hyp2: (i, a2) ∈m f a1
existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A x: W a1: A hyp1: (j, a1) ∈m t hyp2: (i, a2) ∈m f a1
existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A
(i, a2) ∈m t \/
(existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1) ->
(i, a2) ∈m t \/
(exists (w1 : W) (a1 : A),
(w1, (j, a1)) ∈md t /\
(i, a2) ∈m (f ∘ extract) (w1, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2: A hyp: existsa1 : A, (j, a1) ∈m t /\ (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2, a1: A hyp1: (j, a1) ∈m t hyp2: (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2, a1: A hyp1: existsw : W, (w, (j, a1)) ∈md t hyp2: (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2, a1: A w1: W hyp1: (w1, (j, a1)) ∈md t hyp2: (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> T j A t: U A a2, a1: A w1: W hyp1: (w1, (j, a1)) ∈md t hyp2: (i, a2) ∈m f a1
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> A) (t : U A) (a2 : A),
(j, a2) ∈m kmapd U j f t <->
(exists (w : W) (a1 : A),
(w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : W * A -> A) (t : U A) (a2 : A),
(j, a2) ∈m kmapd U j f t <->
(exists (w : W) (a1 : A),
(w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A a2: A
(j, a2) ∈m kmapd U j f t <->
(exists (w : W) (a1 : A),
(w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A a2: A
(j, a2) ∈m mmapd U (tgtd j f) t <->
(exists (w : W) (a1 : A),
(w, (j, a1)) ∈md t /\ a2 = f (w, a1))
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: W * A -> A t: U A a2: A
(exists (w : W) (a : A),
(w, (j, a)) ∈md t /\ a2 = tgtd j f j (w, a)) <->
(exists (w : W) (a1 : A),
(w, (j, a1)) ∈md t /\ a2 = f (w, a1))
nowrewrite tgtd_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> A) (t : U A) (a2 : A),
(i, a2) ∈m kmapd U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : W * A -> A) (t : U A) (a2 : A),
(i, a2) ∈m kmapd U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(i, a2) ∈m kmapd U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(i, a2) ∈m mmapd U (tgtd j f) t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(exists (w : W) (a : A),
(w, (i, a)) ∈md t /\ a2 = tgtd j f i (w, a)) <->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(exists (w : W) (a : A),
(w, (i, a)) ∈md t /\ a2 = extract (w, a)) <->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a) <->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a) ->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(i, a2) ∈m t ->
exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a) ->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A w: W a: A hyp: (w, (i, a)) ∈md t
(i, a) ∈m t
eapply inmd_implies_in; eauto.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A
(i, a2) ∈m t ->
exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A hyp: (i, a2) ∈m t
exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A hyp: existsw : W, (w, (i, a2)) ∈md t
exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: W * A -> A t: U A a2: A w: W hyp: (w, (i, a2)) ∈md t
exists (w : W) (a : A), (w, (i, a)) ∈md t /\ a2 = a
eauto.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (t : U A) (a2 : A),
(j, a2) ∈m kmap U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
forall (f : A -> A) (t : U A) (a2 : A),
(j, a2) ∈m kmap U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A a2: A
(j, a2) ∈m kmap U j f t <->
(existsa1 : A, (j, a1) ∈m t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A a2: A
(j, a2) ∈m mmap U (tgt j f) t <->
(existsa1 : A, (j, a1) ∈m t /\ a2 = f a1)
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type f: A -> A t: U A a2: A
(existsa : A, (j, a) ∈m t /\ a2 = tgt j f j a) <->
(existsa1 : A, (j, a1) ∈m t /\ a2 = f a1)
nowrewrite tgt_eq.Qed.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (t : U A) (a2 : A),
(i, a2) ∈m kmap U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type
foralli : K,
j <> i ->
forall (f : A -> A) (t : U A) (a2 : A),
(i, a2) ∈m kmap U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(i, a2) ∈m kmap U j f t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(i, a2) ∈m mmap U (tgt j f) t <-> (i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(existsa : A, (i, a) ∈m t /\ a2 = tgt j f i a) <->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(existsa : A, (i, a) ∈m t /\ a2 = id a) <->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(existsa : A, (i, a) ∈m t /\ a2 = id a) ->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(i, a2) ∈m t -> existsa : A, (i, a) ∈m t /\ a2 = id a
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(existsa : A, (i, a) ∈m t /\ a2 = id a) ->
(i, a2) ∈m t
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a: A hyp: (i, a) ∈m t
(i, id a) ∈m t
assumption.
U: Type -> Type ix: Index W: Type T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind W T U H: forallk : K, MBind W T (T k) mn_op: Monoid_op W mn_unit: Monoid_unit W H0: MultiDecoratedTraversablePreModule W T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
W T j: K A: Type i: K Hneq: j <> i f: A -> A t: U A a2: A
(i, a2) ∈m t -> existsa : A, (i, a) ∈m t /\ a2 = id a
intros; now (existsa2).Qed.EndDTM_membership_targetted.