Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
From Tealeaves Require Export
  Classes.Kleisli.Theory.DecoratedContainerFunctor
  Classes.Kleisli.DecoratedContainerMonad.

Import Monoid.Notations.
Import Functor.Notations.
Import Subset.Notations.
Import List.ListNotations.
Import ContainerFunctor.Notations.
Import DecoratedContainerFunctor.Notations.

#[local] Generalizable Variables A T U W.


(** * Basic properties of containers *)
(**********************************************************************)
Section decorated_container_monad_theory.

  Context
    `{op: Monoid_op W}
    `{unit: Monoid_unit W}.

  Context
    `{ret_inst: Return T}
    `{Bindd_T_inst: Bindd W T T}
    `{Mapd_T_inst: Mapd W T}
    `{Bind_T_inst: Bind T T}
    `{Map_T_inst: Map T}
    `{Map_Bindd_T_inst: ! Compat_Map_Bindd W T T}
    `{Bind_Bindd_T_inst: ! Compat_Bind_Bindd W T T}
    `{Mapd_Bindd_T_inst: ! Compat_Mapd_Bindd W T T}.

  Context
    `{ToCtxset_T_inst: ToCtxset W T}
    `{ToSubset_T_inst: ToSubset T}
    `{! Compat_ToSubset_ToCtxset W T}
    `{! DecoratedContainerMonad W T}.

  Context
    `{Mapd_U_inst: Mapd W U}
    `{Bind_U_inst: Bind T U}
    `{Map_U_inst: Map U}
    `{Bindd_U_inst: Bindd W T U}
    `{Map_Bindd_inst: ! Compat_Map_Bindd W T U}
    `{Bind_Bindd_inst: ! Compat_Bind_Bindd W T U}
    `{Mapd_Bindd_inst: ! Compat_Mapd_Bindd W T U}.

  Context
    `{ToCtxset_U_inst: ToCtxset W U}
    `{ToSubset_U_inst: ToSubset U}
    `{! Compat_ToSubset_ToCtxset W U}
    `{Module_inst: ! DecoratedContainerRightModule W T U}.

  Variables (A B: Type).

  Implicit Types (t: U A) (b: B) (w: W) (a: A).

  
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall A : Type, toctxset ∘ ret = ret
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall A : Type, toctxset ∘ ret = ret
apply kdm_hom_ret. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (f : W * A -> T B), toctxset ∘ bindd f = bindd (toctxset ∘ f) ∘ toctxset
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (f : W * A -> T B), toctxset ∘ bindd f = bindd (toctxset ∘ f) ∘ toctxset
apply kdmod_parhom_bind. Qed. Section ind_spec.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A : Type) w (a1 a2 : A), (w, a1) ∈d ret a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A : Type) w (a1 a2 : A), (w, a1) ∈d ret a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

(w, a1) ∈d ret a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

(element_ctx_of (w, a1) ∘ ret) a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

(evalAt (w, a1) ∘ toctxset ∘ ret) a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

(evalAt (w, a1) ∘ (toctxset ∘ ret)) a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

(evalAt (w, a1) ∘ ret) a2 <-> w = Ƶ /\ a1 = a2
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
w: W
a1, a2: A0

a2 = a1 /\ w = Ƶ <-> w = Ƶ /\ a1 = a2
intuition. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : W * A -> T B) b, (w, b) ∈d bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : W * A -> T B) b, (w, b) ∈d bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: W * A -> T B
b: B

(w, b) ∈d bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: W * A -> T B
b: B

(element_ctx_of (w, b) ∘ bindd f) t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: W * A -> T B
b: B

(evalAt (w, b) ∘ toctxset ∘ bindd f) t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: W * A -> T B
b: B

(evalAt (w, b) ∘ (toctxset ∘ bindd f)) t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: W * A -> T B
b: B

(evalAt (w, b) ∘ (bindd (toctxset ∘ f) ∘ toctxset)) t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ w = wa ● wb))
reflexivity. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (f : W * A -> T B) t (wtotal : W) b, (wtotal, b) ∈d bindd f t <-> (exists w1 w2 a, (w1, a) ∈d t /\ (w2, b) ∈d f (w1, a) /\ wtotal = w1 ● w2)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (f : W * A -> T B) t (wtotal : W) b, (wtotal, b) ∈d bindd f t <-> (exists w1 w2 a, (w1, a) ∈d t /\ (w2, b) ∈d f (w1, a) /\ wtotal = w1 ● w2)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
f: W * A -> T B
t: U A
wtotal: W
b: B

(wtotal, b) ∈d bindd f t <-> (exists w1 w2 a, (w1, a) ∈d t /\ (w2, b) ∈d f (w1, a) /\ wtotal = w1 ● w2)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
f: W * A -> T B
t: U A
wtotal: W
b: B

(exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ wtotal = wa ● wb)) <-> (exists w1 w2 a, (w1, a) ∈d t /\ (w2, b) ∈d f (w1, a) /\ wtotal = w1 ● w2)
splits; intros ?; preprocess; (repeat eexists); eauto. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : A -> T B) b, (w, b) ∈d bind f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : A -> T B) b, (w, b) ∈d bind f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: A -> T B
b: B

(w, b) ∈d bind f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: A -> T B
b: B

(w, b) ∈d bindd (f ∘ extract) t <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: A -> T B
b: B

(exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d (f ∘ extract) (wa, a) /\ w = wa ● wb)) <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb))
reflexivity. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : A -> T B) b, (w, b) ∈d bind f t <-> (exists (wa wb : W) a, (wa, a) ∈d t /\ (wb, b) ∈d f a /\ w = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall w t (f : A -> T B) b, (w, b) ∈d bind f t <-> (exists (wa wb : W) a, (wa, a) ∈d t /\ (wb, b) ∈d f a /\ w = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: A -> T B
b: B

(w, b) ∈d bind f t <-> (exists (wa wb : W) a, (wa, a) ∈d t /\ (wb, b) ∈d f a /\ w = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
w: W
t: U A
f: A -> T B
b: B

(exists (wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f a /\ w = wa ● wb)) <-> (exists (wa wb : W) a, (wa, a) ∈d t /\ (wb, b) ∈d f a /\ w = wa ● wb)
splits; intros ?; preprocess; (repeat eexists); eauto. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall t (f : W * A -> T B) b, b ∈ bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ b ∈ f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall t (f : W * A -> T B) b, b ∈ bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ b ∈ f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

b ∈ bindd f t <-> (exists (wa : W) a, (wa, a) ∈d t /\ b ∈ f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists e : W, (e, b) ∈d bindd f t) <-> (exists (wa : W) a, (wa, a) ∈d t /\ b ∈ f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)) <-> (exists (wa : W) a, (wa, a) ∈d t /\ b ∈ f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)) <-> (exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a)))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)) -> exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B
(exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a))) -> exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)) -> exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a))
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B
w, wa: W
a: A
Hin: (wa, a) ∈d t
wb: W
Hin': (wb, b) ∈d f (wa, a)
Heq: w = wa ● wb

exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a))
eauto.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B

(exists (wa : W) a, (wa, a) ∈d t /\ (exists e : W, (e, b) ∈d f (wa, a))) -> exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B
wa: W
a: A
Hin: (wa, a) ∈d t
w: W
rest: (w, b) ∈d f (wa, a)

exists (e wa : W) a, (wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ e = wa ● wb)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type
t: U A
f: W * A -> T B
b: B
wa: W
a: A
Hin: (wa, a) ∈d t
w: W
rest: (w, b) ∈d f (wa, a)

(wa, a) ∈d t /\ (exists wb : W, (wb, b) ∈d f (wa, a) /\ wa ● w = wa ● wb)
eauto. Qed. End ind_spec. (*******************************************************************)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f g : W * A -> T B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = g (w, a)) -> bindd f t = bindd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f g : W * A -> T B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = g (w, a)) -> bindd f t = bindd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f, g: W * A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g (w, a)

bindd f t = bindd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f, g: W * A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g (w, a)

forall (e : W) (a : A0), (e, a) ∈d t -> f (e, a) = g (e, a)
assumption. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : A -> T B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = g a) -> bindd f t = bind g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : A -> T B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = g a) -> bindd f t = bind g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g a

bindd f t = bind g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g a

bindd f t = bindd (g ∘ extract) t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g a

forall w (a : A0), (w, a) ∈d t -> f (w, a) = (g ∘ extract) (w, a)
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> T B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = g a
w: W
a: A0
Hin: (w, a) ∈d t

f (w, a) = (g ∘ extract) (w, a)
eauto. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : W * A -> B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret (g (w, a))) -> bindd f t = mapd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : W * A -> B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret (g (w, a))) -> bindd f t = mapd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: W * A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g (w, a))

bindd f t = mapd g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: W * A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g (w, a))

bindd f t = bindd (ret ∘ g) t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: W * A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g (w, a))

forall w (a : A0), (w, a) ∈d t -> f (w, a) = (ret ∘ g) (w, a)
assumption. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : A -> B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret (g a)) -> bindd f t = map g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A B : Type) (t : U A) (f : W * A -> T B) (g : A -> B), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret (g a)) -> bindd f t = map g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g a)

bindd f t = map g t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g a)

bindd f t = bindd (ret ∘ g ∘ extract) t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0, B0: Type
t: U A0
f: W * A0 -> T B0
g: A0 -> B0
hyp: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret (g a)

forall w (a : A0), (w, a) ∈d t -> f (w, a) = (ret ∘ g ∘ extract) (w, a)
assumption. Qed.
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A : Type) (t : U A) (f : W * A -> T A), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret a) -> bindd f t = t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B: Type

forall (A : Type) (t : U A) (f : W * A -> T A), (forall w (a : A), (w, a) ∈d t -> f (w, a) = ret a) -> bindd f t = t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
t: U A0
f: W * A0 -> T A0
H: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret a

bindd f t = t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
t: U A0
f: W * A0 -> T A0
H: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret a

bindd f t = id t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
t: U A0
f: W * A0 -> T A0
H: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret a

bindd f t = bindd (ret ∘ extract) t
W: Type
op: Monoid_op W
unit: Monoid_unit W
T: Type -> Type
ret_inst: Return T
Bindd_T_inst: Bindd W T T
Mapd_T_inst: Mapd W T
Bind_T_inst: Bind T T
Map_T_inst: Map T
Map_Bindd_T_inst: Compat_Map_Bindd W T T
Bind_Bindd_T_inst: Compat_Bind_Bindd W T T
Mapd_Bindd_T_inst: Compat_Mapd_Bindd W T T
ToCtxset_T_inst: ToCtxset W T
ToSubset_T_inst: ToSubset T
Compat_ToSubset_ToCtxset0: Compat_ToSubset_ToCtxset W T
DecoratedContainerMonad0: DecoratedContainerMonad W T
U: Type -> Type
Mapd_U_inst: Mapd W U
Bind_U_inst: Bind T U
Map_U_inst: Map U
Bindd_U_inst: Bindd W T U
Map_Bindd_inst: Compat_Map_Bindd W T U
Bind_Bindd_inst: Compat_Bind_Bindd W T U
Mapd_Bindd_inst: Compat_Mapd_Bindd W T U
ToCtxset_U_inst: ToCtxset W U
ToSubset_U_inst: ToSubset U
Compat_ToSubset_ToCtxset1: Compat_ToSubset_ToCtxset W U
Module_inst: DecoratedContainerRightModule W T U
A, B, A0: Type
t: U A0
f: W * A0 -> T A0
H: forall w (a : A0), (w, a) ∈d t -> f (w, a) = ret a

forall w (a : A0), (w, a) ∈d t -> f (w, a) = (ret ∘ extract) (w, a)
eauto. Qed. End decorated_container_monad_theory. (** ** Instance for <<env>> *) (* TODO *) (**********************************************************************) (* #[export] Instance DecoratedContainerMonad_env `{Monoid W}: DecoratedContainerMonad W (env W). Proof. constructor. - admit. - intros. ext l. unfold compose. induction l as [| [w a] rest IHrest]. + cbn. unfold_ops @ToCtxset_env. autorewrite with tea_list. rewrite bindd_ctxset_nil. reflexivity. + change (bindd f ((w, a) :: rest)) with (shift list (w, f (w, a)) ++ bindd f rest). cbn. unfold_ops @ToCtxset_env. autorewrite with tea_list. change (tosubset (A := W * ?A)) with (toctxset (F := env W) (A := A)). rewrite bindd_ctxset_add. rewrite bindd_ctxset_one. rewrite <- IHrest. fequal. rewrite (DecoratedFunctor.shift_spec). 2:admit. compose near (f (w, a)). rewrite (fun_map_map). Abort. *)