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.

Multisorted locally nameless infrastructure

Basic properties of operations

From Tealeaves.Backends.Common Require Import
  Names AtomSet.
From Tealeaves.Misc Require Import
  NaturalNumbers.
From Tealeaves.Theory Require Import
  DecoratedTraversableMonad (* Mostly for the imports *)
  Multisorted.DecoratedTraversableMonad.

Import
  Product.Notations
  Monoid.Notations
  List.ListNotations
  Subset.Notations
  Kleisli.Monad.Notations
  Kleisli.Comonad.Notations
  ContainerFunctor.Notations
  DecoratedMonad.Notations
  DecoratedContainerFunctor.Notations
  DecoratedTraversableMonad.Notations
  AtomSet.Notations
  DecoratedTraversableMonad.Notations
  Functors.Multisorted.Batch.Notations
  Theory.Container.Notations
  Categories.TypeFamily.Notations.

#[local] Open Scope nat_scope. (* Let <<x + y>> be addition, not sum type. *)
#[local] Open Scope set_scope. (* Don't confuse with Functors/Subset.v *)
#[local] Generalizable Variable T.

(** * Binders contexts **)
(** We assume that binder contexts are lists of tagged values of type
    <<unit>>, which are just tags themselves. *)
(******************************************************************************)
Section operations_on_context.

  Context
    `{Index}.

  Fixpoint countk (j : K) (l : list K) : nat :=
    match l with
    | nil => 0
    | cons k rest =>
      (if j == k then 1 else 0) + countk j rest
    end.

  
H: Index

forall j : K, countk j [] = 0
H: Index

forall j : K, countk j [] = 0
easy. Qed.
H: Index

forall j : K, countk j [j] = 1
H: Index

forall j : K, countk j [j] = 1
H: Index
j: K

countk j [j] = 1
H: Index
j: K

(if j == j then 1 else 0) + 0 = 1
compare values j and j. Qed.
H: Index

forall j k : K, j <> k -> countk j [k] = 0
H: Index

forall j k : K, j <> k -> countk j [k] = 0
H: Index
j, k: K
H0: j <> k

countk j [k] = 0
H: Index
j, k: K
H0: j <> k

(if j == k then 1 else 0) + 0 = 0
compare values j and k. Qed.
H: Index

forall (j : K) (l : list K), countk j (j :: l) = S (countk j l)
H: Index

forall (j : K) (l : list K), countk j (j :: l) = S (countk j l)
H: Index
j: K
l: list K

countk j (j :: l) = S (countk j l)
H: Index
j: K
l: list K

(if j == j then 1 else 0) + countk j l = S (countk j l)
compare values j and j. Qed.
H: Index

forall (j k : K) (l : list K), j <> k -> countk j (k :: l) = countk j l
H: Index

forall (j k : K) (l : list K), j <> k -> countk j (k :: l) = countk j l
H: Index
j, k: K
l: list K
H0: j <> k

countk j (k :: l) = countk j l
H: Index
j, k: K
l: list K
H0: j <> k

(if j == k then 1 else 0) + countk j l = countk j l
compare values j and k. Qed.
H: Index

forall (j : K) (l1 l2 : list K), countk j (l1 ++ l2) = countk j l1 + countk j l2
H: Index

forall (j : K) (l1 l2 : list K), countk j (l1 ++ l2) = countk j l1 + countk j l2
H: Index
j: K
l1, l2: list K

countk j (l1 ++ l2) = countk j l1 + countk j l2
H: Index
j: K
l2: list K

countk j ([] ++ l2) = countk j [] + countk j l2
H: Index
j, a: K
l1, l2: list K
IHl1: countk j (l1 ++ l2) = countk j l1 + countk j l2
countk j ((a :: l1) ++ l2) = countk j (a :: l1) + countk j l2
H: Index
j: K
l2: list K

countk j ([] ++ l2) = countk j [] + countk j l2
easy.
H: Index
j, a: K
l1, l2: list K
IHl1: countk j (l1 ++ l2) = countk j l1 + countk j l2

countk j ((a :: l1) ++ l2) = countk j (a :: l1) + countk j l2
H: Index
j, a: K
l1, l2: list K
IHl1: countk j (l1 ++ l2) = countk j l1 + countk j l2

(if j == a then 1 else 0) + countk j (l1 ++ l2) = (if j == a then 1 else 0) + countk j l1 + countk j l2
H: Index
a: K
l1, l2: list K
IHl1: countk a (l1 ++ l2) = countk a l1 + countk a l2
DESTR_EQs: a = a

1 + countk a (l1 ++ l2) = 1 + countk a l1 + countk a l2
now rewrite IHl1. Qed. End operations_on_context. (** * Locally nameless variables *) (******************************************************************************) Inductive LN := | Fr : atom -> LN | Bd : nat -> LN.

forall l1 l2 : LN, {l1 = l2} + {l1 <> l2}

forall l1 l2 : LN, {l1 = l2} + {l1 <> l2}
l1, l2: LN
n, n0: atom

{n = n0} + {n <> n0}
l1, l2: LN
n, n0: nat
{n = n0} + {n <> n0}
l1, l2: LN
n, n0: atom

{n = n0} + {n <> n0}
compare values n and n0; auto.
l1, l2: LN
n, n0: nat

{n = n0} + {n <> n0}
compare values n and n0; auto. Qed. #[export] Instance EqDec_LN : EquivDec.EqDec LN eq := eq_dec_LN.

forall (x : atom) (l : LN) (P : LN -> Prop), P (Fr x) -> (forall a : atom, a <> x -> P (Fr a)) -> (forall n : nat, P (Bd n)) -> P l

forall (x : atom) (l : LN) (P : LN -> Prop), P (Fr x) -> (forall a : atom, a <> x -> P (Fr a)) -> (forall n : nat, P (Bd n)) -> P l
x: atom
l: LN
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)

P l
x, n: atom
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)

P (Fr n)
x: atom
n: nat
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)
P (Bd n)
x, n: atom
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)

P (Fr n)
x, n: atom
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)
DESTR_NEQ: x <> n
DESTR_NEQs: n <> x

P (Fr n)
auto.
x: atom
n: nat
P: LN -> Prop
case1: P (Fr x)
case2: forall a : atom, a <> x -> P (Fr a)
case3: forall n : nat, P (Bd n)

P (Bd n)
auto. Qed. Tactic Notation "compare" constr(l) "to" "atom" constr(x) := (induction l using (compare_to_atom x)). (** * Syntax operations for locally nameless *) (******************************************************************************) (** ** Local operations *) (******************************************************************************) Section local_operations. Context `{Index} `{MReturn T}. Implicit Types (x : atom) (k : K). Definition free_loc : LN -> list atom := fun l => match l with | Fr x => cons x List.nil | _ => List.nil end. Definition subst_loc k x (u : T k LN) : LN -> T k LN := fun l => match l with | Fr y => if x == y then u else mret T k (Fr y) | Bd n => mret T k (Bd n) end. Definition open_loc k (u : T k LN) : list K * LN -> T k LN := fun '(w, l) => match l with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Gt => mret T k (Bd (n - 1)) | Eq => u | Lt => mret T k (Bd n) end end. Definition is_opened : list K * (K * LN) -> Prop := fun '(w, (k, l)) => match l with | Fr y => False | Bd n => n = countk k w end. Definition close_loc k x : list K * LN -> LN := fun '(w, l) => match l with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Gt => Bd (S n) | Eq => Bd (S n) | Lt => Bd n end end. (** To define local closure we will take <<n = 0>>, but we can also consider more notions like ``local closure within a gap of 1 binder,'' which is useful for backend reasoning. **) Definition lc_loc k (gap : nat) : list K * LN -> Prop := fun '(w, l) => match l with | Fr x => True | Bd n => n < (countk k w) + gap end. End local_operations. (** ** Lifted operations *) (******************************************************************************) Section LocallyNamelessOperations. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Definition open k (u : T k LN) : U LN -> U LN := kbindd U k (open_loc k u). Definition close k x : U LN -> U LN := kmapd U k (close_loc k x). Definition subst k x (u : T k LN) : U LN -> U LN := kbind U k (subst_loc k x u). Definition free : K -> U LN -> list atom := fun k t => bind (T := list) free_loc (toklist U k t). Definition LCn k (gap : nat) : U LN -> Prop := fun t => forall (w : list K) (l : LN), (w, (k, l)) ∈md t -> lc_loc k gap (w, l). Definition LC k : U LN -> Prop := LCn k 0. Definition FV : K -> U LN -> AtomSet.t := fun k t => AtomSet.atoms (free k t). Definition scoped : K -> U LN -> AtomSet.t -> Prop := fun k t γ => FV k t ⊆ γ. End LocallyNamelessOperations. (** ** Notations for operations *) (******************************************************************************) Module Notations. Notation "t '{ k | x ~> u }" := (subst _ k x u t) (at level 35). Notation "t '( k | u )" := (open _ k u t) (at level 35). Notation "'[ k | x ] t" := (close _ k x t) (at level 35). Notation "( x , y , z )" := (pair x (pair y z)) : tealeaves_multi_scope. End Notations. Section test_notations. Import Notations. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Context (k j : K) (t1 : T k LN) (t2 : T j LN) (u : U LN) (x : atom) (n : nat).
u '{ k | x ~> t1} : U LN
u '( k | t1) : U LN
'[ k | x] u : U LN
u '{ j | x ~> t2} : U LN
u '( j | t2) : U LN
'[ j | x] u : U LN
The command has indeed failed with message: In environment U : Type -> Type ix : Index T : K -> Type -> Type MReturn0 : MReturn T MBind0 : MBind (list K) T U H : forall k : K, MBind (list K) T (T k) H0 : MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0 : MultiDecoratedTraversableMonad (list K) T k, j : K t1 : T k LN t2 : T j LN u : U LN x : atom n : nat Unable to unify "T k LN" with "?T j LN" (cannot unify "k" and "j").
The command has indeed failed with message: In environment U : Type -> Type ix : Index T : K -> Type -> Type MReturn0 : MReturn T MBind0 : MBind (list K) T U H : forall k : K, MBind (list K) T (T k) H0 : MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0 : MultiDecoratedTraversableMonad (list K) T k, j : K t1 : T k LN t2 : T j LN u : U LN x : atom n : nat Unable to unify "T k LN" with "?T j LN" (cannot unify "k" and "j").
End test_notations. Import Notations.
Section operations_specifications.

  Context
    (U : Type -> Type)
    `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)}
    `{! MultiDecoratedTraversableMonad (list K) T}.

  Implicit Types (l : LN) (w : list K) (t : U LN) (x : atom).

  (** ** Identity and equality lemmas for operations *)
  (******************************************************************************)

  (** *** For [open] *)
  (******************************************************************************)
  
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (u1 u2 : T k LN), (forall w l, (w, k, l) ∈md t -> open_loc k u1 (w, l) = open_loc k u2 (w, l)) -> t '( k | u1) = t '( k | u2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (u1 u2 : T k LN), (forall w l, (w, k, l) ∈md t -> open_loc k u1 (w, l) = open_loc k u2 (w, l)) -> t '( k | u1) = t '( k | u2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u1, u2: T k LN
hyp: forall w l, (w, k, l) ∈md t -> open_loc k u1 (w, l) = open_loc k u2 (w, l)

t '( k | u1) = t '( k | u2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u1, u2: T k LN
hyp: forall w l, (w, k, l) ∈md t -> open_loc k u1 (w, l) = open_loc k u2 (w, l)

kbindd U k (open_loc k u1) t = kbindd U k (open_loc k u2) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u1, u2: T k LN
hyp: forall w l, (w, k, l) ∈md t -> open_loc k u1 (w, l) = open_loc k u2 (w, l)

forall w (a : LN), (w, k, a) ∈md t -> open_loc k u1 (w, a) = open_loc k u2 (w, a)
auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (u : T k LN), (forall w l, (w, k, l) ∈md t -> open_loc k u (w, l) = mret T k l) -> t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (u : T k LN), (forall w l, (w, k, l) ∈md t -> open_loc k u (w, l) = mret T k l) -> t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: forall w l, (w, k, l) ∈md t -> open_loc k u (w, l) = mret T k l

t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: forall w l, (w, k, l) ∈md t -> open_loc k u (w, l) = mret T k l

kbindd U k (open_loc k u) t = t
now apply (kbindd_respectful_id k). Qed. (** *** For [subst] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x (u1 u2 : T k LN), (forall l, (k, l) ∈m t -> subst_loc k x u1 l = subst_loc k x u2 l) -> t '{ k | x ~> u1} = t '{ k | x ~> u2}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x (u1 u2 : T k LN), (forall l, (k, l) ∈m t -> subst_loc k x u1 l = subst_loc k x u2 l) -> t '{ k | x ~> u1} = t '{ k | x ~> u2}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
u1, u2: T k LN
hyp: forall l, (k, l) ∈m t -> subst_loc k x u1 l = subst_loc k x u2 l

t '{ k | x ~> u1} = t '{ k | x ~> u2}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
u1, u2: T k LN
hyp: forall l, (k, l) ∈m t -> subst_loc k x u1 l = subst_loc k x u2 l

kbind U k (subst_loc k x u1) t = kbind U k (subst_loc k x u2) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
u1, u2: T k LN
hyp: forall l, (k, l) ∈m t -> subst_loc k x u1 l = subst_loc k x u2 l

forall a : LN, (k, a) ∈m t -> subst_loc k x u1 a = subst_loc k x u2 a
auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x (u : T k LN), (forall l, (k, l) ∈m t -> subst_loc k x u l = mret T k l) -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x (u : T k LN), (forall l, (k, l) ∈m t -> subst_loc k x u l = mret T k l) -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
u: T k LN
H1: forall l, (k, l) ∈m t -> subst_loc k x u l = mret T k l

t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
u: T k LN
H1: forall l, (k, l) ∈m t -> subst_loc k x u l = mret T k l

kbind U k (subst_loc k x u) t = t
now apply kbind_respectful_id. Qed. (** *** For [close] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (x y : atom), (forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = close_loc k y (w, l)) -> '[ k | x] t = '[ k | y] t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t (x y : atom), (forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = close_loc k y (w, l)) -> '[ k | x] t = '[ k | y] t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
H1: forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = close_loc k y (w, l)

'[ k | x] t = '[ k | y] t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
H1: forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = close_loc k y (w, l)

kmapd U k (close_loc k x) t = kmapd U k (close_loc k y) t
now apply (kmapd_respectful). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x, (forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = l) -> '[ k | x] t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) t x, (forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = l) -> '[ k | x] t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = l

'[ k | x] t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: forall w l, (w, k, l) ∈md t -> close_loc k x (w, l) = l

kmapd U k (close_loc k x) t = t
now apply (kmapd_respectful_id). Qed. (** ** Context-sensitive LN analysis of operations *) (******************************************************************************) (** *** For [open] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l w (u : T k LN) t, (w, k, l) ∈md t '( k | u) <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l w (u : T k LN) t, (w, k, l) ∈md t '( k | u) <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
u: T k LN
t: U LN

(w, k, l) ∈md t '( k | u) <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
u: T k LN
t: U LN

(w, k, l) ∈md kbindd U k (open_loc k u) t <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2)
now rewrite (inmd_kbindd_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l w (u : T j LN) t, k <> j -> (w, k, l) ∈md t '( j | u) <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l w (u : T j LN) t, k <> j -> (w, k, l) ∈md t '( j | u) <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
w: list K
u: T j LN
t: U LN
H1: k <> j

(w, k, l) ∈md t '( j | u) <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
w: list K
u: T j LN
t: U LN
H1: k <> j

(w, k, l) ∈md kbindd U j (open_loc j u) t <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)
now rewrite (inmd_kbindd_neq_iff U); auto. Qed. (** *** For [close] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l w x t, (w, k, l) ∈md '[ k | x] t <-> (exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l w x t, (w, k, l) ∈md '[ k | x] t <-> (exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
x: atom
t: U LN

(w, k, l) ∈md '[ k | x] t <-> (exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
x: atom
t: U LN

(w, k, l) ∈md kmapd U k (close_loc k x) t <-> (exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
x: atom
t: U LN

(exists a1 : LN, (w, k, a1) ∈md t /\ l = close_loc k x (w, a1)) <-> (exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
easy. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l w x t, j <> k -> (w, k, l) ∈md '[ j | x] t <-> (w, k, l) ∈md t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l w x t, j <> k -> (w, k, l) ∈md '[ j | x] t <-> (w, k, l) ∈md t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
w: list K
x: atom
t: U LN
H1: j <> k

(w, k, l) ∈md '[ j | x] t <-> (w, k, l) ∈md t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
w: list K
x: atom
t: U LN
H1: j <> k

(w, k, l) ∈md kmapd U j (close_loc j x) t <-> (w, k, l) ∈md t
now rewrite (inmd_kmapd_neq_iff U). Qed. (** *** For [subst] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) w l (u : T k LN) t x, (w, k, l) ∈md t '{ k | x ~> u} <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) w l (u : T k LN) t x, (w, k, l) ∈md t '{ k | x ~> u} <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
l: LN
u: T k LN
t: U LN
x: atom

(w, k, l) ∈md t '{ k | x ~> u} <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
l: LN
u: T k LN
t: U LN
x: atom

(w, k, l) ∈md kbind U k (subst_loc k x u) t <-> (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
now rewrite (inmd_kbind_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) w l (u : T j LN) t x, k <> j -> (w, k, l) ∈md t '{ j | x ~> u} <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) w l (u : T j LN) t x, k <> j -> (w, k, l) ∈md t '{ j | x ~> u} <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
l: LN
u: T j LN
t: U LN
x: atom
H1: k <> j

(w, k, l) ∈md t '{ j | x ~> u} <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
l: LN
u: T j LN
t: U LN
x: atom
H1: k <> j

(w, k, l) ∈md kbind U j (subst_loc j x u) t <-> (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2)
now rewrite (inmd_kbind_neq_iff U); auto. Qed. (** ** Context-agnostic LN analysis of operations *) (******************************************************************************) (** *** For [open] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l (u : T k LN) t, (k, l) ∈m t '( k | u) <-> (exists w1 l1, (w1, k, l1) ∈md t /\ (k, l) ∈m open_loc k u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l (u : T k LN) t, (k, l) ∈m t '( k | u) <-> (exists w1 l1, (w1, k, l1) ∈md t /\ (k, l) ∈m open_loc k u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
u: T k LN
t: U LN

(k, l) ∈m t '( k | u) <-> (exists w1 l1, (w1, k, l1) ∈md t /\ (k, l) ∈m open_loc k u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
u: T k LN
t: U LN

(k, l) ∈m kbindd U k (open_loc k u) t <-> (exists w1 l1, (w1, k, l1) ∈md t /\ (k, l) ∈m open_loc k u (w1, l1))
now rewrite (in_kbindd_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l (u : T j LN) t, k <> j -> (k, l) ∈m t '( j | u) <-> (k, l) ∈m t \/ (exists w1 l1, (w1, j, l1) ∈md t /\ (k, l) ∈m open_loc j u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l (u : T j LN) t, k <> j -> (k, l) ∈m t '( j | u) <-> (k, l) ∈m t \/ (exists w1 l1, (w1, j, l1) ∈md t /\ (k, l) ∈m open_loc j u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
u: T j LN
t: U LN
H1: k <> j

(k, l) ∈m t '( j | u) <-> (k, l) ∈m t \/ (exists w1 l1, (w1, j, l1) ∈md t /\ (k, l) ∈m open_loc j u (w1, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
u: T j LN
t: U LN
H1: k <> j

(k, l) ∈m kbindd U j (open_loc j u) t <-> (k, l) ∈m t \/ (exists w1 l1, (w1, j, l1) ∈md t /\ (k, l) ∈m open_loc j u (w1, l1))
now rewrite (in_kbindd_neq_iff U); auto. Qed. (** *** For [close] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l x t, (k, l) ∈m '[ k | x] t <-> (exists w l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l x t, (k, l) ∈m '[ k | x] t <-> (exists w l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
x: atom
t: U LN

(k, l) ∈m '[ k | x] t <-> (exists w l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
x: atom
t: U LN

(k, l) ∈m kmapd U k (close_loc k x) t <-> (exists w l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
now rewrite (in_kmapd_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l x t, k <> j -> (k, l) ∈m '[ j | x] t <-> (k, l) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l x t, k <> j -> (k, l) ∈m '[ j | x] t <-> (k, l) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
x: atom
t: U LN
H1: k <> j

(k, l) ∈m '[ j | x] t <-> (k, l) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
x: atom
t: U LN
H1: k <> j

(k, l) ∈m kmapd U j (close_loc j x) t <-> (k, l) ∈m t
now rewrite (in_kmapd_neq_iff U); auto. Qed. (** *** For [subst] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l (u : T k LN) t x, (k, l) ∈m t '{ k | x ~> u} <-> (exists l1, (k, l1) ∈m t /\ (k, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) l (u : T k LN) t x, (k, l) ∈m t '{ k | x ~> u} <-> (exists l1, (k, l1) ∈m t /\ (k, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
u: T k LN
t: U LN
x: atom

(k, l) ∈m t '{ k | x ~> u} <-> (exists l1, (k, l1) ∈m t /\ (k, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
u: T k LN
t: U LN
x: atom

(k, l) ∈m kbind U k (subst_loc k x u) t <-> (exists l1, (k, l1) ∈m t /\ (k, l) ∈m subst_loc k x u l1)
now rewrite (in_kbind_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l (u : T j LN) t x, j <> k -> (k, l) ∈m t '{ j | x ~> u} <-> (k, l) ∈m t \/ (exists l1, (j, l1) ∈m t /\ (k, l) ∈m subst_loc j x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) l (u : T j LN) t x, j <> k -> (k, l) ∈m t '{ j | x ~> u} <-> (k, l) ∈m t \/ (exists l1, (j, l1) ∈m t /\ (k, l) ∈m subst_loc j x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
u: T j LN
t: U LN
x: atom
H1: j <> k

(k, l) ∈m t '{ j | x ~> u} <-> (k, l) ∈m t \/ (exists l1, (j, l1) ∈m t /\ (k, l) ∈m subst_loc j x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
l: LN
u: T j LN
t: U LN
x: atom
H1: j <> k

(k, l) ∈m kbind U j (subst_loc j x u) t <-> (k, l) ∈m t \/ (exists l1, (j, l1) ∈m t /\ (k, l) ∈m subst_loc j x u l1)
now rewrite (in_kbind_neq_iff U). Qed. End operations_specifications. (** * Specifications for <<free>> *) (******************************************************************************) Section operations_specifications. (** ** Characterizations for [free] and [FV] *) (******************************************************************************) Section characterize_free. Context {U : Type -> Type} `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

Compat_ToSubset_Tolist list
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

Compat_ToSubset_Tolist list
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

@tosubset list ToSubset_list = @tosubset list ToSubset_Tolist
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

(fun (A : Type) (l : list A) (a : A) => List.In a l) = ToSubset_Tolist
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

(fun (A : Type) (l : list A) (a : A) => List.In a l) = (fun A : Type => tosubset ∘ tolist)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

(fun (A : Type) (l : list A) (a : A) => List.In a l) = (fun A : Type => tosubset ○ tolist)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
A: Type
l: list A

(fun a : A => List.In a l) = tosubset (tolist l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
A: Type
l: list A

(fun a : A => List.In a l) = tosubset (id l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
A: Type
l: list A

(fun a : A => List.In a l) = (fun a : A => List.In a (id l))
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x : atom), x ∈ free U k t <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x : atom), x ∈ free U k t <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ free U k t <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ bind free_loc (toklist U k t) <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ tolist (bind free_loc (toklist U k t)) <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ bind free_loc (toklist U k t) <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

(exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a) <-> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

(exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a) -> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
(k, Fr x) ∈m t -> exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

(exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a) -> (k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
l: LN
lin: l ∈ toklist U k t
xin: x ∈ free_loc l

(k, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
l: LN
lin: l ∈ toklist U k t
xin: x ∈ free_loc l

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, a: atom
lin: Fr a ∈ toklist U k t
xin: x ∈ free_loc (Fr a)

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
n: nat
lin: Bd n ∈ toklist U k t
xin: x ∈ free_loc (Bd n)
Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, a: atom
lin: Fr a ∈ toklist U k t
xin: x ∈ free_loc (Fr a)

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, a: atom
lin: Fr a ∈ toklist U k t
xin: a = x \/ False

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, a: atom
lin: Fr a ∈ toklist U k t
H1: a = x

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lin: Fr x ∈ toklist U k t

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lin: Fr x ∈ toklist U k t

Fr x ∈ toklist U k t
assumption.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
n: nat
lin: Bd n ∈ toklist U k t
xin: x ∈ free_loc (Bd n)

Fr x ∈ toklist U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
n: nat
lin: Bd n ∈ toklist U k t
xin: False

Fr x ∈ toklist U k t
destruct xin as [].
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

(k, Fr x) ∈m t -> exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: (k, Fr x) ∈m t

exists a : LN, a ∈ toklist U k t /\ x ∈ free_loc a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: (k, Fr x) ∈m t

Fr x ∈ toklist U k t /\ x ∈ free_loc (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: (k, Fr x) ∈m t

(k, Fr x) ∈m t /\ x ∈ free_loc (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: (k, Fr x) ∈m t

x ∈ free_loc (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
H1: (k, Fr x) ∈m t

x = x \/ False
now left. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x : atom), x ∈ free U k t <-> x `in` FV U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x : atom), x ∈ free U k t <-> x `in` FV U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ free U k t <-> x `in` FV U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ free U k t <-> x `in` atoms (free U k t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x ∈ free U k t <-> x ∈ free U k t
reflexivity. Qed. End characterize_free. (** ** [free] variables after <<open>>/<<close>>/<<subst>> *) (******************************************************************************) Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. (** *** After [open] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (u : T k LN) (t : U LN) (x : atom), x ∈ free U k (t '( k | u)) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (u : T k LN) (t : U LN) (x : atom), x ∈ free U k (t '( k | u)) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom

x ∈ free U k (t '( k | u)) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom

(k, Fr x) ∈m t '( k | u) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom

(k, Fr x) ∈m t '( k | u) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ (k, Fr x) ∈m open_loc k u (w, l1))
now rewrite in_open_eq_iff. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) (u : T k LN) (t : U LN) (x : atom), k <> j -> x ∈ free U j (t '( k | u)) <-> x ∈ free U j t \/ (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) j (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) (u : T k LN) (t : U LN) (x : atom), k <> j -> x ∈ free U j (t '( k | u)) <-> x ∈ free U j t \/ (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) j (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
H1: k <> j

x ∈ free U j (t '( k | u)) <-> x ∈ free U j t \/ (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) j (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
H1: k <> j

(j, Fr x) ∈m t '( k | u) <-> (j, Fr x) ∈m t \/ (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ x ∈ free (T k) j (open_loc k u (w, l1)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
H1: k <> j

(j, Fr x) ∈m t '( k | u) <-> (j, Fr x) ∈m t \/ (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ (j, Fr x) ∈m open_loc k u (w, l1))
now rewrite in_open_neq_iff; auto. Qed. (** *** After [close] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x y : atom), y ∈ free U k ('[ k | x] t) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (t : U LN) (x y : atom), y ∈ free U k ('[ k | x] t) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

y ∈ free U k ('[ k | x] t) <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(k, Fr y) ∈m '[ k | x] t <-> (exists (w : list K) (l1 : LN), (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1))
now rewrite (in_close_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) (t : U LN) (x : atom), k <> j -> x ∈ free U j ('[ k | x] t) <-> x ∈ free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k j : K) (t : U LN) (x : atom), k <> j -> x ∈ free U j ('[ k | x] t) <-> x ∈ free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

x ∈ free U j ('[ k | x] t) <-> x ∈ free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

(j, Fr x) ∈m '[ k | x] t <-> (j, Fr x) ∈m t
now rewrite (in_close_neq_iff U); auto. Qed. (** *** For [subst] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (u : T k LN) (t : U LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) <-> (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) k (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (k : K) (u : T k LN) (t : U LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) <-> (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) k (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom

y ∈ free U k (t '{ k | x ~> u}) <-> (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) k (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom

(k, Fr y) ∈m t '{ k | x ~> u} <-> (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) k (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom

(k, Fr y) ∈m t '{ k | x ~> u} <-> (exists l1 : LN, (k, l1) ∈m t /\ (k, Fr y) ∈m subst_loc k x u l1)
now rewrite (in_subst_eq_iff U). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (j k : K) (u : T k LN) (t : U LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) j (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (j k : K) (u : T k LN) (t : U LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) j (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k: K
u: T k LN
t: U LN
x, y: atom
H1: k <> j

y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) j (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k: K
u: T k LN
t: U LN
x, y: atom
H1: k <> j

(j, Fr y) ∈m t '{ k | x ~> u} <-> (j, Fr y) ∈m t \/ (exists l1 : LN, (k, l1) ∈m t /\ y ∈ free (T k) j (subst_loc k x u l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k : K, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k: K
u: T k LN
t: U LN
x, y: atom
H1: k <> j

(j, Fr y) ∈m t '{ k | x ~> u} <-> (j, Fr y) ∈m t \/ (exists l1 : LN, (k, l1) ∈m t /\ (j, Fr y) ∈m subst_loc k x u l1)
now rewrite (in_subst_neq_iff); auto. Qed. End operations_specifications. (** * Lemmas for local reasoning *) (** The following lemmas govern the behavior of the <<*_loc>> operations of the locally nameless library. These are put into a hint database <<tea_local>> to use with <<autorewrite>>. Since <<autorewrite>> tries the first unifying lemma (even if this generates absurd side conditions), we use <<Hint Rewrite ... using ...>> clauses and typically prefer <<autorewrite*>>, which only uses hints whose side conditions are discharged by the associated tactic. *) (******************************************************************************) Create HintDb tea_local. Section locally_nameless_local. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Implicit Types (l : LN) (w : list K) (t : U LN) (x : atom) (j k : K) (n : nat). (** ** Lemmas for proving (in)equalities between leaves *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, Fr x = Fr y <-> x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, Fr x = Fr y <-> x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom

Fr x = Fr y <-> x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: Fr x = Fr y

x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: x = y
Fr x = Fr y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: x = y

Fr x = Fr y
now subst. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, Fr x <> Fr y <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, Fr x <> Fr y <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom

Fr x <> Fr y <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: x = y

Fr x = Fr y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: Fr x = Fr y
x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
hyp: Fr x = Fr y

x = y
now injection hyp. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, x <> y -> Fr x <> Fr y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall x y : atom, x <> y -> Fr x <> Fr y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
x, y: atom
H1: x <> y

Fr x <> Fr y
now rewrite Fr_injective. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall n x, (Bd n = Fr x) = False
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall n x, (Bd n = Fr x) = False
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
n: nat
x: atom

(Bd n = Fr x) = False
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
n: nat
x: atom

Bd n = Fr x -> False
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
n: nat
x: atom
False -> Bd n = Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
n: nat
x: atom

False -> Bd n = Fr x
contradiction. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (A : Type) (x y : A), (k, x) <> (k, y) <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (A : Type) (x y : A), (k, x) <> (k, y) <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
A: Type
x, y: A

(k, x) <> (k, y) <-> x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
A: Type
x, y: A
hyp: x = y

(k, x) = (k, y)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
A: Type
x, y: A
hyp: (k, x) = (k, y)
x = y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
A: Type
x, y: A
hyp: (k, x) = (k, y)

x = y
now injection hyp. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l t, ~ x ∈ free U k t -> (k, l) ∈m t -> Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l t, ~ x ∈ free U k t -> (k, l) ∈m t -> Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
hyp1: ~ x ∈ free U k t
hyp2: (k, l) ∈m t

Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, l) ∈m t

Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x, n: atom
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, Fr n) ∈m t

Fr x <> Fr n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
n: nat
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, Bd n) ∈m t
Fr x <> Bd n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x, n: atom
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, Fr n) ∈m t

Fr x <> Fr n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x, n: atom
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, Fr n) ∈m t
H1: Fr x = Fr n

x = n -> False
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: atom
t: U LN
hyp1: ~ (k, Fr n) ∈m t
hyp2: (k, Fr n) ∈m t
H1: Fr n = Fr n

False
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
n: nat
t: U LN
hyp1: ~ (k, Fr x) ∈m t
hyp2: (k, Bd n) ∈m t

Fr x <> Bd n
discriminate. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (X : Type) (x y : X), (x <> y) = (y <> x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall (X : Type) (x y : X), (x <> y) = (y <> x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
X: Type
x, y: X

(x <> y) = (y <> x)
propext; intro hyp; contradict hyp; congruence. Qed. (** ** [subst_loc] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x, subst_loc k x u (Fr x) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x, subst_loc k x u (Fr x) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom

subst_loc k x u (Fr x) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom

(if x == x then u else mret T k (Fr x)) = u
now compare values x and x. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) (x y : atom), y <> x -> subst_loc k x u (Fr y) = mret T k (Fr y)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) (x y : atom), y <> x -> subst_loc k x u (Fr y) = mret T k (Fr y)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x, y: atom
H1: y <> x

subst_loc k x u (Fr y) = mret T k (Fr y)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x, y: atom
H1: y <> x

(if x == y then u else mret T k (Fr y)) = mret T k (Fr y)
now compare values x and y. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x n, subst_loc k x u (Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x n, subst_loc k x u (Bd n) = mret T k (Bd n)
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) l x, Fr x <> l -> subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) l x, Fr x <> l -> subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
l: LN
x: atom
neq: Fr x <> l

subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
l: LN
x: atom
neq: Fr x <> l

match l with | Fr y => if x == y then u else mret T k (Fr y) | Bd n => mret T k (Bd n) end = mret T k l
destruct l as [a|?]; [compare values x and a | reflexivity]. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l (u : T k LN), mret T k l '{ k | x ~> u} = subst_loc k x u l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l (u : T k LN), mret T k l '{ k | x ~> u} = subst_loc k x u l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
u: T k LN

mret T k l '{ k | x ~> u} = subst_loc k x u l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
u: T k LN

kbind (T k) k (subst_loc k x u) (mret T k l) = subst_loc k x u l
now rewrite kbind_comp_mret_eq. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j x l (u : T j LN), j <> k -> mret T k l '{ j | x ~> u} = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j x l (u : T j LN), j <> k -> mret T k l '{ j | x ~> u} = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
x: atom
l: LN
u: T j LN
H1: j <> k

mret T k l '{ j | x ~> u} = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
x: atom
l: LN
u: T j LN
H1: j <> k

kbind (T k) j (subst_loc j x u) (mret T k l) = mret T k l
now rewrite kbind_comp_mret_neq. Qed. (** ** [open_loc] *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w n, n < countk k w -> open_loc k u (w, Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w n, n < countk k w -> open_loc k u (w, Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
n: nat
ineq: n < countk k w

open_loc k u (w, Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
n: nat
ineq: n < countk k w

match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd n)
compare naturals n and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) n w, n > countk k w -> open_loc k u (w, Bd n) = mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) n w, n > countk k w -> open_loc k u (w, Bd n) = mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
n: nat
w: list K
ineq: n > countk k w

open_loc k u (w, Bd n) = mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
n: nat
w: list K
ineq: n > countk k w

match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd (n - 1))
compare naturals n and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w (u : T k LN), open_loc k u (w, Bd (countk k w)) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w (u : T k LN), open_loc k u (w, Bd (countk k w)) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
u: T k LN

open_loc k u (w, Bd (countk k w)) = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
u: T k LN

match Nat.compare (countk k w) (countk k w) with | Eq => u | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end = u
compare naturals (countk k w) and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w x, open_loc k u (w, Fr x) = mret T k (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w x, open_loc k u (w, Fr x) = mret T k (Fr x)
reflexivity. Qed. End locally_nameless_local. (** ** Tactics for local reasoning *) (******************************************************************************) Tactic Notation "unfold_monoid" := repeat unfold monoid_op, Monoid_op_list, Monoid_op_list, monoid_unit, Monoid_unit_list, Monoid_unit_list in *. #[export] Hint Rewrite @prod_K_not_iff : tea_local. (** Rewrite rules for expressions of the form <<x ∈ mret T y>> *) #[export] Hint Rewrite @in_mret_iff @in_mret_eq_iff @inmd_mret_iff @inmd_mret_eq_iff using typeclasses eauto : tea_local. (** Rewrite rules for simplifying expressions involving equalities between leaves *) #[export] Hint Rewrite Fr_injective Fr_injective_not_iff B_neq_Fr : tea_local. (** Solve goals of the form <<Fr x <> Fr y>> by using <<x <> y>> *) #[export] Hint Resolve Fr_injective_not : tea_local. #[export] Hint Rewrite @subst_loc_eq @subst_in_mret_eq using typeclasses eauto : tea_local. #[export] Hint Rewrite @subst_loc_neq @subst_loc_b @subst_loc_fr_neq @subst_in_mret_neq using first [ typeclasses eauto | auto ] : tea_local. #[export] Hint Rewrite @open_loc_lt @open_loc_gt using first [ typeclasses eauto | auto ] : tea_local. #[export] Hint Rewrite @open_loc_eq @open_loc_atom using typeclasses eauto : tea_local. Tactic Notation "simpl_local" := (autorewrite* with tea_local). (** * Metatheory for the <<subst>> operation *) (******************************************************************************) Section subst_metatheory. Section fix_dtm. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Implicit Types (k : K) (j : K) (l : LN) (p : LN) (x : atom) (t : U LN) (w : list K) (n : nat). (** ** LN analysis with contexts *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w j p (u : T k LN) x, (w, j, p) ∈md subst_loc k x u l <-> l <> Fr x /\ k = j /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w j p (u : T k LN) x, (w, j, p) ∈md subst_loc k x u l <-> l <> Fr x /\ k = j /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
j: K
p: LN
u: T k LN
x: atom

(w, j, p) ∈md subst_loc k x u l <-> l <> Fr x /\ k = j /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom

(w, j, p) ∈md subst_loc k x u (Fr x) <-> Fr x <> Fr x /\ k = j /\ w = Ƶ /\ Fr x = p \/ Fr x = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x, a: atom
H1: a <> x
(w, j, p) ∈md subst_loc k x u (Fr a) <-> Fr a <> Fr x /\ k = j /\ w = Ƶ /\ Fr a = p \/ Fr a = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom
n: nat
(w, j, p) ∈md subst_loc k x u (Bd n) <-> Bd n <> Fr x /\ k = j /\ w = Ƶ /\ Bd n = p \/ Bd n = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom

(w, j, p) ∈md subst_loc k x u (Fr x) <-> Fr x <> Fr x /\ k = j /\ w = Ƶ /\ Fr x = p \/ Fr x = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom

(w, j, p) ∈md u <-> Fr x <> Fr x /\ k = j /\ w = Ƶ /\ Fr x = p \/ Fr x = Fr x /\ (w, j, p) ∈md u
clear; firstorder.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x, a: atom
H1: a <> x

(w, j, p) ∈md subst_loc k x u (Fr a) <-> Fr a <> Fr x /\ k = j /\ w = Ƶ /\ Fr a = p \/ Fr a = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x, a: atom
H1: a <> x

(w, j, p) ∈md mret T k (Fr a) <-> Fr a <> Fr x /\ k = j /\ w = Ƶ /\ Fr a = p \/ Fr a = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x, a: atom
H1: a <> x

w = Ƶ /\ k = j /\ Fr a = p <-> Fr a <> Fr x /\ k = j /\ w = Ƶ /\ Fr a = p \/ Fr a = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x, a: atom
H1: a <> x

w = Ƶ /\ k = j /\ Fr a = p <-> a <> x /\ k = j /\ w = Ƶ /\ Fr a = p \/ a = x /\ (w, j, p) ∈md u
firstorder.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom
n: nat

(w, j, p) ∈md subst_loc k x u (Bd n) <-> Bd n <> Fr x /\ k = j /\ w = Ƶ /\ Bd n = p \/ Bd n = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom
n: nat

(w, j, p) ∈md mret T k (Bd n) <-> Bd n <> Fr x /\ k = j /\ w = Ƶ /\ Bd n = p \/ Bd n = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom
n: nat

w = Ƶ /\ k = j /\ Bd n = p <-> Bd n <> Fr x /\ k = j /\ w = Ƶ /\ Bd n = p \/ Bd n = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
j: K
p: LN
u: T k LN
x: atom
n: nat

w = Ƶ /\ k = j /\ Bd n = p <-> ~ False /\ k = j /\ w = Ƶ /\ Bd n = p \/ False /\ (w, j, p) ∈md u
firstorder. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w p (u : T k LN) x, (w, k, p) ∈md subst_loc k x u l <-> l <> Fr x /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w p (u : T k LN) x, (w, k, p) ∈md subst_loc k x u l <-> l <> Fr x /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
p: LN
u: T k LN
x: atom

(w, k, p) ∈md subst_loc k x u l <-> l <> Fr x /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
p: LN
u: T k LN
x: atom

l <> Fr x /\ k = k /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u <-> l <> Fr x /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
H: forall k, MBind (list K) T (T k)
k: K
l: LN
w: list K
p: LN
u: T k LN
x: atom

l <> Fr x /\ k = k /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u <-> l <> Fr x /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, k, p) ∈md u
firstorder. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w j p (u : T k LN) x, k <> j -> (w, j, p) ∈md subst_loc k x u l <-> l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l w j p (u : T k LN) x, k <> j -> (w, j, p) ∈md subst_loc k x u l <-> l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
j: K
p: LN
u: T k LN
x: atom
neq: k <> j

(w, j, p) ∈md subst_loc k x u l <-> l = Fr x /\ (w, j, p) ∈md u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
w: list K
j: K
p: LN
u: T k LN
x: atom
neq: k <> j

l <> Fr x /\ k = j /\ w = Ƶ /\ l = p \/ l = Fr x /\ (w, j, p) ∈md u <-> l = Fr x /\ (w, j, p) ∈md u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j w t (u : T k LN) l x, (w, j, l) ∈md t '{ k | x ~> u} <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j w t (u : T k LN) l x, (w, j, l) ∈md t '{ k | x ~> u} <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom

(w, j, l) ∈md t '{ k | x ~> u} <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(w, j, l) ∈md t '{ j | x ~> u} <-> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
(w, j, l) ∈md t '{ k | x ~> u} <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(w, j, l) ∈md t '{ j | x ~> u} <-> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, j, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2) <-> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2) <-> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2) -> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2) -> exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2) -> j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
conditions: (l', j, n2) ∈md t /\ (n2 <> Fr x /\ n1 = Ƶ /\ n2 = l \/ n2 = Fr x /\ (n1, j, l) ∈md u) /\ w = l' ● n1

j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
conditions: (l', j, n2) ∈md t /\ (n2 <> Fr x /\ n1 = Ƶ /\ n2 = l \/ n2 = Fr x /\ (n1, j, l) ∈md u) /\ w = l' ● n1

j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 <> Fr x /\ n1 = Ƶ /\ n2 = l
c3: w = l' ● n1

j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 = Fr x /\ (n1, j, l) ∈md u
c3: w = l' ● n1
j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 <> Fr x /\ n1 = Ƶ /\ n2 = l
c3: w = l' ● n1

j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 <> Fr x /\ n1 = Ƶ /\ n2 = l

j = j /\ (l' ● n1, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ l' ● n1 = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 <> Fr x /\ n1 = Ƶ /\ n2 = l

j = j /\ (l' ● n1, j, l) ∈md t /\ l <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l': list K
H1: l <> Fr x
c1: (l', j, l) ∈md t

j = j /\ (l' ● Ƶ, j, l) ∈md t /\ l <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l': list K
H1: l <> Fr x
c1: (l', j, l) ∈md t

j = j /\ (l', j, l) ∈md t /\ l <> Fr x
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 = Fr x /\ (n1, j, l) ∈md u
c3: w = l' ● n1

j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 = Fr x /\ (n1, j, l) ∈md u
c3: w = l' ● n1

j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 = Fr x /\ (n1, j, l) ∈md u

j = j /\ (l' ● n1, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ l' ● n1 = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
n2: LN
c1: (l', j, n2) ∈md t
c2: n2 = Fr x /\ (n1, j, l) ∈md u

exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ l' ● n1 = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
l', n1: list K
c1: (l', j, Fr x) ∈md t
H2: (n1, j, l) ∈md u

exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ l' ● n1 = w1 ● w2
eauto. }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

j <> j /\ (w, j, l) ∈md t \/ j = j /\ (w, j, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2) -> exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
contra: j <> j
H1: (w, j, l) ∈md t

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (w, j, l) ∈md t
neq: l <> Fr x
exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
hyp: exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2
exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
contra: j <> j
H1: (w, j, l) ∈md t

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (w, j, l) ∈md t
neq: l <> Fr x

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
hyp: exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2
exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (w, j, l) ∈md t
neq: l <> Fr x

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (w, j, l) ∈md t
neq: l <> Fr x

(w, j, l) ∈md t /\ (l <> Fr x /\ Ƶ = Ƶ /\ l = l \/ l = Fr x /\ (Ƶ, j, l) ∈md u) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (w, j, l) ∈md t
neq: l <> Fr x

(w, j, l) ∈md t /\ (l <> Fr x /\ Ƶ = Ƶ /\ l = l \/ l = Fr x /\ (Ƶ, j, l) ∈md u) /\ w = w
split...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
hyp: exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
hyp: exists w1 w2, (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
w1, w2: list K
H1: (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

exists w1 w2 l1, (w1, j, l1) ∈md t /\ (l1 <> Fr x /\ w2 = Ƶ /\ l1 = l \/ l1 = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
w: list K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
w1, w2: list K
H1: (w1, j, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

(w1, j, Fr x) ∈md t /\ (Fr x <> Fr x /\ w2 = Ƶ /\ Fr x = l \/ Fr x = Fr x /\ (w2, j, l) ∈md u) /\ w = w1 ● w2
intuition. }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(w, j, l) ∈md t '{ k | x ~> u} <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2) <-> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2) -> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2) -> (w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2) -> k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
n1, n2: list K
p: LN
in_t: (n1, k, p) ∈md t
in_local: (n2, j, l) ∈md subst_loc k x u p /\ w = n1 ● n2

k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
n1, n2: list K
p: LN
in_t: (n1, k, p) ∈md t
in_local: (p = Fr x /\ (n2, j, l) ∈md u) /\ w = n1 ● n2

k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
n1, n2: list K
p: LN
in_t: (n1, k, p) ∈md t
in_local: (p = Fr x /\ (n2, j, l) ∈md u) /\ w = n1 ● n2

k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
n1, n2: list K
p: LN
in_t: (n1, k, p) ∈md t
in_local: (p = Fr x /\ (n2, j, l) ∈md u) /\ w = n1 ● n2

exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
n1, n2: list K
p: LN
in_t: (n1, k, p) ∈md t
in_local: (p = Fr x /\ (n2, j, l) ∈md u) /\ w = n1 ● n2

(n1, k, Fr x) ∈md t /\ (n2, j, l) ∈md u /\ w = n1 ● n2
destruct in_local as [[? ?] ?]; subst...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2) -> (w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k <> j
H2: (w, j, l) ∈md t

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (w, k, l) ∈md t /\ l <> Fr x
(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2
(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k <> j
H2: (w, j, l) ∈md t

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (w, k, l) ∈md t /\ l <> Fr x

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2
(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (w, k, l) ∈md t /\ l <> Fr x

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

(w, j, l) ∈md t \/ (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, j, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
w1, w2: list K
rest: (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2

(w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md subst_loc k x u (Fr x) /\ w = w1 ● w2
simpl_local... } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w t (u : T k LN) l x, (w, k, l) ∈md t '{ k | x ~> u} <-> (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w t (u : T k LN) l x, (w, k, l) ∈md t '{ k | x ~> u} <-> (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom

(w, k, l) ∈md t '{ k | x ~> u} <-> (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom

k <> k /\ (w, k, l) ∈md t \/ k = k /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2) <-> (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2)
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j w t (u : T k LN) l x, k <> j -> (w, j, l) ∈md t '{ k | x ~> u} <-> (w, j, l) ∈md t \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j w t (u : T k LN) l x, k <> j -> (w, j, l) ∈md t '{ k | x ~> u} <-> (w, j, l) ∈md t \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
H1: k <> j

(w, j, l) ∈md t '{ k | x ~> u} <-> (w, j, l) ∈md t \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
w: list K
t: U LN
u: T k LN
l: LN
x: atom
H1: k <> j

k <> j /\ (w, j, l) ∈md t \/ k = j /\ (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2) <-> (w, j, l) ∈md t \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)
intuition. Qed. (** ** LN analysis without contexts *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l j p (u : T k LN) x, (j, p) ∈m subst_loc k x u l <-> l <> Fr x /\ k = j /\ l = p \/ l = Fr x /\ (j, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l j p (u : T k LN) x, (j, p) ∈m subst_loc k x u l <-> l <> Fr x /\ k = j /\ l = p \/ l = Fr x /\ (j, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
j: K
p: LN
u: T k LN
x: atom

(j, p) ∈m subst_loc k x u l <-> l <> Fr x /\ k = j /\ l = p \/ l = Fr x /\ (j, p) ∈m u
compare l to atom x; autorewrite* with tea_local; intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l p (u : T k LN) x, (k, p) ∈m subst_loc k x u l <-> l <> Fr x /\ l = p \/ l = Fr x /\ (k, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l p (u : T k LN) x, (k, p) ∈m subst_loc k x u l <-> l <> Fr x /\ l = p \/ l = Fr x /\ (k, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l, p: LN
u: T k LN
x: atom

(k, p) ∈m subst_loc k x u l <-> l <> Fr x /\ l = p \/ l = Fr x /\ (k, p) ∈m u
rewrite in_subst_loc_iff; intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l j p (u : T k LN) x, k <> j -> (j, p) ∈m subst_loc k x u l <-> l = Fr x /\ (j, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l j p (u : T k LN) x, k <> j -> (j, p) ∈m subst_loc k x u l <-> l = Fr x /\ (j, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
j: K
p: LN
u: T k LN
x: atom
neq: k <> j

(j, p) ∈m subst_loc k x u l <-> l = Fr x /\ (j, p) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
j: K
p: LN
u: T k LN
x: atom
neq: k <> j

l <> Fr x /\ k = j /\ l = p \/ l = Fr x /\ (j, p) ∈m u <-> l = Fr x /\ (j, p) ∈m u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, (j, l) ∈m t '{ k | x ~> u} <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, (j, l) ∈m t '{ k | x ~> u} <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom

(j, l) ∈m t '{ k | x ~> u} <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(j, l) ∈m t '{ j | x ~> u} <-> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
(j, l) ∈m t '{ k | x ~> u} <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(j, l) ∈m t '{ j | x ~> u} <-> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists l1, (j, l1) ∈m t /\ (j, l) ∈m subst_loc j x u l1) <-> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)) <-> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)) -> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u -> exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

(exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)) -> j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
x0: LN
H1: (j, x0) ∈m t
in_sub: x0 <> Fr x /\ x0 = l \/ x0 = Fr x /\ (j, l) ∈m u

j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u
destruct in_sub as [[? heq] | [heq ?]]; subst...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j

j <> j /\ (j, l) ∈m t \/ j = j /\ (j, l) ∈m t /\ l <> Fr x \/ (j, Fr x) ∈m t /\ (j, l) ∈m u -> exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
contra: j <> j
H1: (j, l) ∈m t

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (j, l) ∈m t
neq: l <> Fr x
exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
H1: (j, Fr x) ∈m t /\ (j, l) ∈m u
exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
contra: j <> j
H1: (j, l) ∈m t

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (j, l) ∈m t
neq: l <> Fr x

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
H1: (j, Fr x) ∈m t /\ (j, l) ∈m u
exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs, H1: j = j
in_t: (j, l) ∈m t
neq: l <> Fr x

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
exists l...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
H1: (j, Fr x) ∈m t /\ (j, l) ∈m u

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
H1: (j, Fr x) ∈m t /\ (j, l) ∈m u

exists l1, (j, l1) ∈m t /\ (l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
DESTR_EQs: j = j
H1: (j, Fr x) ∈m t /\ (j, l) ∈m u

(j, Fr x) ∈m t /\ (Fr x <> Fr x /\ Fr x = l \/ Fr x = Fr x /\ (j, l) ∈m u)
intuition. }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(j, l) ∈m t '{ k | x ~> u} <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1) <-> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1) -> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u -> (j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1) -> k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
p: LN
in_t: (k, p) ∈m t
in_local: (j, l) ∈m subst_loc k x u p

k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
p: LN
in_t: (k, p) ∈m t
in_local: p = Fr x /\ (j, l) ∈m u

k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
in_t: (k, Fr x) ∈m t
H2: (j, l) ∈m u

k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k

k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u -> (j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k <> j
H2: (j, l) ∈m t

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (k, l) ∈m t /\ l <> Fr x
(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u
(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k <> j
H2: (j, l) ∈m t

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (k, l) ∈m t /\ l <> Fr x

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u
(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: k = j
H2: (k, l) ∈m t /\ l <> Fr x

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u

(j, l) ∈m t \/ (exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u

exists l1, (k, l1) ∈m t /\ (j, l) ∈m subst_loc k x u l1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
DESTR_NEQ: k <> j
DESTR_NEQs: j <> k
H1: (k, Fr x) ∈m t /\ (j, l) ∈m u

(k, Fr x) ∈m t /\ (j, l) ∈m subst_loc k x u (Fr x)
simpl_local... } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) l x, (k, l) ∈m t '{ k | x ~> u} <-> (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) l x, (k, l) ∈m t '{ k | x ~> u} <-> (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
l: LN
x: atom

(k, l) ∈m t '{ k | x ~> u} <-> (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
l: LN
x: atom

k <> k /\ (k, l) ∈m t \/ k = k /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (k, l) ∈m u <-> (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (k, l) ∈m u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, k <> j -> (j, l) ∈m t '{ k | x ~> u} <-> (j, l) ∈m t \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, k <> j -> (j, l) ∈m t '{ k | x ~> u} <-> (j, l) ∈m t \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
H1: k <> j

(j, l) ∈m t '{ k | x ~> u} <-> (j, l) ∈m t \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
H1: k <> j

k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u <-> (j, l) ∈m t \/ (k, Fr x) ∈m t /\ (j, l) ∈m u
intuition. Qed. (** ** Free variables after substitution *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) <-> y ∈ free U k t /\ y <> x \/ x ∈ free U k t /\ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) <-> y ∈ free U k t /\ y <> x \/ x ∈ free U k t /\ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x, y: atom

y ∈ free U k (t '{ k | x ~> u}) <-> y ∈ free U k t /\ y <> x \/ x ∈ free U k t /\ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x, y: atom

(k, Fr y) ∈m t '{ k | x ~> u} <-> (k, Fr y) ∈m t /\ y <> x \/ (k, Fr x) ∈m t /\ (k, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x, y: atom

(k, Fr y) ∈m t /\ Fr y <> Fr x \/ (k, Fr x) ∈m t /\ (k, Fr y) ∈m u <-> (k, Fr y) ∈m t /\ y <> x \/ (k, Fr x) ∈m t /\ (k, Fr y) ∈m u
now simpl_local. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x (y : AtomSet.elt), y `in` FV U k (t '{ k | x ~> u}) <-> y `in` FV U k t /\ y <> x \/ x `in` FV U k t /\ y `in` FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x (y : AtomSet.elt), y `in` FV U k (t '{ k | x ~> u}) <-> y `in` FV U k t /\ y <> x \/ x `in` FV U k t /\ y `in` FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
y: AtomSet.elt

y `in` FV U k (t '{ k | x ~> u}) <-> y `in` FV U k t /\ y <> x \/ x `in` FV U k t /\ y `in` FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
y: AtomSet.elt

y ∈ free U k (t '{ k | x ~> u}) <-> y ∈ free U k t /\ y <> x \/ x ∈ free U k t /\ y ∈ free (T k) k u
apply in_free_subst_iff_eq. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ x ∈ free U k t /\ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ x ∈ free U k t /\ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x, y: atom
H1: k <> j

y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ x ∈ free U k t /\ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x, y: atom
H1: k <> j

(j, Fr y) ∈m t '{ k | x ~> u} <-> (j, Fr y) ∈m t \/ (k, Fr x) ∈m t /\ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x, y: atom
H1: k <> j

(j, Fr y) ∈m t \/ (k, Fr x) ∈m t /\ (j, Fr y) ∈m u <-> (j, Fr y) ∈m t \/ (k, Fr x) ∈m t /\ (j, Fr y) ∈m u
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x (y : AtomSet.elt), k <> j -> y `in` FV U j (t '{ k | x ~> u}) <-> y `in` FV U j t \/ x `in` FV U k t /\ y `in` FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x (y : AtomSet.elt), k <> j -> y `in` FV U j (t '{ k | x ~> u}) <-> y `in` FV U j t \/ x `in` FV U k t /\ y `in` FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
y: AtomSet.elt
H1: k <> j

y `in` FV U j (t '{ k | x ~> u}) <-> y `in` FV U j t \/ x `in` FV U k t /\ y `in` FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
y: AtomSet.elt
H1: k <> j

y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t \/ x ∈ free U k t /\ y ∈ free (T k) j u
auto using in_free_subst_iff_neq. Qed. (** ** Upper and lower bounds for leaves after substitution *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, (j, l) ∈m t '{ k | x ~> u} -> (j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, (j, l) ∈m t '{ k | x ~> u} -> (j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hin: (j, l) ∈m t '{ k | x ~> u}

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hin: k <> j /\ (j, l) ∈m t \/ k = j /\ (k, l) ∈m t /\ l <> Fr x \/ (k, Fr x) ∈m t /\ (j, l) ∈m u

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp1: k <> j
hyp2: (j, l) ∈m t

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: k = j /\ (k, l) ∈m t /\ l <> Fr x
(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: (k, Fr x) ∈m t /\ (j, l) ∈m u
(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp1: k <> j
hyp2: (j, l) ∈m t

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp1: k <> j
hyp2: (j, l) ∈m t

(j, l) ∈m t /\ (j, l) <> (k, Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp1: k <> j
hyp2: (j, l) ∈m t

(j, l) <> (k, Fr x)
injection...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: k = j /\ (k, l) ∈m t /\ l <> Fr x

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
H1: k = j
H2: (k, l) ∈m t
H3: l <> Fr x

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
H2: (j, l) ∈m t
H3: l <> Fr x

(j, l) ∈m t /\ (j, l) <> (j, Fr x) \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
H2: (j, l) ∈m t
H3: l <> Fr x

(j, l) ∈m t /\ (j, l) <> (j, Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j: K
t: U LN
u: T j LN
l: LN
x: atom
H2: (j, l) ∈m t
H3: l <> Fr x

(j, l) <> (j, Fr x)
injection...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: (k, Fr x) ∈m t /\ (j, l) ∈m u

(j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) l x, (k, l) ∈m t '{ k | x ~> u} -> (k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) l x, (k, l) ∈m t '{ k | x ~> u} -> (k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: (k, l) ∈m t '{ k | x ~> u}

(k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: (k, l) ∈m t /\ (k, l) <> (k, Fr x) \/ (k, l) ∈m u

(k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
l: LN
x: atom
hyp: (k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u

(k, l) ∈m t /\ l <> Fr x \/ (k, l) ∈m u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, k <> j -> (j, l) ∈m t '{ k | x ~> u} -> (j, l) ∈m t \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) l x, k <> j -> (j, l) ∈m t '{ k | x ~> u} -> (j, l) ∈m t \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
neq: k <> j
hyp: (j, l) ∈m t '{ k | x ~> u}

(j, l) ∈m t \/ (j, l) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
l: LN
x: atom
neq: k <> j
hyp: (j, l) ∈m t /\ (j, l) <> (k, Fr x) \/ (j, l) ∈m u

(j, l) ∈m t \/ (j, l) ∈m u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) (x y : atom), y ∈ free U j (t '{ k | x ~> u}) -> y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) (x y : atom), y ∈ free U j (t '{ k | x ~> u}) -> y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) (x y : atom), (j, Fr y) ∈m t '{ k | x ~> u} -> (j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m t '{ k | x ~> u}

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m t /\ (j, Fr y) <> (k, Fr x) \/ (j, Fr y) ∈m u

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m t /\ (j, Fr y) <> (k, Fr x)

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m u
(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m t /\ (j, Fr y) <> (k, Fr x)

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
H1: (j, Fr y) ∈m t
H2: (j, Fr y) <> (k, Fr x)

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
H2: (k, Fr y) <> (k, Fr x)
H1: (k, Fr y) ∈m t
DESTR_EQs: k = k

(k, Fr y) ∈m t /\ k <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = k \/ (k, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
H1: (j, Fr y) ∈m t
H2: (j, Fr y) <> (k, Fr x)
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
H2: (k, Fr y) <> (k, Fr x)
H1: (k, Fr y) ∈m t
DESTR_EQs: k = k

(k, Fr y) ∈m t /\ k <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = k \/ (k, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
H2: (k, Fr y) <> (k, Fr x)
H1: (k, Fr y) ∈m t
DESTR_EQs: k = k

(k, Fr y) ∈m t /\ y <> x /\ k = k \/ (k, Fr y) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
H2: (k, Fr y) <> (k, Fr x)
H1: (k, Fr y) ∈m t
DESTR_EQs: k = k

(k, Fr y) ∈m t /\ y <> x /\ k = k
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
H2: (k, Fr y) <> (k, Fr x)
H1: (k, Fr y) ∈m t
DESTR_EQs: k = k

y <> x
intro contra; subst; contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
H1: (j, Fr y) ∈m t
H2: (j, Fr y) <> (k, Fr x)
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
hyp: (j, Fr y) ∈m u

(j, Fr y) ∈m t /\ j <> k \/ (k, Fr y) ∈m t /\ y <> x /\ k = j \/ (j, Fr y) ∈m u
eauto using in_subst_upper. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) -> y ∈ free U k t /\ y <> x \/ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) (x y : atom), y ∈ free U k (t '{ k | x ~> u}) -> y ∈ free U k t /\ y <> x \/ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
hyp: y ∈ free U k (t '{ k | x ~> u})

y ∈ free U k t /\ y <> x \/ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x, y: atom
hyp: y ∈ free U k t /\ k <> k \/ y ∈ free U k t /\ y <> x /\ k = k \/ y ∈ free (T k) k u

y ∈ free U k t /\ y <> x \/ y ∈ free (T k) k u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) -> y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) (x y : atom), k <> j -> y ∈ free U j (t '{ k | x ~> u}) -> y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
neq: k <> j
hyp: y ∈ free U j (t '{ k | x ~> u})

y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x, y: atom
neq: k <> j
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u

y ∈ free U j t \/ y ∈ free (T k) j u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x (y : AtomSet.elt), y `in` FV U j (t '{ k | x ~> u}) -> k = j /\ y `in` (FV U k t \\ {{x}} ∪ FV (T k) j u) \/ k <> j /\ y `in` (FV U j t ∪ FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x (y : AtomSet.elt), y `in` FV U j (t '{ k | x ~> u}) -> k = j /\ y `in` (FV U k t \\ {{x}} ∪ FV (T k) j u) \/ k <> j /\ y `in` (FV U j t ∪ FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x (y : AtomSet.elt), y `in` FV U j (t '{ k | x ~> u}) -> k = j /\ (y `in` (FV U k t \\ {{x}}) \/ y `in` FV (T k) j u) \/ k <> j /\ (y `in` FV U j t \/ y `in` FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x (y : AtomSet.elt), y `in` FV U j (t '{ k | x ~> u}) -> k = j /\ (y `in` FV U k t /\ y `notin` {{x}} \/ y `in` FV (T k) j u) \/ k <> j /\ (y `in` FV U j t \/ y `in` FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x (y : AtomSet.elt), y ∈ free U j (t '{ k | x ~> u}) -> k = j /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) j u) \/ k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j (t '{ k | x ~> u})

k = j /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) j u) \/ k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u

k = j /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) j u) \/ k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k \/ y ∈ free U k t /\ y <> x /\ k = k \/ y ∈ free (T k) k u
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u) \/ k <> k /\ (y ∈ free U k t \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
k = j /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) j u) \/ k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k \/ y ∈ free U k t /\ y <> x /\ k = k \/ y ∈ free (T k) k u
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u) \/ k <> k /\ (y ∈ free U k t \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k \/ y ∈ free U k t /\ y <> x /\ k = k \/ y ∈ free (T k) k u
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k
k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) k u
DESTR_EQs: k = k
k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ k <> k
DESTR_EQs: k = k

y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) k u
DESTR_EQs: k = k
k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

y ∈ free U k t /\ y `notin` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

y ∈ free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k
y `notin` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = k
DESTR_EQs: k = k

y `notin` {{x}}
fsetdec.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) k u
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) k u
DESTR_EQs: k = k

k = k /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) k u)
split; auto. }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

k = j /\ (y ∈ free U k t /\ y `notin` {{x}} \/ y ∈ free (T k) j u) \/ k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

k <> j /\ (y ∈ free U j t \/ y ∈ free (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k \/ y ∈ free U k t /\ y <> x /\ k = j \/ y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = j
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U j t /\ j <> k
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = j
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free U k t /\ y <> x /\ k = j
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
y: AtomSet.elt
hyp: y ∈ free (T k) j u
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

y ∈ free U j t \/ y ∈ free (T k) j u
intuition. } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) x, FV U k (t '{ k | x ~> u}) ⊆ FV U k t \\ {{x}} ∪ FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN) x, FV U k (t '{ k | x ~> u}) ⊆ FV U k t \\ {{x}} ∪ FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom

FV U k (t '{ k | x ~> u}) ⊆ FV U k t \\ {{x}} ∪ FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
a: AtomSet.elt
hyp: a `in` FV U k (t '{ k | x ~> u})

a `in` (FV U k t \\ {{x}} ∪ FV (T k) k u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
x: atom
a: AtomSet.elt
hyp: k = k /\ a `in` (FV U k t \\ {{x}} ∪ FV (T k) k u) \/ k <> k /\ a `in` (FV U k t ∪ FV (T k) k u)

a `in` (FV U k t \\ {{x}} ∪ FV (T k) k u)
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x (γ1 γ2 : AtomSet.t), scoped U k t γ1 -> scoped (T k) k u γ2 -> scoped U k (t '{ k | x ~> u}) (γ1 \\ {{x}} ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x (γ1 γ2 : AtomSet.t), scoped U k t γ1 -> scoped (T k) k u γ2 -> scoped U k (t '{ k | x ~> u}) (γ1 \\ {{x}} ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
γ1, γ2: AtomSet.t
St: scoped U k t γ1
Su: scoped (T k) k u γ2

scoped U k (t '{ k | x ~> u}) (γ1 \\ {{x}} ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
γ1, γ2: AtomSet.t
St: FV U k t ⊆ γ1
Su: FV (T k) k u ⊆ γ2

FV U k (t '{ k | x ~> u}) ⊆ γ1 \\ {{x}} ∪ γ2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
γ1, γ2: AtomSet.t
St: FV U k t ⊆ γ1
Su: FV (T k) k u ⊆ γ2

FV U k (t '{ k | x ~> u}) ⊆ ?y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
γ1, γ2: AtomSet.t
St: FV U k t ⊆ γ1
Su: FV (T k) k u ⊆ γ2
?y ⊆ γ1 \\ {{x}} ∪ γ2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
γ1, γ2: AtomSet.t
St: FV U k t ⊆ γ1
Su: FV (T k) k u ⊆ γ2

FV U k t \\ {{x}} ∪ FV (T k) k u ⊆ γ1 \\ {{x}} ∪ γ2
fsetdec. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x, k <> j -> FV U j (t '{ k | x ~> u}) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t (u : T k LN) x, k <> j -> FV U j (t '{ k | x ~> u}) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
H1: k <> j

FV U j (t '{ k | x ~> u}) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
H1: k <> j
a: AtomSet.elt
hyp: a `in` FV U j (t '{ k | x ~> u})

a `in` (FV U j t ∪ FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
u: T k LN
x: atom
H1: k <> j
a: AtomSet.elt
hyp: k = j /\ a `in` (FV U k t \\ {{x}} ∪ FV (T k) j u) \/ k <> j /\ a `in` (FV U j t ∪ FV (T k) j u)

a `in` (FV U j t ∪ FV (T k) j u)
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t j k (u : T j LN) x (γ1 γ2 : AtomSet.t), j <> k -> scoped U k t γ1 -> scoped (T j) k u γ2 -> scoped U k (t '{ j | x ~> u}) (γ1 ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t j k (u : T j LN) x (γ1 γ2 : AtomSet.t), j <> k -> scoped U k t γ1 -> scoped (T j) k u γ2 -> scoped U k (t '{ j | x ~> u}) (γ1 ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
j, k: K
u: T j LN
x: atom
γ1, γ2: AtomSet.t
St: j <> k
Su: scoped U k t γ1

scoped (T j) k u γ2 -> scoped U k (t '{ j | x ~> u}) (γ1 ∪ γ2)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
j, k: K
u: T j LN
x: atom
γ1, γ2: AtomSet.t
St: j <> k
Su: FV U k t ⊆ γ1

FV (T j) k u ⊆ γ2 -> FV U k (t '{ j | x ~> u}) ⊆ γ1 ∪ γ2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
j, k: K
u: T j LN
x: atom
γ1, γ2: AtomSet.t
St: j <> k
Su: FV U k t ⊆ γ1
H1: FV (T j) k u ⊆ γ2

FV U k (t '{ j | x ~> u}) ⊆ ?y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
j, k: K
u: T j LN
x: atom
γ1, γ2: AtomSet.t
St: j <> k
Su: FV U k t ⊆ γ1
H1: FV (T j) k u ⊆ γ2
?y ⊆ γ1 ∪ γ2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
j, k: K
u: T j LN
x: atom
γ1, γ2: AtomSet.t
St: j <> k
Su: FV U k t ⊆ γ1
H1: FV (T j) k u ⊆ γ2

FV U k t ∪ FV (T j) k u ⊆ γ1 ∪ γ2
fsetdec. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) l x, (k, l) ∈m t /\ l <> Fr x -> (k, l) ∈m t '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) l x, (k, l) ∈m t /\ l <> Fr x -> (k, l) ∈m t '{ k | x ~> u}
intros; rewrite in_subst_iff... Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) l x, k <> j -> (j, l) ∈m t -> (j, l) ∈m t '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) l x, k <> j -> (j, l) ∈m t -> (j, l) ∈m t '{ k | x ~> u}
intros; rewrite in_subst_iff... Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) (x y : atom), y ∈ free U k t /\ y <> x -> y ∈ free U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) (x y : atom), y ∈ free U k t /\ y <> x -> y ∈ free U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) (x y : atom), (k, Fr y) ∈m t /\ y <> x -> (k, Fr y) ∈m t '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x, y: atom
H1: (k, Fr y) ∈m t /\ y <> x

(k, Fr y) ∈m t '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x, y: atom
H1: (k, Fr y) ∈m t /\ y <> x

(k, Fr y) ∈m t /\ Fr y <> Fr x
now simpl_local. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) (x y : atom), k <> j -> y ∈ free U j t -> y ∈ free U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) (x y : atom), k <> j -> y ∈ free U j t -> y ∈ free U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) (x y : atom), k <> j -> (j, Fr y) ∈m t -> (j, Fr y) ∈m t '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x, y: atom
H1: k <> j
H2: (j, Fr y) ∈m t

(j, Fr y) ∈m t '{ k | x ~> u}
now apply in_subst_lower_neq. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, FV U k t \\ {{x}} ⊆ FV U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, FV U k t \\ {{x}} ⊆ FV U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom

FV U k t \\ {{x}} ⊆ FV U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a `in` (FV U k t \\ {{x}}) -> a `in` FV U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a `in` FV U k t /\ a `notin` {{x}} -> a `in` FV U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a ∈ free U k t /\ a `notin` {{x}} -> a ∈ free U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt
H1: a ∈ free U k t
H2: a `notin` {{x}}

a ∈ free U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt
H1: a ∈ free U k t
H2: a `notin` {{x}}

a ∈ free U k t /\ a <> x
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, FV U k t ⊆ FV U k (t '{ k | x ~> u}) ∪ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, FV U k t ⊆ FV U k (t '{ k | x ~> u}) ∪ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom

FV U k t ⊆ FV U k (t '{ k | x ~> u}) ∪ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a `in` FV U k t -> a `in` (FV U k (t '{ k | x ~> u}) ∪ {{x}})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a `in` FV U k t -> a `in` FV U k (t '{ k | x ~> u}) \/ a `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt

a ∈ free U k t -> a ∈ free U k (t '{ k | x ~> u}) \/ a `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
DESTR_EQs: x = x

x ∈ free U k t -> x ∈ free U k (t '{ k | x ~> u}) \/ x `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt
DESTR_NEQ: a <> x
DESTR_NEQs: x <> a
a ∈ free U k t -> a ∈ free U k (t '{ k | x ~> u}) \/ a `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
DESTR_EQs: x = x

x ∈ free U k t -> x ∈ free U k (t '{ k | x ~> u}) \/ x `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
DESTR_EQs: x = x
H1: x ∈ free U k t

x `in` {{x}}
fsetdec.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt
DESTR_NEQ: a <> x
DESTR_NEQs: x <> a

a ∈ free U k t -> a ∈ free U k (t '{ k | x ~> u}) \/ a `in` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
a: AtomSet.elt
DESTR_NEQ: a <> x
DESTR_NEQs: x <> a
H1: a ∈ free U k t

a ∈ free U k (t '{ k | x ~> u})
auto using in_free_subst_lower_eq. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, k <> j -> FV U j t ⊆ FV U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, k <> j -> FV U j t ⊆ FV U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
neq: k <> j

FV U j t ⊆ FV U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
neq: k <> j
a: AtomSet.elt

a `in` FV U j t -> a `in` FV U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
neq: k <> j
a: AtomSet.elt

a ∈ free U j t -> a ∈ free U j (t '{ k | x ~> u})
now apply in_free_subst_lower_neq. Qed. (** ** Substitution of fresh variables *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x (u : T k LN), ~ x ∈ free U k t -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x (u : T k LN), ~ x ∈ free U k t -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t

t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t

forall l, (k, l) ∈m t -> subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t
l: LN
H2: (k, l) ∈m t

subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t
l: LN
H2: (k, l) ∈m t

Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t
l: LN
H2: (k, l) ∈m t
H3: Fr x <> l
subst_loc k x u l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
u: T k LN
H1: ~ x ∈ free U k t
l: LN
H2: (k, l) ∈m t
H3: Fr x <> l

subst_loc k x u l = mret T k l
now simpl_local. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x (u : T k LN), x `notin` FV U k t -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x (u : T k LN), x `notin` FV U k t -> t '{ k | x ~> u} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x (u : T k LN), ~ x ∈ free U k t -> t '{ k | x ~> u} = t
apply subst_fresh. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, ~ x ∈ free U k t -> free U j (t '{ k | x ~> u}) = free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, ~ x ∈ free U k t -> free U j (t '{ k | x ~> u}) = free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
fresh: ~ x ∈ free U k t

free U j (t '{ k | x ~> u}) = free U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
fresh: ~ x ∈ free U k t

t = t '{ k | x ~> u}
rewrite subst_fresh... Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, ~ x ∈ free U k t -> free U k (t '{ k | x ~> u}) = free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, ~ x ∈ free U k t -> free U k (t '{ k | x ~> u}) = free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
fresh: ~ x ∈ free U k t

free U k (t '{ k | x ~> u}) = free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
fresh: ~ x ∈ free U k t

t = t '{ k | x ~> u}
now rewrite subst_fresh. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x `notin` FV U k t -> FV U j (t '{ k | x ~> u}) [=] FV U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x `notin` FV U k t -> FV U j (t '{ k | x ~> u}) [=] FV U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
fresh: x `notin` FV U k t

FV U j (t '{ k | x ~> u}) [=] FV U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
fresh: x `notin` FV U k t
y: AtomSet.elt

y `in` FV U j (t '{ k | x ~> u}) <-> y `in` FV U j t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
fresh: ~ x ∈ free U k t
y: AtomSet.elt

y ∈ free U j (t '{ k | x ~> u}) <-> y ∈ free U j t
now rewrite free_subst_fresh. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x `notin` FV U k t -> FV U k (t '{ k | x ~> u}) [=] FV U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x `notin` FV U k t -> FV U k (t '{ k | x ~> u}) [=] FV U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
H1: x `notin` FV U k t

FV U k (t '{ k | x ~> u}) [=] FV U k t
apply FV_subst_fresh; auto. Qed. End fix_dtm. (** ** Composing substitutions *) (******************************************************************************) Section fix_dtm. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Implicit Types (k : K) (j : K) (l : LN) (p : LN) (x : atom) (t : U LN) (w : list K) (n : nat).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall j k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> subst (T j) k2 x2 u2 ∘ btg k1 (subst_loc k1 x1 u1) j = subst (T j) k1 x1 (u1 '{ k2 | x2 ~> u2}) ∘ btg k2 (subst_loc k2 x2 u2) j
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall j k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> subst (T j) k2 x2 u2 ∘ btg k1 (subst_loc k1 x1 u1) j = subst (T j) k1 x1 (u1 '{ k2 | x2 ~> u2}) ∘ btg k2 (subst_loc k2 x2 u2) j
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

subst (T j) k2 x2 u2 ∘ btg k1 (subst_loc k1 x1 u1) j = subst (T j) k1 x1 (u1 '{ k2 | x2 ~> u2}) ∘ btg k2 (subst_loc k2 x2 u2) j
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN

(subst (T j) k2 x2 u2 ∘ btg k1 (subst_loc k1 x1 u1) j) l = (subst (T j) k1 x1 (u1 '{ k2 | x2 ~> u2}) ∘ btg k2 (subst_loc k2 x2 u2) j) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN

btg k1 (subst_loc k1 x1 u1) j l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) j l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

btg k1 (subst_loc k1 x1 u1) k1 l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) k1 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1
btg k1 (subst_loc k1 x1 u1) k2 l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) k2 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j
DESTR_NEQ1: k1 <> k2
DESTR_NEQs1: k2 <> k1
btg k1 (subst_loc k1 x1 u1) j l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) j l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

btg k1 (subst_loc k1 x1 u1) k1 l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) k1 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

subst_loc k1 x1 u1 l '{ k2 | x2 ~> u2} = mret T k1 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

subst_loc k1 x1 u1 l '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

subst_loc k1 x1 u1 (Fr x1) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Fr x1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
a: atom
H3: a <> x1
subst_loc k1 x1 u1 (Fr a) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
n: nat
subst_loc k1 x1 u1 (Bd n) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1

subst_loc k1 x1 u1 (Fr x1) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Fr x1)
rewrite 2(subst_loc_eq)...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
a: atom
H3: a <> x1

subst_loc k1 x1 u1 (Fr a) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
a: atom
H3: a <> x1

mret T k1 (Fr a) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Fr a)
now simpl_local.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
n: nat

subst_loc k1 x1 u1 (Bd n) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_EQs: k1 = k1
DESTR_NEQ: k1 <> k2
DESTR_NEQs: k2 <> k1
n: nat

mret T k1 (Bd n) '{ k2 | x2 ~> u2} = subst_loc k1 x1 (u1 '{ k2 | x2 ~> u2}) (Bd n)
now simpl_local.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

btg k1 (subst_loc k1 x1 u1) k2 l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) k2 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

mret T k2 l '{ k2 | x2 ~> u2} = subst_loc k2 x2 u2 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

subst_loc k2 x2 u2 l = subst_loc k2 x2 u2 l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

subst_loc k2 x2 u2 (Fr x2) = subst_loc k2 x2 u2 (Fr x2) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1
a: atom
H3: a <> x2
subst_loc k2 x2 u2 (Fr a) = subst_loc k2 x2 u2 (Fr a) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1
n: nat
subst_loc k2 x2 u2 (Bd n) = subst_loc k2 x2 u2 (Bd n) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

subst_loc k2 x2 u2 (Fr x2) = subst_loc k2 x2 u2 (Fr x2) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1

u2 = u2 '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
rewrite (subst_fresh (T k2))...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1
a: atom
H3: a <> x2

subst_loc k2 x2 u2 (Fr a) = subst_loc k2 x2 u2 (Fr a) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
simpl_local...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_NEQ0: k1 <> k2
DESTR_NEQs0: k2 <> k1
n: nat

subst_loc k2 x2 u2 (Bd n) = subst_loc k2 x2 u2 (Bd n) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
simpl_local...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j
DESTR_NEQ1: k1 <> k2
DESTR_NEQs1: k2 <> k1

btg k1 (subst_loc k1 x1 u1) j l '{ k2 | x2 ~> u2} = btg k2 (subst_loc k2 x2 u2) j l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
j, k1, k2: K
u1: T k1 LN
u2: T k2 LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j
DESTR_NEQ1: k1 <> k2
DESTR_NEQs1: k2 <> k1

mret T j l '{ k2 | x2 ~> u2} = mret T j l '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
now do 2 (rewrite subst_in_mret_neq; auto). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) t x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> (t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) t x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> (t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

(t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

kbind U k2 (subst_loc k2 x2 u2) (kbind U k1 (subst_loc k1 x1 u1) t) = kbind U k1 (subst_loc k1 x1 (kbind (T k1) k2 (subst_loc k2 x2 u2) u1)) (kbind U k2 (subst_loc k2 x2 u2) t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

(kbind U k2 (subst_loc k2 x2 u2) ∘ kbind U k1 (subst_loc k1 x1 u1)) t = kbind U k1 (subst_loc k1 x1 (kbind (T k1) k2 (subst_loc k2 x2 u2) u1)) (kbind U k2 (subst_loc k2 x2 u2) t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

(kbind U k2 (subst_loc k2 x2 u2) ∘ kbind U k1 (subst_loc k1 x1 u1)) t = (kbind U k1 (subst_loc k1 x1 (kbind (T k1) k2 (subst_loc k2 x2 u2) u1)) ∘ kbind U k2 (subst_loc k2 x2 u2)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

(mbind U (btg k2 (subst_loc k2 x2 u2)) ∘ mbind U (btg k1 (subst_loc k1 x1 u1))) t = (mbind U (btg k1 (subst_loc k1 x1 (mbind (T k1) (btg k2 (subst_loc k2 x2 u2)) u1))) ∘ mbind U (btg k2 (subst_loc k2 x2 u2))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

mbind U (fun k => mbind (T k) (btg k2 (subst_loc k2 x2 u2)) ○ btg k1 (subst_loc k1 x1 u1) k) t = mbind U (fun k => mbind (T k) (btg k1 (subst_loc k1 x1 (mbind (T k1) (btg k2 (subst_loc k2 x2 u2)) u1))) ○ btg k2 (subst_loc k2 x2 u2) k) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2

(fun k => mbind (T k) (btg k2 (subst_loc k2 x2 u2)) ○ btg k1 (subst_loc k1 x1 u1) k) = (fun k => mbind (T k) (btg k1 (subst_loc k1 x1 (mbind (T k1) (btg k2 (subst_loc k2 x2 u2)) u1))) ○ btg k2 (subst_loc k2 x2 u2) k)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
j: K

mbind (T j) (btg k2 (subst_loc k2 x2 u2)) ○ btg k1 (subst_loc k1 x1 u1) j = mbind (T j) (btg k1 (subst_loc k1 x1 (mbind (T k1) (btg k2 (subst_loc k2 x2 u2)) u1))) ○ btg k2 (subst_loc k2 x2 u2) j
now apply subst_subst_neq_loc. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) x1 x2, ~ x1 ∈ free (T k) k u2 -> x1 <> x2 -> subst (T k) k x2 u2 ∘ subst_loc k x1 u1 = subst (T k) k x1 (u1 '{ k | x2 ~> u2}) ∘ subst_loc k x2 u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) x1 x2, ~ x1 ∈ free (T k) k u2 -> x1 <> x2 -> subst (T k) k x2 u2 ∘ subst_loc k x1 u1 = subst (T k) k x1 (u1 '{ k | x2 ~> u2}) ∘ subst_loc k x2 u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

subst (T k) k x2 u2 ∘ subst_loc k x1 u1 = subst (T k) k x1 (u1 '{ k | x2 ~> u2}) ∘ subst_loc k x2 u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
l: LN

(subst (T k) k x2 u2 ∘ subst_loc k x1 u1) l = (subst (T k) k x1 (u1 '{ k | x2 ~> u2}) ∘ subst_loc k x2 u2) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
l: LN

subst_loc k x1 u1 l '{ k | x2 ~> u2} = subst_loc k x2 u2 l '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

subst_loc k x1 u1 (Fr x1) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr x1) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
a: atom
H3: a <> x1
subst_loc k x1 u1 (Fr a) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr a) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
n: nat
subst_loc k x1 u1 (Bd n) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Bd n) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

subst_loc k x1 u1 (Fr x1) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr x1) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
rewrite subst_loc_eq, subst_loc_neq, subst_in_mret_eq, subst_loc_eq...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
a: atom
H3: a <> x1

subst_loc k x1 u1 (Fr a) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr a) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
a: atom
H3: a <> x1

mret T k (Fr a) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr a) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1: atom
H1: ~ x1 ∈ free (T k) k u2
a: atom
H2: x1 <> a
H3: a <> x1
DESTR_EQs: a = a

mret T k (Fr a) '{ k | a ~> u2} = subst_loc k a u2 (Fr a) '{ k | x1 ~> u1 '{ k | a ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
a: atom
H3: a <> x1
DESTR_NEQ: x2 <> a
DESTR_NEQs: a <> x2
mret T k (Fr a) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr a) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1: atom
H1: ~ x1 ∈ free (T k) k u2
a: atom
H2: x1 <> a
H3: a <> x1
DESTR_EQs: a = a

mret T k (Fr a) '{ k | a ~> u2} = subst_loc k a u2 (Fr a) '{ k | x1 ~> u1 '{ k | a ~> u2}}
rewrite subst_in_mret_eq, subst_loc_eq, (subst_fresh (T k))...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
a: atom
H3: a <> x1
DESTR_NEQ: x2 <> a
DESTR_NEQs: a <> x2

mret T k (Fr a) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Fr a) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
rewrite subst_loc_neq, 2(subst_in_mret_eq), 2(subst_loc_neq)...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2
n: nat

subst_loc k x1 u1 (Bd n) '{ k | x2 ~> u2} = subst_loc k x2 u2 (Bd n) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
rewrite 2(subst_loc_b), 2(subst_in_mret_eq), 2(subst_loc_b)... Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x1 x2, ~ x1 ∈ free (T k) k u2 -> x1 <> x2 -> (t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x1 x2, ~ x1 ∈ free (T k) k u2 -> x1 <> x2 -> (t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

(t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1 '{ k | x2 ~> u2}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

kbind U k (subst_loc k x2 u2) (kbind U k (subst_loc k x1 u1) t) = kbind U k (subst_loc k x1 (kbind (T k) k (subst_loc k x2 u2) u1)) (kbind U k (subst_loc k x2 u2) t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

(kbind U k (subst_loc k x2 u2) ∘ kbind U k (subst_loc k x1 u1)) t = (kbind U k (subst_loc k x1 (kbind (T k) k (subst_loc k x2 u2) u1)) ∘ kbind U k (subst_loc k x2 u2)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

kbind U k (subst_loc k x2 u2 ⋆km subst_loc k x1 u1) t = kbind U k (subst_loc k x1 (kbind (T k) k (subst_loc k x2 u2) u1) ⋆km subst_loc k x2 u2) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: ~ x1 ∈ free (T k) k u2
H2: x1 <> x2

subst_loc k x2 u2 ⋆km subst_loc k x1 u1 = subst_loc k x1 (kbind (T k) k (subst_loc k x2 u2) u1) ⋆km subst_loc k x2 u2
now apply subst_subst_eq_local. Qed. (** ** Commuting two substitutions *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x1 x2, x1 <> x2 -> ~ x1 ∈ free (T k) k u2 -> ~ x2 ∈ free (T k) k u1 -> (t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x1 x2, x1 <> x2 -> ~ x1 ∈ free (T k) k u2 -> ~ x2 ∈ free (T k) k u1 -> (t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: x1 <> x2
H2: ~ x1 ∈ free (T k) k u2
H3: ~ x2 ∈ free (T k) k u1

(t '{ k | x1 ~> u1}) '{ k | x2 ~> u2} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x1, x2: atom
H1: x1 <> x2
H2: ~ x1 ∈ free (T k) k u2
H3: ~ x2 ∈ free (T k) k u1

(t '{ k | x2 ~> u2}) '{ k | x1 ~> u1 '{ k | x2 ~> u2}} = (t '{ k | x2 ~> u2}) '{ k | x1 ~> u1}
rewrite (subst_fresh (T k)); auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) t x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> ~ x2 ∈ free (T k1) k2 u1 -> (t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) t x1 x2, k1 <> k2 -> ~ x1 ∈ free (T k2) k1 u2 -> ~ x2 ∈ free (T k1) k2 u1 -> (t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
H3: ~ x2 ∈ free (T k1) k2 u1

(t '{ k1 | x1 ~> u1}) '{ k2 | x2 ~> u2} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
t: U LN
x1, x2: atom
H1: k1 <> k2
H2: ~ x1 ∈ free (T k2) k1 u2
H3: ~ x2 ∈ free (T k1) k2 u1

(t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1 '{ k2 | x2 ~> u2}} = (t '{ k2 | x2 ~> u2}) '{ k1 | x1 ~> u1}
rewrite (subst_fresh (T k1)); auto. Qed. (** ** Local closure is preserved by substitution *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t x, LC U k t -> LC (T k) k u -> LC U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t x, LC U k t -> LC (T k) k u -> LC U k (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t x, LCn U k 0 t -> LCn (T k) k 0 u -> LCn U k 0 (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
hin: (w, k, l) ∈md t '{ k | x ~> u}

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
hin: (w, k, l) ∈md t /\ l <> Fr x \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, k, l) ∈md u /\ w = w1 ● w2)

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
H1: (w, k, l) ∈md t
H2: l <> Fr x

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, l) ∈md u
h3: w = n1 ● n2
lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
H1: (w, k, l) ∈md t
H2: l <> Fr x

lc_loc k 0 (w, l)
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
w: list K
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, l) ∈md u
h3: w = n1 ● n2

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
lcu: LCn (T k) k 0 u
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, l) ∈md u

lc_loc k 0 (n1 ● n2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
l: LN
n2: list K
lcu: lc_loc k 0 (n2, l)
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, l) ∈md u

lc_loc k 0 (n1 ● n2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
l: LN
n2: list K
lcu: match l with | Fr _ => True | Bd n => n < countk k n2 + 0 end
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, l) ∈md u

match l with | Fr _ => True | Bd n => n < countk k (n1 ● n2) + 0 end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
n: nat
n2: list K
lcu: n < countk k n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, Bd n) ∈md u

n < countk k (n1 ● n2) + 0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
n: nat
n2: list K
lcu: n < countk k n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, Bd n) ∈md u

n < countk k (n1 ++ n2) + 0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
lct: LCn U k 0 t
n: nat
n2: list K
lcu: n < countk k n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, k, Bd n) ∈md u

n < countk k n1 + countk k n2 + 0
lia. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j (u : T k LN) t x, k <> j -> LC U j t -> LC (T k) j u -> LC U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j (u : T k LN) t x, k <> j -> LC U j t -> LC (T k) j u -> LC U j (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j (u : T k LN) t x, k <> j -> LCn U j 0 t -> LCn (T k) j 0 u -> LCn U j 0 (t '{ k | x ~> u})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
hin: (w, j, l) ∈md t '{ k | x ~> u}

lc_loc j 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
hin: (w, j, l) ∈md t \/ (exists w1 w2, (w1, k, Fr x) ∈md t /\ (w2, j, l) ∈md u /\ w = w1 ● w2)

lc_loc j 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
H1: (w, j, l) ∈md t

lc_loc j 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, l) ∈md u
h3: w = n1 ● n2
lc_loc j 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
H1: (w, j, l) ∈md t

lc_loc j 0 (w, l)
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
w: list K
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, l) ∈md u
h3: w = n1 ● n2

lc_loc j 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
lcu: LCn (T k) j 0 u
l: LN
n1, n2: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, l) ∈md u

lc_loc j 0 (n1 ● n2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
l: LN
n2: list K
lcu: lc_loc j 0 (n2, l)
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, l) ∈md u

lc_loc j 0 (n1 ● n2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
l: LN
n2: list K
lcu: match l with | Fr _ => True | Bd n => n < countk j n2 + 0 end
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, l) ∈md u

match l with | Fr _ => True | Bd n => n < countk j (n1 ● n2) + 0 end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
n: nat
n2: list K
lcu: n < countk j n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, Bd n) ∈md u

n < countk j (n1 ● n2) + 0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
n: nat
n2: list K
lcu: n < countk j n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, Bd n) ∈md u

n < countk j (n1 ++ n2) + 0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
u: T k LN
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
n: nat
n2: list K
lcu: n < countk j n2 + 0
n1: list K
h1: (n1, k, Fr x) ∈md t
h2: (n2, j, Bd n) ∈md u

n < countk j n1 + countk j n2 + 0
lia. Qed. (** ** Decompose substitution into closing/opening *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w l x, subst_loc k x u l = open_loc k u (w, close_loc k x (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w l x, subst_loc k x u l = open_loc k u (w, close_loc k x (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
l: LN
x: atom

subst_loc k x u l = open_loc k u (w, close_loc k x (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom

u = open_loc k u (w, close_loc k x (w, Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x, a: atom
H1: a <> x
mret T k (Fr a) = open_loc k u (w, close_loc k x (w, Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat
mret T k (Bd n) = open_loc k u (w, close_loc k x (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom

u = open_loc k u (w, close_loc k x (w, Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom

u = match (if x == x then Bd (countk k w) else Fr x) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
DESTR_EQ, DESTR_EQs: x = x

u = match Nat.compare (countk k w) (countk k w) with | Eq => u | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
DESTR_EQ, DESTR_EQs: x = x

u = match Nat.compare (countk k w) (countk k w) with | Eq => u | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
compare naturals (countk k w) and (countk k w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x, a: atom
H1: a <> x

mret T k (Fr a) = open_loc k u (w, close_loc k x (w, Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x, a: atom
H1: a <> x

mret T k (Fr a) = match (if x == a then Bd (countk k w) else Fr a) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end
compare values x and a. (* todo fix fragile names *)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat

mret T k (Bd n) = open_loc k u (w, close_loc k x (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat

mret T k (Bd n) = match match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat

mret T k (Bd n) = match match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

mret T k (Bd (countk k w)) = match Nat.compare (S (countk k w)) (countk k w) with | Eq => u | Lt => mret T k (Bd (S (countk k w))) | Gt => mret T k (Bd (S (countk k w) - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
mret T k (Bd n) = match Nat.compare (S n) (countk k w) with | Eq => u | Lt => mret T k (Bd (S n)) | Gt => mret T k (Bd (S n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
x: atom
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

mret T k (Bd n) = match Nat.compare (S n) (countk k w) with | Eq => u | Lt => mret T k (Bd (S n)) | Gt => mret T k (Bd (S n - 1)) end
now compare naturals (Datatypes.S n) and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x (u : T k LN) t, t '{ k | x ~> u} = ('[ k | x] t) '( k | u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x (u : T k LN) t, t '{ k | x ~> u} = ('[ k | x] t) '( k | u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

t '{ k | x ~> u} = ('[ k | x] t) '( k | u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

t '{ k | x ~> u} = (open U k u ∘ close U k x) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

kbind U k (subst_loc k x u) t = (kbindd U k (open_loc k u) ∘ kmapd U k (close_loc k x)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

kbind U k (subst_loc k x u) t = kbindd U k (fun '(w, a) => open_loc k u (w, close_loc k x (w, a))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

kbindd U k (fun '(w, a) => open_loc k u (w, close_loc k x (w, a))) t = kbind U k (subst_loc k x u) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN

forall w (a : LN), (w, k, a) ∈md t -> open_loc k u (w, close_loc k x (w, a)) = subst_loc k x u a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
u: T k LN
t: U LN
w: list K
a: LN
H1: (w, k, a) ∈md t

subst_loc k x u a = open_loc k u (w, close_loc k x (w, a))
apply subst_spec_local. Qed. (** ** Substitution when <<u>> is a LN **) (******************************************************************************) Definition subst_loc_LN k x (u : LN) : LN -> LN := fun l => match l with | Fr y => if x == y then u else Fr y | Bd n => Bd n end.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l, subst U k x (mret T k l) = kmap U k (subst_loc_LN k x l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x l, subst U k x (mret T k l) = kmap U k (subst_loc_LN k x l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN

subst U k x (mret T k l) = kmap U k (subst_loc_LN k x l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN

kbind U k (subst_loc k x (mret T k l)) = kmap U k (subst_loc_LN k x l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN

kbind U k (subst_loc k x (mret T k l)) t = kmap U k (subst_loc_LN k x l) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN

forall a : LN, (k, a) ∈m t -> subst_loc k x (mret T k l) a = mret T k (subst_loc_LN k x l a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
l': LN
Hin: (k, l') ∈m t

subst_loc k x (mret T k l) l' = mret T k (subst_loc_LN k x l l')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
n: atom
Hin: (k, Fr n) ∈m t

subst_loc k x (mret T k l) (Fr n) = mret T k (subst_loc_LN k x l (Fr n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
n: nat
Hin: (k, Bd n) ∈m t
subst_loc k x (mret T k l) (Bd n) = mret T k (subst_loc_LN k x l (Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
n: atom
Hin: (k, Fr n) ∈m t

subst_loc k x (mret T k l) (Fr n) = mret T k (subst_loc_LN k x l (Fr n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
n: atom
Hin: (k, Fr n) ∈m t

(if x == n then mret T k l else mret T k (Fr n)) = mret T k (if x == n then l else Fr n)
compare values x and n.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
l: LN
t: U LN
n: nat
Hin: (k, Bd n) ∈m t

subst_loc k x (mret T k l) (Bd n) = mret T k (subst_loc_LN k x l (Bd n))
reflexivity. Qed. (** ** Substitution by the same variable is the identity *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x, t '{ k | x ~> mret T k (Fr x)} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k x, t '{ k | x ~> mret T k (Fr x)} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom

t '{ k | x ~> mret T k (Fr x)} = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom

forall l, (k, l) ∈m t -> subst_loc k x (mret T k (Fr x)) l = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x: atom
l: LN
H1: (k, l) ∈m t

subst_loc k x (mret T k (Fr x)) l = mret T k l
compare l to atom x; now simpl_local. Qed. End fix_dtm. End subst_metatheory. (** ** Metatheory for <<close>> *) (******************************************************************************) Section close_metatheory. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Implicit Types (k : K) (j : K) (l : LN) (p : LN) (x : atom) (t : U LN) (w : list K) (n : nat). (** ** Free variables after variable closing *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w l t (x y : atom), (w, k, l) ∈md t -> Fr y = close_loc k x (w, l) -> (k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k w l t (x y : atom), (w, k, l) ∈md t -> Fr y = close_loc k x (w, l) -> (k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
l: LN
t: U LN
x, y: atom
lin: (w, k, l) ∈md t
heq: Fr y = close_loc k x (w, l)

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
la: atom
t: U LN
x, y: atom
lin: (w, k, Fr la) ∈md t
heq: Fr y = close_loc k x (w, Fr la)

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
ln: nat
t: U LN
x, y: atom
lin: (w, k, Bd ln) ∈md t
heq: Fr y = close_loc k x (w, Bd ln)
(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
la: atom
t: U LN
x, y: atom
lin: (w, k, Fr la) ∈md t
heq: Fr y = close_loc k x (w, Fr la)

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
la: atom
t: U LN
x, y: atom
lin: (w, k, Fr la) ∈md t
heq: Fr y = (if x == la then Bd (countk k w) else Fr la)

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
la: atom
t: U LN
x, y: atom
lin: (w, k, Fr la) ∈md t
DESTR_NEQ: x <> la
heq: Fr y = Fr la
DESTR_NEQs: la <> x

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
la: atom
t: U LN
x: atom
lin: (w, k, Fr la) ∈md t
DESTR_NEQ: x <> la
DESTR_NEQs: la <> x

(k, Fr la) ∈m t /\ x <> la
now apply (inmd_implies_in U) in lin.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
ln: nat
t: U LN
x, y: atom
lin: (w, k, Bd ln) ∈md t
heq: Fr y = close_loc k x (w, Bd ln)

(k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
w: list K
ln: nat
t: U LN
x, y: atom
lin: (w, k, Bd ln) ∈md t
heq: Fr y = match Nat.compare ln (countk k w) with | Lt => Bd ln | _ => Bd (S ln) end

(k, Fr y) ∈m t /\ x <> y
compare_nats_args ln (countk k w); discriminate. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (x y : atom), x <> y -> (k, Fr y) ∈m t -> exists w l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (x y : atom), x <> y -> (k, Fr y) ∈m t -> exists w l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
yin: (k, Fr y) ∈m t

exists w l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
yin: exists w, (w, k, Fr y) ∈md t

exists w l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
w: list K
yin: (w, k, Fr y) ∈md t

exists w l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
w: list K
yin: (w, k, Fr y) ∈md t

exists l, (w, k, l) ∈md t /\ Fr y = close_loc k x (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
w: list K
yin: (w, k, Fr y) ∈md t

(w, k, Fr y) ∈md t /\ Fr y = close_loc k x (w, Fr y)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
x, y: atom
neq: x <> y
w: list K
yin: (w, k, Fr y) ∈md t

(w, k, Fr y) ∈md t /\ Fr y = (if x == y then Bd (countk k w) else Fr y)
compare values x and y. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (x y : atom), y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (x y : atom), y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)) <-> y ∈ free U k t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)) <-> (k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)) -> (k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
(k, Fr y) ∈m t /\ x <> y -> exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)) -> (k, Fr y) ∈m t /\ x <> y
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
x0: list K
x1: LN
H1: (x0, k, x1) ∈md t
H2: Fr y = close_loc k x (x0, x1)

(k, Fr y) ∈m t /\ x <> y
eauto using in_free_close_iff_loc_1.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom

(k, Fr y) ∈m t /\ x <> y -> exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
H1: (k, Fr y) ∈m t
H2: x <> y

exists w l1, (w, k, l1) ∈md t /\ Fr y = close_loc k x (w, l1)
eauto using in_free_close_iff_loc_2. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (x y : atom), y <> x -> y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (x y : atom), y <> x -> y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
H1: y <> x

y ∈ free U k ('[ k | x] t) <-> y ∈ free U k t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x, y: atom
H1: y <> x

y ∈ free U k t /\ x <> y <-> y ∈ free U k t
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, FV U k ('[ k | x] t) [=] FV U k t \\ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, FV U k ('[ k | x] t) [=] FV U k t \\ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

FV U k ('[ k | x] t) [=] FV U k t \\ {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
a: AtomSet.elt

a `in` FV U k ('[ k | x] t) <-> a `in` (FV U k t \\ {{x}})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
a: AtomSet.elt

a `in` FV U k ('[ k | x] t) <-> a `in` FV U k t /\ a `notin` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
a: AtomSet.elt

a ∈ free U k ('[ k | x] t) <-> a ∈ free U k t /\ a `notin` {{x}}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
a: AtomSet.elt

a ∈ free U k t /\ x <> a <-> a ∈ free U k t /\ a `notin` {{x}}
fsetdec. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, ~ x ∈ free U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, ~ x ∈ free U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

~ x ∈ free U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

~ (x ∈ free U k t /\ x <> x)
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, x `notin` FV U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, x `notin` FV U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

x `notin` FV U k ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

~ x ∈ free U k ('[ k | x] t)
apply nin_free_close. Qed. (** ** Variable closing and local closure *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, LC U k t -> LCn U k 1 ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, LC U k t -> LCn U k 1 ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, LCn U k 0 t -> LCn U k 1 ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
l: LN
hin: (w, k, l) ∈md '[ k | x] t

lc_loc k 1 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
l: LN
hin: exists l1, (w, k, l1) ∈md t /\ l = close_loc k x (w, l1)

lc_loc k 1 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
l, l1: LN
H1: (w, k, l1) ∈md t
H2: l = close_loc k x (w, l1)

lc_loc k 1 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
H1: (w, k, Fr x) ∈md t

lc_loc k 1 (w, close_loc k x (w, Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
a: atom
H1: (w, k, Fr a) ∈md t
H3: a <> x
lc_loc k 1 (w, close_loc k x (w, Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
n: nat
H1: (w, k, Bd n) ∈md t
lc_loc k 1 (w, close_loc k x (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
H1: (w, k, Fr x) ∈md t

lc_loc k 1 (w, close_loc k x (w, Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
H1: (w, k, Fr x) ∈md t

match (if x == x then Bd (countk k w) else Fr x) with | Fr _ => True | Bd n => n < countk k w + 1 end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
H1: (w, k, Fr x) ∈md t
DESTR_EQ, DESTR_EQs: x = x

countk k w < countk k w + 1
unfold_monoid; lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
a: atom
H1: (w, k, Fr a) ∈md t
H3: a <> x

lc_loc k 1 (w, close_loc k x (w, Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
a: atom
H1: (w, k, Fr a) ∈md t
H3: a <> x

match (if x == a then Bd (countk k w) else Fr a) with | Fr _ => True | Bd n => n < countk k w + 1 end
compare values x and a.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
n: nat
H1: (w, k, Bd n) ∈md t

lc_loc k 1 (w, close_loc k x (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
n: nat
H1: (w, k, Bd n) ∈md t

match match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end with | Fr _ => True | Bd n => n < countk k w + 1 end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
H1: (w, k, Bd (countk k w)) ∈md t

S (countk k w) < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
n: nat
H1: (w, k, Bd n) ∈md t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
S n < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
H1: (w, k, Bd (countk k w)) ∈md t

S (countk k w) < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
w: list K
lct: lc_loc k 0 (w, Bd (countk k w))
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
H1: (w, k, Bd (countk k w)) ∈md t

S (countk k w) < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
w: list K
lct: countk k w < countk k w + 0
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
H1: (w, k, Bd (countk k w)) ∈md t

S (countk k w) < countk k w + 1
now unfold_monoid; lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
lct: LCn U k 0 t
w: list K
n: nat
H1: (w, k, Bd n) ∈md t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

S n < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
w: list K
n: nat
lct: lc_loc k 0 (w, Bd n)
H1: (w, k, Bd n) ∈md t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

S n < countk k w + 1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom
w: list K
n: nat
lct: n < countk k w + 0
H1: (w, k, Bd n) ∈md t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

S n < countk k w + 1
now unfold_monoid; lia. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t x, k <> j -> LC U j t -> LC U j ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t x, k <> j -> LC U j t -> LC U j ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t x, k <> j -> LCn U j 0 t -> LCn U j 0 ('[ k | x] t)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
neq: k <> j
lct: LCn U j 0 t
w: list K
l: LN
hin: (w, j, l) ∈md '[ k | x] t

lc_loc j 0 (w, l)
rewrite (inmd_close_neq_iff U) in hin; auto. Qed. End close_metatheory. (** ** Metatheory for <<open>> *) (******************************************************************************) Section open_metatheory. Context (U : Type -> Type) `{MultiDecoratedTraversablePreModule (list K) T U (mn_op := Monoid_op_list) (mn_unit := Monoid_unit_list)} `{! MultiDecoratedTraversableMonad (list K) T}. Implicit Types (k : K) (j : K) (l : LN) (p : LN) (x : atom) (t : U LN) (w : list K) (n : nat). (** ** Upper and lower bounds on free variables after opening *) (******************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) w l x, (k, l) ∈m t -> x ∈ free (T k) j (open_loc k u (w, l)) -> k = j /\ l = Fr x /\ x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) w l x, (k, l) ∈m t -> x ∈ free (T k) j (open_loc k u (w, l)) -> k = j /\ l = Fr x /\ x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
l: LN
x: atom
lin: (k, l) ∈m t
xin: x ∈ free (T k) j (open_loc k u (w, l))

k = j /\ l = Fr x /\ x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
l: LN
x: atom
lin: (k, l) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, l)

k = j /\ l = Fr x /\ x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
l: LN
x: atom
lin: (k, l) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, l)

k = j /\ l = Fr x /\ (j, Fr x) ∈m t \/ (j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
y, x: atom
lin: (k, Fr y) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Fr y)

k = j /\ Fr y = Fr x /\ (j, Fr x) ∈m t \/ (j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Bd n)
k = j /\ Bd n = Fr x /\ (j, Fr x) ∈m t \/ (j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
y, x: atom
lin: (k, Fr y) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Fr y)

k = j /\ Fr y = Fr x /\ (j, Fr x) ∈m t \/ (j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
y, x: atom
lin: (k, Fr y) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Fr y)

k = j /\ Fr y = Fr x /\ (j, Fr x) ∈m t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
y, x: atom
lin: (k, Fr y) ∈m t
xin: k = j /\ y = x

k = j /\ Fr y = Fr x /\ (j, Fr x) ∈m t
inverts xin...
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Bd n)

k = j /\ Bd n = Fr x /\ (j, Fr x) ∈m t \/ (j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m open_loc k u (w, Bd n)

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd n)
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
x: atom
lin: (k, Bd (countk k w)) ∈m t
xin: (j, Fr x) ∈m u
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd (n - 1))
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd n)
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

~ (j, Fr x) ∈m mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

~ (k = j /\ False)
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
x: atom
lin: (k, Bd (countk k w)) ∈m t
xin: (j, Fr x) ∈m u
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd (n - 1))
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
x: atom
lin: (k, Bd (countk k w)) ∈m t
xin: (j, Fr x) ∈m u
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

(j, Fr x) ∈m u
assumption.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd (n - 1))
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
xin: (j, Fr x) ∈m mret T k (Bd (n - 1))
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

(j, Fr x) ∈m u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

~ (j, Fr x) ∈m mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
n: nat
x: atom
lin: (k, Bd n) ∈m t
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

~ (k = j /\ False)
intuition. } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) w l x, (k, l) ∈m t -> x ∈ free (T k) k (open_loc k u (w, l)) -> x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) w l x, (k, l) ∈m t -> x ∈ free (T k) k (open_loc k u (w, l)) -> x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
w: list K
l: LN
x: atom
lin: (k, l) ∈m t
xin: x ∈ free (T k) k (open_loc k u (w, l))

x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
w: list K
l: LN
x: atom
lin: (k, l) ∈m t
xin: k = k /\ l = Fr x /\ x ∈ free U k t \/ x ∈ free (T k) k u

x ∈ free U k t \/ x ∈ free (T k) k u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) w l x, k <> j -> (k, l) ∈m t -> x ∈ free (T k) j (open_loc k u (w, l)) -> x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) w l x, k <> j -> (k, l) ∈m t -> x ∈ free (T k) j (open_loc k u (w, l)) -> x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
l: LN
x: atom
neq: k <> j
lin: (k, l) ∈m t
xin: x ∈ free (T k) j (open_loc k u (w, l))

x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
w: list K
l: LN
x: atom
neq: k <> j
lin: (k, l) ∈m t
xin: k = j /\ l = Fr x /\ x ∈ free U j t \/ x ∈ free (T k) j u

x ∈ free (T k) j u
intuition. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x ∈ free U j (t '( k | u)) -> x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x ∈ free U j (t '( k | u)) -> x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j (t '( k | u))

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: x ∈ free U k (t '( k | u))
DESTR_EQs: k = k

x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j (t '( k | u))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: x ∈ free U k (t '( k | u))
DESTR_EQs: k = k

x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: exists w l1, (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1))
DESTR_EQs: k = k

x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
l: LN
hin: (w, k, l) ∈md t
H1: x ∈ free (T k) k (open_loc k u (w, l))
DESTR_EQs: k = k

x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
l: LN
hin: (k, l) ∈m t
H1: x ∈ free (T k) k (open_loc k u (w, l))
DESTR_EQs: k = k

x ∈ free U k t \/ x ∈ free (T k) k u
eauto using free_open_upper_local_eq.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j (t '( k | u))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j t \/ (exists w l1, (w, k, l1) ∈md t /\ x ∈ free (T k) j (open_loc k u (w, l1)))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
H1: x ∈ free U j t
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
w: list K
l: LN
hin: (w, k, l) ∈md t
H1: x ∈ free (T k) j (open_loc k u (w, l))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
w: list K
l: LN
hin: (w, k, l) ∈md t
H1: x ∈ free (T k) j (open_loc k u (w, l))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
w: list K
l: LN
hin: (k, l) ∈m t
H1: x ∈ free (T k) j (open_loc k u (w, l))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j t \/ x ∈ free (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
w: list K
l: LN
hin: (k, l) ∈m t
H1: x ∈ free (T k) j (open_loc k u (w, l))
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free (T k) j u
eauto using free_open_upper_local_neq. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN), FV U j (t '( k | u)) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN), FV U j (t '( k | u)) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN

FV U j (t '( k | u)) ⊆ FV U j t ∪ FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
a: AtomSet.elt

a `in` FV U j (t '( k | u)) -> a `in` (FV U j t ∪ FV (T k) j u)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
a: AtomSet.elt

a `in` FV U j (t '( k | u)) -> a `in` FV U j t \/ a `in` FV (T k) j u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
a: AtomSet.elt

a ∈ free U j (t '( k | u)) -> a ∈ free U j t \/ a ∈ free (T k) j u
auto using free_open_upper. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x ∈ free U k (t '( k | u)) -> x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x ∈ free U k (t '( k | u)) -> x ∈ free U k t \/ x ∈ free (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
H1: x ∈ free U k (t '( k | u))

x ∈ free U k t \/ x ∈ free (T k) k u
auto using free_open_upper. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN), FV U k (t '( k | u)) ⊆ FV U k t ∪ FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN), FV U k (t '( k | u)) ⊆ FV U k t ∪ FV (T k) k u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN

FV U k (t '( k | u)) ⊆ FV U k t ∪ FV (T k) k u
apply FV_open_upper. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x ∈ free U j t -> x ∈ free U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN) x, x ∈ free U j t -> x ∈ free U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j t

x ∈ free U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: x ∈ free U k t
DESTR_EQs: k = k

x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j t
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j
x ∈ free U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: x ∈ free U k t
DESTR_EQs: k = k

x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: (k, Fr x) ∈m t
DESTR_EQs: k = k

x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
xin: exists w, (w, k, Fr x) ∈md t
DESTR_EQs: k = k

x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
xin: (w, k, Fr x) ∈md t
DESTR_EQs: k = k

x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
xin: (w, k, Fr x) ∈md t
DESTR_EQs: k = k

exists w l1, (w, k, l1) ∈md t /\ x ∈ free (T k) k (open_loc k u (w, l1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
xin: (w, k, Fr x) ∈md t
DESTR_EQs: k = k

exists w l1, (w, k, l1) ∈md t /\ (k, Fr x) ∈m open_loc k u (w, l1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
w: list K
xin: (w, k, Fr x) ∈md t
DESTR_EQs: k = k

(w, k, Fr x) ∈md t /\ (k, Fr x) ∈m open_loc k u (w, Fr x)
now autorewrite with tea_local.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
x: atom
xin: x ∈ free U j t
DESTR_NEQ: j <> k
DESTR_NEQs: k <> j

x ∈ free U j (t '( k | u))
rewrite (free_open_neq_iff U); auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x ∈ free U k t -> x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN) x, x ∈ free U k t -> x ∈ free U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN
x: atom
H1: x ∈ free U k t

x ∈ free U k (t '( k | u))
auto using free_open_lower. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN), FV U j t ⊆ FV U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k j (u : T k LN), FV U j t ⊆ FV U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN

FV U j t ⊆ FV U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
a: AtomSet.elt

a `in` FV U j t -> a `in` FV U j (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k, j: K
u: T k LN
a: AtomSet.elt

a ∈ free U j t -> a ∈ free U j (t '( k | u))
apply free_open_lower. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN), FV U k t ⊆ FV U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall t k (u : T k LN), FV U k t ⊆ FV U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
t: U LN
k: K
u: T k LN

FV U k t ⊆ FV U k (t '( k | u))
apply FV_open_lower. Qed. (** ** Opening a locally closed term is the identity *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w l, lc_loc k 0 (w, l) -> open_loc k u (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) w l, lc_loc k 0 (w, l) -> open_loc k u (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
l: LN
hyp: lc_loc k 0 (w, l)

open_loc k u (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
a: atom
hyp: lc_loc k 0 (w, Fr a)

open_loc k u (w, Fr a) = mret T k (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
n: nat
hyp: lc_loc k 0 (w, Bd n)
open_loc k u (w, Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
a: atom
hyp: lc_loc k 0 (w, Fr a)

open_loc k u (w, Fr a) = mret T k (Fr a)
reflexivity.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
n: nat
hyp: lc_loc k 0 (w, Bd n)

open_loc k u (w, Bd n) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
w: list K
n: nat
hyp: n < countk k w + 0

match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd n)
compare naturals n and (countk k w); unfold_monoid; lia. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN), LC U k t -> t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN), LC U k t -> t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
lc: LC U k t

t '( k | u) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
lc: LC U k t

forall w l, (w, k, l) ∈md t -> open_loc k u (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
lc: LC U k t
w: list K
l: LN
lin: (w, k, l) ∈md t

open_loc k u (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
w: list K
l: LN
lc: lc_loc k 0 (w, l)
lin: (w, k, l) ∈md t

open_loc k u (w, l) = mret T k l
destruct l; auto using open_lc_local. Qed. (** ** Opening followed by substitution *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) x, LC (T k) k u2 -> subst (T k) k x u2 ∘ open_loc k u1 = open_loc k (u1 '{ k | x ~> u2}) ⋆kdm (subst_loc k x u2 ∘ snd)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) x, LC (T k) k u2 -> subst (T k) k x u2 ∘ open_loc k u1 = open_loc k (u1 '{ k | x ~> u2}) ⋆kdm (subst_loc k x u2 ∘ snd)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2

subst (T k) k x u2 ∘ open_loc k u1 = open_loc k (u1 '{ k | x ~> u2}) ⋆kdm (subst_loc k x u2 ∘ snd)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
l: LN

(subst (T k) k x u2 ∘ open_loc k u1) (w, l) = (open_loc k (u1 '{ k | x ~> u2}) ⋆kdm (subst_loc k x u2 ∘ snd)) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
l: LN

(subst (T k) k x u2 ∘ open_loc k u1) (w, l) = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ∘ incr w) ((subst_loc k x u2 ∘ snd) (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
l: LN

open_loc k u1 (w, l) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, l)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K

open_loc k u1 (w, Fr x) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
a: atom
H1: a <> x
open_loc k u1 (w, Fr a) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Fr a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
open_loc k u1 (w, Bd n) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Bd n)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K

open_loc k u1 (w, Fr x) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K

mret T k (Fr x) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (if x == x then u2 else mret T k (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K

u2 = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (if x == x then u2 else mret T k (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x

u2 = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x

kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) u2 = u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x

forall w0 (a : LN), (w0, k, a) ∈md u2 -> open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, a)) = mret T k a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x
w0: list K
n: atom
hin: (w0, k, Fr n) ∈md u2

open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Fr n)) = mret T k (Fr n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x
w0: list K
n: nat
hin: (w0, k, Bd n) ∈md u2
open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Bd n)) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x
w0: list K
n: atom
hin: (w0, k, Fr n) ∈md u2

open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Fr n)) = mret T k (Fr n)
trivial.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
DESTR_EQ, DESTR_EQs: x = x
w0: list K
n: nat
hin: (w0, k, Bd n) ∈md u2

open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Bd n)) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
w0: list K
n: nat
lcu2: lc_loc k 0 (w0, Bd n)
w: list K
DESTR_EQ, DESTR_EQs: x = x
hin: (w0, k, Bd n) ∈md u2

open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Bd n)) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
w0: list K
n: nat
lcu2: n < countk k w0 + 0
w: list K
DESTR_EQ, DESTR_EQs: x = x
hin: (w0, k, Bd n) ∈md u2

open_loc k (u1 '{ k | x ~> u2}) (incr w (w0, Bd n)) = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
w0: list K
n: nat
lcu2: n < countk k w0 + 0
w: list K
DESTR_EQ, DESTR_EQs: x = x
hin: (w0, k, Bd n) ∈md u2

match Nat.compare n (countk k (w ● w0)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
w0: list K
n: nat
lcu2: n < countk k w0 + 0
w: list K
DESTR_EQ, DESTR_EQs: x = x
hin: (w0, k, Bd n) ∈md u2

match Nat.compare n (countk k (w ++ w0)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
w0: list K
n: nat
lcu2: n < countk k w0 + 0
w: list K
DESTR_EQ, DESTR_EQs: x = x
hin: (w0, k, Bd n) ∈md u2

match Nat.compare n (countk k w + countk k w0) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k (Bd n)
compare naturals n and (countk k w + countk k w0).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
a: atom
H1: a <> x

open_loc k u1 (w, Fr a) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Fr a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
a: atom
H1: a <> x

mret T k (Fr a) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (if x == a then u2 else mret T k (Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
a: atom
H1: a <> x

mret T k (Fr a) = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (if x == a then u2 else mret T k (Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
a: atom
H1: a <> x
DESTR_NEQ: x <> a
DESTR_NEQs: a <> x

mret T k (Fr a) = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (mret T k (Fr a))
now rewrite (kbindd_comp_mret_eq). (* <<< TODO standardize this lemma *)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat

open_loc k u1 (w, Bd n) '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (subst_loc k x u2 (snd (w, Bd n)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat

match Nat.compare n (countk k w) with | Eq => u1 | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end '{ k | x ~> u2} = kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ○ incr w) (mret T k (Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat

match Nat.compare n (countk k w) with | Eq => u1 | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end '{ k | x ~> u2} = open_loc k (u1 '{ k | x ~> u2}) (incr w (Ƶ, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

mret T k (Bd n) = match Nat.compare n (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
u1 '{ k | x ~> u2} = match Nat.compare (countk k w) (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
mret T k (Bd (n - 1)) = match Nat.compare n (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

mret T k (Bd n) = match Nat.compare n (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

mret T k (Bd n) = match Nat.compare n (countk k w) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
compare naturals n and (countk k w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

u1 '{ k | x ~> u2} = match Nat.compare (countk k w) (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

u1 '{ k | x ~> u2} = match Nat.compare (countk k w) (countk k w) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

u1 '{ k | x ~> u2} = match Nat.compare (countk k w) (countk k w) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end
compare naturals (countk k w) and (countk k w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

mret T k (Bd (n - 1)) = match Nat.compare n (countk k (w ● Ƶ)) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

mret T k (Bd (n - 1)) = match Nat.compare n (countk k w) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
x: atom
lcu2: LC (T k) k u2
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

mret T k (Bd (n - 1)) = match Nat.compare n (countk k w) with | Eq => u1 '{ k | x ~> u2} | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
compare naturals n and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x, LC (T k) k u2 -> (t '( k | u1)) '{ k | x ~> u2} = (t '{ k | x ~> u2}) '( k | u1 '{ k | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u1 u2 : T k LN) t x, LC (T k) k u2 -> (t '( k | u1)) '{ k | x ~> u2} = (t '{ k | x ~> u2}) '( k | u1 '{ k | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x: atom
lc: LC (T k) k u2

(t '( k | u1)) '{ k | x ~> u2} = (t '{ k | x ~> u2}) '( k | u1 '{ k | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x: atom
lc: LC (T k) k u2

(subst U k x u2 ∘ open U k u1) t = (open U k (u1 '{ k | x ~> u2}) ∘ subst U k x u2) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x: atom
lc: LC (T k) k u2

(kbind U k (subst_loc k x u2) ∘ kbindd U k (open_loc k u1)) t = (kbindd U k (open_loc k (u1 '{ k | x ~> u2})) ∘ kbind U k (subst_loc k x u2)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x: atom
lc: LC (T k) k u2

kbindd U k (kbind (T k) k (subst_loc k x u2) ∘ open_loc k u1) t = kbindd U k (fun '(w, a) => kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ∘ incr w) (subst_loc k x u2 a)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u1, u2: T k LN
t: U LN
x: atom
lc: LC (T k) k u2

kbind (T k) k (subst_loc k x u2) ∘ open_loc k u1 = (fun '(w, a) => kbindd (T k) k (open_loc k (u1 '{ k | x ~> u2}) ∘ incr w) (subst_loc k x u2 a))
apply subst_open_eq_loc; auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> btgd k2 (subst_loc k2 x u2 ∘ extract) ⋆dm btgd k1 (open_loc k1 u1) = btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ⋆dm (btg k2 (subst_loc k2 x u2) ◻ const extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> btgd k2 (subst_loc k2 x u2 ∘ extract) ⋆dm btgd k1 (open_loc k1 u1) = btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ⋆dm (btg k2 (subst_loc k2 x u2) ◻ const extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2

btgd k2 (subst_loc k2 x u2 ∘ extract) ⋆dm btgd k1 (open_loc k1 u1) = btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ⋆dm (btg k2 (subst_loc k2 x u2) ◻ const extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN

(btgd k2 (subst_loc k2 x u2 ∘ extract) ⋆dm btgd k1 (open_loc k1 u1)) j (w, l) = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ⋆dm (btg k2 (subst_loc k2 x u2) ◻ const extract)) j (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN

mbindd (T j) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) j (w, l)) = mbindd (T j) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) j (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k1 (w, l)) = mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k1 (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
mbindd (T j) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) j (w, l)) = mbindd (T j) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) j (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k1 (w, l)) = mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k1 (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k1 (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) (btg k2 (subst_loc k2 x u2) k1 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) (mret T k1 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = (mbindd (T k1) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ∘ mret T k1) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = ((btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) k1 ∘ ret) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 ∘ allK (incr w) k1 ∘ ret) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 ∘ incr w ∘ ret) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (ret l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1) (incr w (ret l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1
(w, l) = incr w (ret l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

(w, l) = incr w (ret l)
cbn; now simpl_monoid.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (open_loc k1 u1 (w, l)) = open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) match l with | Fr x => mret T k1 (Fr x) | Bd n => match Nat.compare n (countk k1 w) with | Eq => u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end end = match l with | Fr x => mret T k1 (Fr x) | Bd n => match Nat.compare n (countk k1 w) with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: atom
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Fr n)) = mret T k1 (Fr n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) match Nat.compare n (countk k1 w) with | Eq => u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end = match Nat.compare n (countk k1 w) with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: atom
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Fr n)) = mret T k1 (Fr n)
compose near (Fr n) on left; rewrite mbindd_comp_mret; unfold compose; cbn; compare values k1 and k2.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) match Nat.compare n (countk k1 w) with | Eq => u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end = match Nat.compare n (countk k1 w) with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Lt
ineqp: n < countk k1 w

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) u1 = mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Gt
ineqp: n > countk k1 w
mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Bd (n - 1))) = mret T k1 (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Lt
ineqp: n < countk k1 w

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Lt
ineqp: n < countk k1 w

(mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) ∘ mret T k1) (Bd n) = mret T k1 (Bd n)
rewrite mbindd_comp_mret; unfold compose; cbn; compare values k1 and k2.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) u1 = mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq

btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w) = btg k2 (subst_loc k2 x u2) ◻ allK extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq

(fun k => btgd k2 (subst_loc k2 x u2 ∘ extract) k ∘ incr w) = (fun k => btg k2 (subst_loc k2 x u2) k ∘ extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K

btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ incr w = btg k2 (subst_loc k2 x u2) j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

btgd k2 (subst_loc k2 x u2 ∘ extract) k2 ∘ incr w = btg k2 (subst_loc k2 x u2) k2 ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j
btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ incr w = btg k2 (subst_loc k2 x u2) j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

btgd k2 (subst_loc k2 x u2 ∘ extract) k2 ∘ incr w = btg k2 (subst_loc k2 x u2) k2 ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

subst_loc k2 x u2 ∘ extract ∘ incr w = subst_loc k2 x u2 ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

subst_loc k2 x u2 ∘ (extract ∘ incr w) = subst_loc k2 x u2 ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

subst_loc k2 x u2 ∘ extract = subst_loc k2 x u2 ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2
extract = extract ∘ incr w
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
DESTR_EQs0: k2 = k2

extract = extract ∘ incr w
symmetry; apply (extract_incr (A := LN) w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ incr w = btg k2 (subst_loc k2 x u2) j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

mret T j ∘ extract ∘ incr w = btg k2 (subst_loc k2 x u2) j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

mret T j ∘ extract ∘ incr w = mret T j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

mret T j ∘ (extract ∘ incr w) = mret T j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

mret T j ∘ extract = mret T j ∘ extract
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j
extract = extract ∘ incr w
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare (countk k1 w) (countk k1 w) = Eq
j: K
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

extract = extract ∘ incr w
symmetry; apply (extract_incr (A := LN) w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Gt
ineqp: n > countk k1 w

mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (mret T k1 (Bd (n - 1))) = mret T k1 (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
n: nat
DESTR_EQs: k1 = k1
ineqrw: PeanoNat.Nat.compare n (countk k1 w) = Gt
ineqp: n > countk k1 w

(mbindd (T k1) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) ∘ mret T k1) (Bd (n - 1)) = mret T k1 (Bd (n - 1))
rewrite mbindd_comp_mret; unfold compose; cbn; compare values k1 and k2.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

mbindd (T j) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) j (w, l)) = mbindd (T j) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) j (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

mbindd (T j) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) j (w, l)) = mbindd (T j) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) j (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

mbindd (T j) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) ((mret T j ∘ extract) (w, l)) = mbindd (T j) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) j (w, l))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

mbindd (T j) (fun k => btgd k2 (subst_loc k2 x u2 ○ extract) k ○ allK (incr w) k) (mret T j (extract (w, l))) = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j (extract (w, l)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

mbindd (T j) (fun k => btgd k2 (subst_loc k2 x u2 ○ extract) k ○ allK (incr w) k) (mret T j l) = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

(mbindd (T j) (fun k => btgd k2 (subst_loc k2 x u2 ○ extract) k ○ allK (incr w) k) ∘ mret T j) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j

(btgd k2 (subst_loc k2 x u2 ○ extract) j ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

(btgd k2 (subst_loc k2 x u2 ○ extract) k2 ○ allK (incr w) k2 ∘ ret) l = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) k2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j
(btgd k2 (subst_loc k2 x u2 ○ extract) j ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

(btgd k2 (subst_loc k2 x u2 ○ extract) k2 ○ allK (incr w) k2 ∘ ret) l = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) k2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

((fun a : list K * LN => subst_loc k2 x u2 (extract (allK (incr w) k2 a))) ∘ ret) l = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) k2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

((fun a : list K * LN => subst_loc k2 x u2 (extract (allK (incr w) k2 a))) ∘ ret) l = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (subst_loc k2 x u2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

subst_loc k2 x u2 (extract (incr w (ret l))) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
l: LN
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

subst_loc k2 x u2 l = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

subst_loc k2 x u2 (Fr x) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x
subst_loc k2 x u2 (Fr a) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
n: nat
subst_loc k2 x u2 (Bd n) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

subst_loc k2 x u2 (Fr x) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2

(if x == x then u2 else mret T k2 (Fr x)) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (if x == x then u2 else mret T k2 (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x

u2 = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x

mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) u2 = u2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x

forall w0 k (a : LN), (w0, k, a) ∈md u2 -> btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k (incr w (w0, a)) = mret T k a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
k: K
l: LN
Hin: (w', k, l) ∈md u2

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k (incr w (w', l)) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
l: LN
Hin: (w', k1, l) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', l)) = mret T k1 l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
k: K
l: LN
Hin: (w', k, l) ∈md u2
DESTR_NEQ0: k <> k1
DESTR_NEQs0: k1 <> k
btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k (incr w (w', l)) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
l: LN
Hin: (w', k1, l) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', l)) = mret T k1 l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: forall w l, (w, k1, l) ∈md u2 -> lc_loc k1 0 (w, l)
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
l: LN
Hin: (w', k1, l) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', l)) = mret T k1 l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
l: LN
HLC: lc_loc k1 0 (w', l)
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, l) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', l)) = mret T k1 l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
l: LN
HLC: match l with | Fr _ => True | Bd n => n < countk k1 w' + 0 end
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, l) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', l)) = mret T k1 l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: atom
HLC: True
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Fr n) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', Fr n)) = mret T k1 (Fr n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1
btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: atom
HLC: True
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Fr n) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', Fr n)) = mret T k1 (Fr n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: atom
HLC: True
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Fr n) ∈md u2
DESTR_EQs1: k1 = k1

match k1 == k1 with | left x => rew [fun H : K => T H LN] eq_ind_r (fun k => k1 = k) eq_refl x in mret T k1 (Fr n) | right _ => mret T k1 (Fr n) end = mret T k1 (Fr n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: atom
HLC: True
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Fr n) ∈md u2
DESTR_EQs1, DESTR_EQ0, DESTR_EQs2: k1 = k1

rew [fun H : K => T H LN] eq_ind_r (fun k => k1 = k) eq_refl DESTR_EQ0 in mret T k1 (Fr n) = mret T k1 (Fr n)
now destruct DESTR_EQ0.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k1 (incr w (w', Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1) (incr w (w', Bd n)) = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

match Nat.compare n (countk k1 (w ● w')) with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

match Nat.compare n (countk k1 (w ++ w')) with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end = mret T k1 (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
w': list K
n: nat
HLC: n < countk k1 w' + 0
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
Hin: (w', k1, Bd n) ∈md u2
DESTR_EQs1: k1 = k1

match Nat.compare n (countk k1 w + countk k1 w') with | Eq => mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1 | Lt => mret T k1 (Bd n) | Gt => mret T k1 (Bd (n - 1)) end = mret T k1 (Bd n)
compare naturals n and (countk k1 w + countk k1 w'). }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
DESTR_EQ, DESTR_EQs0: x = x
w': list K
k: K
l: LN
Hin: (w', k, l) ∈md u2
DESTR_NEQ0: k <> k1
DESTR_NEQs0: k1 <> k

btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k (incr w (w', l)) = mret T k l
rewrite btgd_neq; auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x

subst_loc k2 x u2 (Fr a) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x

mret T k2 (Fr a) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (mret T k2 (Fr a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x
Fr x <> Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x

mret T k2 (Fr a) = (mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) ∘ mret T k2) (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x
Fr x <> Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x

mret T k2 (Fr a) = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k2 ○ incr w ∘ ret) (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x
Fr x <> Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x

Fr x <> Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
a: atom
H1: a <> x
H2: Fr x = Fr a
H4: x = a

False
congruence.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
n: nat

subst_loc k2 x u2 (Bd n) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (subst_loc k2 x u2 (Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
n: nat

mret T k2 (Bd n) = mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) (mret T k2 (Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
n: nat

mret T k2 (Bd n) = (mbindd (T k2) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ incr w) ∘ mret T k2) (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
w: list K
DESTR_NEQs: k1 <> k2
DESTR_NEQ: k2 <> k1
DESTR_EQs: k2 = k2
n: nat

mret T k2 (Bd n) = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k2 ○ incr w ∘ ret) (Bd n)
rewrite btgd_neq; auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(btgd k2 (subst_loc k2 x u2 ○ extract) j ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(btgd k2 (subst_loc k2 x u2 ○ extract) j ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(mret T j ∘ extract ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (btg k2 (subst_loc k2 x u2) j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(mret T j ∘ extract ○ allK (incr w) j ∘ ret) l = mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) (mret T j l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(mret T j ∘ extract ○ allK (incr w) j ∘ ret) l = (mbindd (T j) (fun k => btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) k ○ allK (incr w) k) ∘ mret T j) l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
Hneq: k1 <> k2
HLC: LC (T k2) k1 u2
j: K
w: list K
l: LN
DESTR_NEQ: j <> k1
DESTR_NEQs: k1 <> j
DESTR_NEQ0: j <> k2
DESTR_NEQs0: k2 <> j

(mret T j ∘ extract ○ allK (incr w) j ∘ ret) l = (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) j ○ allK (incr w) j ∘ ret) l
rewrite btgd_neq; auto. } } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x t, k1 <> k2 -> LC (T k2) k1 u2 -> (t '( k1 | u1)) '{ k2 | x ~> u2} = (t '{ k2 | x ~> u2}) '( k1 | u1 '{ k2 | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x t, k1 <> k2 -> LC (T k2) k1 u2 -> (t '( k1 | u1)) '{ k2 | x ~> u2} = (t '{ k2 | x ~> u2}) '( k1 | u1 '{ k2 | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

(t '( k1 | u1)) '{ k2 | x ~> u2} = (t '{ k2 | x ~> u2}) '( k1 | u1 '{ k2 | x ~> u2})
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

(subst U k2 x u2 ∘ open U k1 u1) t = (open U k1 (u1 '{ k2 | x ~> u2}) ∘ subst U k2 x u2) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

(kbind U k2 (subst_loc k2 x u2) ∘ kbindd U k1 (open_loc k1 u1)) t = (kbindd U k1 (open_loc k1 (kbind (T k1) k2 (subst_loc k2 x u2) u1)) ∘ kbind U k2 (subst_loc k2 x u2)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

(mbind U (btg k2 (subst_loc k2 x u2)) ∘ mbindd U (btgd k1 (open_loc k1 u1))) t = (mbindd U (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1))) ∘ mbind U (btg k2 (subst_loc k2 x u2))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

mbindd U (fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) t = (mbindd U (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1))) ∘ mbindd U (btg k2 (subst_loc k2 x u2) ◻ allK extract)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

mbindd U (fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) t = mbindd U (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) k (w, a))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2

(fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) k (w, a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> btgd k2 (subst_loc k2 x u2 ∘ extract) ⋆dm btgd k1 (open_loc k1 u1) = btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ⋆dm (btg k2 (subst_loc k2 x u2) ◻ const extract)

(fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) k (w, a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))

(fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) k (w, a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))

(fun k '(w, a) => mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN

mbindd (T k) ((btg k2 (subst_loc k2 x u2) ◻ allK extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a)) = mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN

mbindd (T k) (fun k => btg k2 (subst_loc k2 x u2) k ∘ allK extract k ∘ allK (incr w) k) (btgd k1 (open_loc k1 u1) k (w, a)) = mbindd (T k) (fun k => btgd k2 (subst_loc k2 x u2 ∘ extract) k ∘ allK (incr w) k) (btgd k1 (open_loc k1 u1) k (w, a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN

(fun k => btg k2 (subst_loc k2 x u2) k ∘ allK extract k ∘ allK (incr w) k) = (fun k => btgd k2 (subst_loc k2 x u2 ∘ extract) k ∘ allK (incr w) k)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
j: K
w': list K
a': LN

(btg k2 (subst_loc k2 x u2) j ∘ allK extract j ∘ allK (incr w) j) (w', a') = (btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ allK (incr w) j) (w', a')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
w': list K
a': LN
DESTR_EQs: k2 = k2

(btg k2 (subst_loc k2 x u2) k2 ∘ allK extract k2 ∘ allK (incr w) k2) (w', a') = (btgd k2 (subst_loc k2 x u2 ∘ extract) k2 ∘ allK (incr w) k2) (w', a')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
j: K
w': list K
a': LN
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j
(btg k2 (subst_loc k2 x u2) j ∘ allK extract j ∘ allK (incr w) j) ( w', a') = (btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ allK (incr w) j) ( w', a')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
w': list K
a': LN
DESTR_EQs: k2 = k2

(btg k2 (subst_loc k2 x u2) k2 ∘ allK extract k2 ∘ allK (incr w) k2) (w', a') = (btgd k2 (subst_loc k2 x u2 ∘ extract) k2 ∘ allK (incr w) k2) (w', a')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
w': list K
a': LN
DESTR_EQs: k2 = k2

(subst_loc k2 x u2 ∘ allK extract k2 ∘ allK (incr w) k2) (w', a') = (subst_loc k2 x u2 ∘ extract ∘ allK (incr w) k2) (w', a')
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
w': list K
a': LN
DESTR_EQs: k2 = k2

(subst_loc k2 x u2 ∘ allK extract k2 ∘ allK (incr w) k2) (w', a') = (subst_loc k2 x u2 ∘ extract ∘ allK (incr w) k2) (w', a')
reflexivity.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k1, k2: K
u1: T k1 LN
u2: T k2 LN
x: atom
t: U LN
neq: k1 <> k2
lc: LC (T k2) k1 u2
lemma:= subst_open_neq_loc: forall k1 k2 (u1 : T k1 LN) (u2 : T k2 LN) x, k1 <> k2 -> LC (T k2) k1 u2 -> (fun k '(w, a) => mbindd (T k) (btgd k2 (subst_loc k2 x u2 ∘ extract) ◻ allK (incr w)) (btgd k1 (open_loc k1 u1) k (w, a))) = (fun k '(w, a) => mbindd (T k) (btgd k1 (open_loc k1 (mbind (T k1) (btg k2 (subst_loc k2 x u2)) u1)) ◻ allK (incr w)) ((btg k2 (subst_loc k2 x u2) ◻ const extract) k ( w, a)))
k: K
w: list K
a: LN
j: K
w': list K
a': LN
DESTR_NEQ: j <> k2
DESTR_NEQs: k2 <> j

(btg k2 (subst_loc k2 x u2) j ∘ allK extract j ∘ allK (incr w) j) (w', a') = (btgd k2 (subst_loc k2 x u2 ∘ extract) j ∘ allK (incr w) j) (w', a')
rewrite btgd_neq, btg_neq; auto. Qed. (** ** Decompose opening into variable opening followed by substitution *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x w l, l <> Fr x -> (subst (T k) k x u ∘ open_loc k (mret T k (Fr x))) (w, l) = open_loc k u (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) x w l, l <> Fr x -> (subst (T k) k x u ∘ open_loc k (mret T k (Fr x))) (w, l) = open_loc k u (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
l: LN
neq: l <> Fr x

(subst (T k) k x u ∘ open_loc k (mret T k (Fr x))) (w, l) = open_loc k u (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
l: LN
neq: l <> Fr x

open_loc k (mret T k (Fr x)) (w, l) '{ k | x ~> u} = open_loc k u (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
neq: Fr x <> Fr x

open_loc k (mret T k (Fr x)) (w, Fr x) '{ k | x ~> u} = open_loc k u (w, Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x
open_loc k (mret T k (Fr x)) (w, Fr a) '{ k | x ~> u} = open_loc k u (w, Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
open_loc k (mret T k (Fr x)) (w, Bd n) '{ k | x ~> u} = open_loc k u (w, Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
neq: Fr x <> Fr x

open_loc k (mret T k (Fr x)) (w, Fr x) '{ k | x ~> u} = open_loc k u (w, Fr x)
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

open_loc k (mret T k (Fr x)) (w, Fr a) '{ k | x ~> u} = open_loc k u (w, Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

mret T k (Fr a) '{ k | x ~> u} = mret T k (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

mret T k (Fr a) = mret T k (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x
Fr x <> Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

Fr x <> Fr a
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x

open_loc k (mret T k (Fr x)) (w, Bd n) '{ k | x ~> u} = open_loc k u (w, Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x

match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end '{ k | x ~> u} = match Nat.compare n (countk k w) with | Eq => u | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Lt
ineqp: n < countk k w

mret T k (Bd n) '{ k | x ~> u} = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
neq: Bd (countk k w) <> Fr x
mret T k (Fr x) '{ k | x ~> u} = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
mret T k (Bd (n - 1)) '{ k | x ~> u} = mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
neq: Bd (countk k w) <> Fr x

mret T k (Fr x) '{ k | x ~> u} = u
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
mret T k (Bd (n - 1)) '{ k | x ~> u} = mret T k (Bd (n - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

mret T k (Bd (n - 1)) '{ k | x ~> u} = mret T k (Bd (n - 1))
now rewrite subst_in_mret_eq, subst_loc_b. Qed. (* This theorem would be easy to prove with [subst_open_eq], but applying that theorem would introduce a local closure hypothesis for <<u>> that is not actually required for our purposes. *)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t x, x `notin` FV U k t -> t '( k | u) = (t '( k | mret T k (Fr x))) '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t x, x `notin` FV U k t -> t '( k | u) = (t '( k | mret T k (Fr x))) '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t

t '( k | u) = (t '( k | mret T k (Fr x))) '{ k | x ~> u}
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t

t '( k | u) = (subst U k x u ∘ open U k (mret T k (Fr x))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t

kbindd U k (open_loc k u) t = (kbind U k (subst_loc k x u) ∘ kbindd U k (open_loc k (mret T k (Fr x)))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t

kbindd U k (open_loc k u) t = kbindd U k (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr x))) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t

forall w (a : LN), (w, k, a) ∈md t -> open_loc k u (w, a) = (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr x))) (w, a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (w, k, a) ∈md t

open_loc k u (w, a) = (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr x))) (w, a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (w, k, a) ∈md t

a <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (w, k, a) ∈md t
H1: a <> Fr x
open_loc k u (w, a) = (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr x))) ( w, a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (w, k, a) ∈md t

a <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (k, a) ∈m t

a <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: ~ x ∈ free U k t
w: list K
a: LN
Hin: (k, a) ∈m t

a <> Fr x
eapply ninf_in_neq in fresh; eauto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x: atom
fresh: x `notin` FV U k t
w: list K
a: LN
Hin: (w, k, a) ∈md t
H1: a <> Fr x

open_loc k u (w, a) = (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr x))) (w, a)
now rewrite <- (open_spec_eq_loc k u x). Qed. (** ** Opening by a variable, followed by non-equal substitution *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) (x y : atom), x <> y -> LC (T k) k u -> subst (T k) k x u ∘ open_loc k (mret T k (Fr y)) = open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) (x y : atom), x <> y -> LC (T k) k u -> subst (T k) k x u ∘ open_loc k (mret T k (Fr y)) = open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

subst (T k) k x u ∘ open_loc k (mret T k (Fr y)) = open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

open_loc k (mret T k (Fr y) '{ k | x ~> u}) ⋆kdm (subst_loc k x u ∘ snd) = open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ extract)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ snd) = open_loc k (mret T k (Fr y)) ⋆kdm (subst_loc k x u ∘ extract)
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t (x y : atom), x <> y -> LC (T k) k u -> (t '( k | mret T k (Fr y))) '{ k | x ~> u} = (t '{ k | x ~> u}) '( k | mret T k (Fr y))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k (u : T k LN) t (x y : atom), x <> y -> LC (T k) k u -> (t '( k | mret T k (Fr y))) '{ k | x ~> u} = (t '{ k | x ~> u}) '( k | mret T k (Fr y))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

(t '( k | mret T k (Fr y))) '{ k | x ~> u} = (t '{ k | x ~> u}) '( k | mret T k (Fr y))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

(subst U k x u ∘ open U k (mret T k (Fr y))) t = (open U k (mret T k (Fr y)) ∘ subst U k x u) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

(kbind U k (subst_loc k x u) ∘ kbindd U k (open_loc k (mret T k (Fr y)))) t = (kbindd U k (open_loc k (mret T k (Fr y))) ∘ kbind U k (subst_loc k x u)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

kbindd U k (kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr y))) t = kbindd U k (fun '(w, a) => kbindd (T k) k (open_loc k (mret T k (Fr y)) ∘ incr w) (subst_loc k x u a)) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
u: T k LN
t: U LN
x, y: atom
neq: x <> y
lc: LC (T k) k u

kbind (T k) k (subst_loc k x u) ∘ open_loc k (mret T k (Fr y)) = (fun '(w, a) => kbindd (T k) k (open_loc k (mret T k (Fr y)) ∘ incr w) (subst_loc k x u a))
apply subst_open_var_loc; auto. Qed. (** ** Closing, followed by opening *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x w l, (open_loc k (mret T k (Fr x)) ∘ cobind (close_loc k x)) (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x w l, (open_loc k (mret T k (Fr x)) ∘ cobind (close_loc k x)) (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN

(open_loc k (mret T k (Fr x)) ∘ cobind (close_loc k x)) (w, l) = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN

match match l with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN

match match l with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K

match (if x == x then Bd (countk k w) else Fr x) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
a: atom
H1: a <> x
match (if x == a then Bd (countk k w) else Fr a) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Fr a)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
match match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K

match (if x == x then Bd (countk k w) else Fr x) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
DESTR_EQ, DESTR_EQs: x = x

match Nat.compare (countk k w) (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd (countk k w)) | Gt => mret T k (Bd (countk k w - 1)) end = mret T k (Fr x)
compare naturals (countk k w) and (countk k w).
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
a: atom
H1: a <> x

match (if x == a then Bd (countk k w) else Fr a) with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Fr a)
compare values x and a.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat

match match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end with | Fr x => mret T k (Fr x) | Bd n => match Nat.compare n (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end end = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq

match Nat.compare (S (countk k w)) (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd (S (countk k w))) | Gt => mret T k (Bd (S (countk k w) - 1)) end = mret T k (Bd (countk k w))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
match Nat.compare (S n) (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd (S n)) | Gt => mret T k (Bd (S n - 1)) end = mret T k (Bd n)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

match Nat.compare (S n) (countk k w) with | Eq => mret T k (Fr x) | Lt => mret T k (Bd (S n)) | Gt => mret T k (Bd (S n - 1)) end = mret T k (Bd n)
compare naturals (Datatypes.S n) and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x t, ('[ k | x] t) '( k | mret T k (Fr x)) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x t, ('[ k | x] t) '( k | mret T k (Fr x)) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN

('[ k | x] t) '( k | mret T k (Fr x)) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN

(open U k (mret T k (Fr x)) ∘ close U k x) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN

(kbindd U k (open_loc k (mret T k (Fr x))) ∘ kmapd U k (close_loc k x)) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN

kbindd U k (fun '(w, a) => open_loc k (mret T k (Fr x)) (w, close_loc k x (w, a))) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
w: list K
a: LN
H1: (w, k, a) ∈md t

open_loc k (mret T k (Fr x)) (w, close_loc k x (w, a)) = mret T k a
apply open_close_loc. Qed. (** ** Opening by a LN reduces to an [kmapd] *) (**************************************************************************) Definition open_LN_loc k (u : LN) : list K * LN -> LN := fun wl => match wl with | (w, l) => match l with | Fr x => Fr x | Bd n => match Nat.compare n (countk k w) with | Gt => Bd (n - 1) | Eq => u | Lt => Bd n end end end.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l, open U k (mret T k l) = kmapd U k (open_LN_loc k l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k l, open U k (mret T k l) = kmapd U k (open_LN_loc k l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN

open U k (mret T k l) = kmapd U k (open_LN_loc k l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN

kbindd U k (open_loc k (mret T k l)) = kmapd U k (open_LN_loc k l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN

kbindd U k (open_loc k (mret T k l)) t = kmapd U k (open_LN_loc k l) t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN

forall w (a : LN), (w, k, a) ∈md t -> open_loc k (mret T k l) (w, a) = mret T k (open_LN_loc k l (w, a))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
l': LN
l'in: (w, k, l') ∈md t

open_loc k (mret T k l) (w, l') = mret T k (open_LN_loc k l (w, l'))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
n: atom
l'in: (w, k, Fr n) ∈md t

open_loc k (mret T k l) (w, Fr n) = mret T k (open_LN_loc k l (w, Fr n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
n: nat
l'in: (w, k, Bd n) ∈md t
open_loc k (mret T k l) (w, Bd n) = mret T k (open_LN_loc k l (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
n: atom
l'in: (w, k, Fr n) ∈md t

open_loc k (mret T k l) (w, Fr n) = mret T k (open_LN_loc k l (w, Fr n))
reflexivity.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
n: nat
l'in: (w, k, Bd n) ∈md t

open_loc k (mret T k l) (w, Bd n) = mret T k (open_LN_loc k l (w, Bd n))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
l: LN
t: U LN
w: list K
n: nat
l'in: (w, k, Bd n) ∈md t

match Nat.compare n (countk k w) with | Eq => mret T k l | Lt => mret T k (Bd n) | Gt => mret T k (Bd (n - 1)) end = mret T k match Nat.compare n (countk k w) with | Eq => l | Lt => Bd n | Gt => Bd (n - 1) end
compare naturals n and (countk k w). Qed. (** ** Opening, followed by closing *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x w l, l <> Fr x -> (close_loc k x ∘ cobind (open_LN_loc k (Fr x))) (w, l) = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x w l, l <> Fr x -> (close_loc k x ∘ cobind (open_LN_loc k (Fr x))) (w, l) = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN
neq: l <> Fr x

(close_loc k x ∘ cobind (open_LN_loc k (Fr x))) (w, l) = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN
neq: l <> Fr x

match match l with | Fr x => Fr x | Bd n => match Nat.compare n (countk k w) with | Eq => Fr x | Lt => Bd n | Gt => Bd (n - 1) end end with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
l: LN
neq: l <> Fr x

match match l with | Fr x => Fr x | Bd n => match Nat.compare n (countk k w) with | Eq => Fr x | Lt => Bd n | Gt => Bd (n - 1) end end with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
neq: Fr x <> Fr x

(if x == x then Bd (countk k w) else Fr x) = Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x
(if x == a then Bd (countk k w) else Fr a) = Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
match match Nat.compare n (countk k w) with | Eq => Fr x | Lt => Bd n | Gt => Bd (n - 1) end with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end = Bd n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
neq: Fr x <> Fr x

(if x == x then Bd (countk k w) else Fr x) = Fr x
contradiction.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

(if x == a then Bd (countk k w) else Fr a) = Fr a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
a: atom
neq: Fr a <> Fr x
H1: a <> x

(if x == a then Bd (countk k w) else Fr a) = Fr a
now compare values x and a.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
neq: Bd n <> Fr x

match match Nat.compare n (countk k w) with | Eq => Fr x | Lt => Bd n | Gt => Bd (n - 1) end with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end = Bd n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
neq: Bd n <> Fr x

match match Nat.compare n (countk k w) with | Eq => Fr x | Lt => Bd n | Gt => Bd (n - 1) end with | Fr y => if x == y then Bd (countk k w) else Fr y | Bd n => match Nat.compare n (countk k w) with | Lt => Bd n | _ => Bd (S n) end end = Bd n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
neq: Bd (countk k w) <> Fr x

(if x == x then Bd (countk k w) else Fr x) = Bd (countk k w)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w
match Nat.compare (n - 1) (countk k w) with | Lt => Bd (n - 1) | _ => Bd (S (n - 1)) end = Bd n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
w: list K
n: nat
neq: Bd n <> Fr x
ineqrw: PeanoNat.Nat.compare n (countk k w) = Gt
ineqp: n > countk k w

match Nat.compare (n - 1) (countk k w) with | Lt => Bd (n - 1) | _ => Bd (S (n - 1)) end = Bd n
compare naturals (n - 1) and (countk k w). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x t, ~ x ∈ free U k t -> '[ k | x] (t '( k | mret T k (Fr x))) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k x t, ~ x ∈ free U k t -> '[ k | x] (t '( k | mret T k (Fr x))) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

'[ k | x] (t '( k | mret T k (Fr x))) = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

(close U k x ∘ open U k (mret T k (Fr x))) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

(close U k x ∘ kmapd U k (open_LN_loc k (Fr x))) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

(kmapd U k (close_loc k x) ∘ kmapd U k (open_LN_loc k (Fr x))) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

kmapd U k (fun '(w, a) => close_loc k x (w, open_LN_loc k (Fr x) (w, a))) t = t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t

forall w (a : LN), (w, k, a) ∈md t -> close_loc k x (w, open_LN_loc k (Fr x) (w, a)) = a
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t

close_loc k x (w, open_LN_loc k (Fr x) (w, l)) = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t

l <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t
H1: l <> Fr x
close_loc k x (w, open_LN_loc k (Fr x) (w, l)) = l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t

l <> Fr x
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t

Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (k, l) ∈m t

Fr x <> l
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (k, l) ∈m t

~ x ∈ free U ?k ?t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (k, l) ∈m t
(?k, l) ∈m ?t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (k, l) ∈m t

(k, l) ∈m t
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
x: atom
t: U LN
fresh: ~ x ∈ free U k t
w: list K
l: LN
lin: (w, k, l) ∈md t
H1: l <> Fr x

close_loc k x (w, open_LN_loc k (Fr x) (w, l)) = l
now apply close_open_local. Qed. (** ** Opening and local closure *) (**************************************************************************)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), LC (T k) k u -> LCn U k n t -> LCn U k (n - 1) (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), LC (T k) k u -> LCn U k n t -> LCn U k (n - 1) (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), LC (T k) k u -> (forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)) -> forall w l, (w, k, l) ∈md t '( k | u) -> lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t '( k | u)

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
l1: LN
h1: (w1, k, l1) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, l1)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, Fr n0)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: nat
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, Bd n0)
h3: w = w1 ● w2
lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, Fr n0)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t
h2: (w2, k, l) ∈md mret T k (Fr n0)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t
h2: w2 = Ƶ /\ Fr n0 = l
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t

lc_loc k (n - 1) (w1 ● Ƶ, Fr n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
n0: atom
h1: (w1, k, Fr n0) ∈md t

True
trivial.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
n0: nat
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, Bd n0)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md open_loc k u (w1, Bd n0)
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md match Nat.compare n0 (countk k w1) with | Eq => u | Lt => mret T k (Bd n0) | Gt => mret T k (Bd (n0 - 1)) end
h3: w = w1 ● w2

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md mret T k (Bd n0)
h3: w = w1 ● w2
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
lct: lc_loc k n (w1, Bd (countk k w1))
l: LN
w2: list K
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, l) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq
lc_loc k (n - 1) (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md mret T k (Bd (n0 - 1))
h3: w = w1 ● w2
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1
lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md mret T k (Bd n0)
h3: w = w1 ● w2
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

lc_loc k (n - 1) (w1 ● Ƶ, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

n0 < countk k (w1 ● Ƶ) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

n0 < countk k (w1 ++ []) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Lt
ineqp: n0 < countk k w1

n0 < countk k w1 + (n - 1)
lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
lct: lc_loc k n (w1, Bd (countk k w1))
l: LN
w2: list K
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, l) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

lc_loc k (n - 1) (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
l: LN
w2: list K
lcu: lc_loc k 0 (w2, l)
w1: list K
lct: lc_loc k n (w1, Bd (countk k w1))
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, l) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

lc_loc k (n - 1) (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
l: LN
w2: list K
lcu: match l with | Fr _ => True | Bd n => n < countk k w2 + 0 end
w1: list K
lct: countk k w1 < countk k w1 + n
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, l) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

match l with | Fr _ => True | Bd n0 => n0 < countk k (w1 ● w2) + (n - 1) end
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
n0: nat
w2: list K
lcu: n0 < countk k w2 + 0
w1: list K
lct: countk k w1 < countk k w1 + n
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, Bd n0) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

n0 < countk k (w1 ● w2) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
n0: nat
w2: list K
lcu: n0 < countk k w2 + 0
w1: list K
lct: countk k w1 < countk k w1 + n
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, Bd n0) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

n0 < countk k (w1 ++ w2) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
n0: nat
w2: list K
lcu: n0 < countk k w2 + 0
w1: list K
lct: countk k w1 < countk k w1 + n
h1: (w1, k, Bd (countk k w1)) ∈md t
h2: (w2, k, Bd n0) ∈md u
ineqrw: PeanoNat.Nat.compare (countk k w1) (countk k w1) = Eq

n0 < countk k w1 + countk k w2 + (n - 1)
lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: (w2, k, l) ∈md mret T k (Bd (n0 - 1))
h3: w = w1 ● w2
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
w: list K
l: LN
w2: list K
h1: (w1, k, Bd n0) ∈md t
h2: w2 = Ƶ /\ Bd (n0 - 1) = l
h3: w = w1 ● w2
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

lc_loc k (n - 1) (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: lc_loc k n (w1, Bd n0)
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

lc_loc k (n - 1) (w1 ● Ƶ, Bd (n0 - 1))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: n0 < countk k w1 + n
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

n0 - 1 < countk k (w1 ● Ƶ) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: n0 < countk k w1 + n
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

n0 - 1 < countk k (w1 ++ []) + (n - 1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
lcu: LC (T k) k u
w1: list K
n0: nat
lct: n0 < countk k w1 + n
h1: (w1, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w1) = Gt
ineqp: n0 > countk k w1

n0 - 1 < countk k w1 + (n - 1)
lia. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), n > 0 -> LC (T k) k u -> LCn U k (n - 1) (t '( k | u)) -> LCn U k n t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), n > 0 -> LC (T k) k u -> LCn U k (n - 1) (t '( k | u)) -> LCn U k n t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), n > 0 -> LC (T k) k u -> (forall w l, (w, k, l) ∈md t '( k | u) -> lc_loc k (n - 1) (w, l)) -> forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (w, k, l) ∈md t '( k | u) -> lc_loc k (n - 1) (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

lc_loc k n (w, Fr n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

lc_loc k n (w, Fr n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

True
trivial.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
Hin: (w, k, Bd (countk k w)) ∈md t
lc_loc k n (w, Bd (countk k w))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w
lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

lc_loc k (n - 1) (w, Bd n0) -> lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w
exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

lc_loc k (n - 1) (w, Bd n0) -> lc_loc k n (w, Bd n0)
cbn; unfold_monoid; lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

(w, k, Bd n0) ∈md t /\ (Ƶ, k, Bd n0) ∈md open_loc k u (w, Bd n0) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

(Ƶ, k, Bd n0) ∈md open_loc k u (w, Bd n0) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp: n0 < countk k w

(Ƶ, k, Bd n0) ∈md match Nat.compare n0 (countk k w) with | Eq => u | Lt => mret T k (Bd n0) | Gt => mret T k (Bd (n0 - 1)) end /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: Lt = Lt
ineqp: n0 < countk k w
ineqrw0: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp0: n0 < countk k w

(Ƶ, k, Bd n0) ∈md mret T k (Bd n0) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd n0) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t
ineqrw: Lt = Lt
ineqp: n0 < countk k w
ineqrw0: PeanoNat.Nat.compare n0 (countk k w) = Lt
ineqp0: n0 < countk k w

(Ƶ = Ƶ /\ Bd n0 = Bd n0) /\ w = w ● Ƶ
now simpl_monoid. }
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
Hin: (w, k, Bd (countk k w)) ∈md t

lc_loc k n (w, Bd (countk k w))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
ineqrw: PeanoNat.Nat.compare (countk k w) (countk k w) = Eq
Hin: (w, k, Bd (countk k w)) ∈md t

countk k w < countk k w + n
unfold_monoid; lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
lct: forall w l, (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

n0 < countk k w + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

n0 < countk k w + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

lc_loc k (n - 1) (w, Bd (n0 - 1)) -> n0 < countk k w + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w
exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

lc_loc k (n - 1) (w, Bd (n0 - 1)) -> n0 < countk k w + n
cbn; unfold_monoid; lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

(w, k, Bd n0) ∈md t /\ (Ƶ, k, Bd (n0 - 1)) ∈md open_loc k u (w, Bd n0) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

(Ƶ, k, Bd (n0 - 1)) ∈md open_loc k u (w, Bd n0) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp: n0 > countk k w

(Ƶ, k, Bd (n0 - 1)) ∈md match Nat.compare n0 (countk k w) with | Eq => u | Lt => mret T k (Bd n0) | Gt => mret T k (Bd (n0 - 1)) end /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: Gt = Gt
ineqp: n0 > countk k w
ineqrw0: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp0: n0 > countk k w

(Ƶ, k, Bd (n0 - 1)) ∈md mret T k (Bd (n0 - 1)) /\ w = w ● Ƶ
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
u: T k LN
ngt: n > 0
lcu: LC (T k) k u
w: list K
n0: nat
lct: (exists w1 w2 l1, (w1, k, l1) ∈md t /\ (w2, k, Bd (n0 - 1)) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2) -> lc_loc k (n - 1) (w, Bd (n0 - 1))
Hin: (w, k, Bd n0) ∈md t
ineqrw: Gt = Gt
ineqp: n0 > countk k w
ineqrw0: PeanoNat.Nat.compare n0 (countk k w) = Gt
ineqp0: n0 > countk k w

(Ƶ = Ƶ /\ Bd (n0 - 1) = Bd (n0 - 1)) /\ w = w ● Ƶ
now simpl_monoid. } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), n > 0 -> LC (T k) k u -> LCn U k n t <-> LCn U k (n - 1) (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t (u : T k LN), n > 0 -> LC (T k) k u -> LCn U k n t <-> LCn U k (n - 1) (t '( k | u))
intros; intuition (eauto using open_lc_gap_eq_1, open_lc_gap_eq_2). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t x, n > 0 -> LCn U k n t <-> LCn U k (n - 1) (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k n t x, n > 0 -> LCn U k n t <-> LCn U k (n - 1) (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0

LCn U k n t <-> LCn U k (n - 1) (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0

n > 0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0
LC (T k) k (mret T k (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0

LC (T k) k (mret T k (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0
w: list K
l: LN
hin: (w, k, l) ∈md mret T k (Fr x)

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0
w: list K
l: LN
hin: w = Ƶ /\ Fr x = l

lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0

lc_loc k 0 (Ƶ, Fr x)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
n: nat
t: U LN
x: atom
H1: n > 0

True
trivial. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN), LC (T k) k u -> LCn U k 1 t <-> LC U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t (u : T k LN), LC (T k) k u -> LCn U k 1 t <-> LC U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: LC (T k) k u

LCn U k 1 t <-> LC U k (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: LC (T k) k u

LCn U k 1 t <-> LCn U k 0 (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: LC (T k) k u

LCn U k (S (1 - 1)) t <-> LCn U k (1 - 1) (t '( k | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
u: T k LN
H1: LC (T k) k u

LCn U k (S (1 - 1)) t <-> LCn U k 1 t
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, LCn U k 1 t <-> LC U k (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k t x, LCn U k 1 t <-> LC U k (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

LCn U k 1 t <-> LC U k (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

LCn U k 1 t <-> LCn U k 0 (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

LCn U k (S (1 - 1)) t <-> LCn U k (1 - 1) (t '( k | mret T k (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k: K
t: U LN
x: atom

LCn U k (S (1 - 1)) t <-> LCn U k 1 t
reflexivity. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n t -> LCn U k n (t '( j | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n t -> LCn U k n (t '( j | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> (forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)) -> forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t '( j | u)

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t \/ (exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2
lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t

lc_loc k n (w, l)
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
Hin: exists w1 w2 l1, (w1, j, l1) ∈md t /\ (w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w: list K
l: LN
w1, w2: list K
l1: LN
in_t: (w1, j, l1) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, l1)
H1: w = w1 ● w2

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
l1: LN
in_t: (w1, j, l1) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, l1)

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: atom
in_t: (w1, j, Fr n0) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, Fr n0)

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, Bd n0)
lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: atom
in_t: (w1, j, Fr n0) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, Fr n0)

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: atom
in_t: (w1, j, Fr n0) ∈md t
in_open: (w2, k, l) ∈md mret T j (Fr n0)

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: atom
in_t: (w1, j, Fr n0) ∈md t
in_open: w2 = Ƶ /\ j = k /\ Fr n0 = l

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: atom
in_t: (w1, j, Fr n0) ∈md t
in_open: w2 = Ƶ /\ j = k /\ Fr n0 = l

False
intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
l: LN
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, l) ∈md open_loc j u (w1, Bd n0)

lc_loc k n (w1 ● w2, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: atom
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Fr n1) ∈md open_loc j u (w1, Bd n0)

lc_loc k n (w1 ● w2, Fr n1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md open_loc j u (w1, Bd n0)
lc_loc k n (w1 ● w2, Bd n1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: atom
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Fr n1) ∈md open_loc j u (w1, Bd n0)

lc_loc k n (w1 ● w2, Fr n1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: atom
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Fr n1) ∈md open_loc j u (w1, Bd n0)

True
trivial.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md open_loc j u (w1, Bd n0)

lc_loc k n (w1 ● w2, Bd n1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md open_loc j u (w1, Bd n0)

lc_loc k n (w1 ● w2, Bd n1)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md open_loc j u (w1, Bd n0)

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md match Nat.compare n0 (countk j w1) with | Eq => u | Lt => mret T j (Bd n0) | Gt => mret T j (Bd (n0 - 1)) end

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md mret T j (Bd n0)
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Lt
ineqp: n0 < countk j w1

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq
n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md mret T j (Bd (n0 - 1))
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Gt
ineqp: n0 > countk j w1
n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md mret T j (Bd n0)
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Lt
ineqp: n0 < countk j w1

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: w2 = Ƶ /\ j = k /\ Bd n0 = Bd n1
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Lt
ineqp: n0 < countk j w1

n1 < countk k (w1 ● w2) + n
false; intuition.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
n1: nat
w2: list K
lcu: lc_loc k 0 (w2, Bd n1)
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
n1: nat
w2: list K
lcu: n1 < countk k w2 + 0
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
n1: nat
w2: list K
lcu: n1 < countk k w2 + 0
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq

n1 < countk k (w1 ++ w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
n1: nat
w2: list K
lcu: n1 < countk k w2 + 0
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
w1: list K
in_t: (w1, j, Bd (countk j w1)) ∈md t
in_open: (w2, k, Bd n1) ∈md u
ineqrw: PeanoNat.Nat.compare (countk j w1) (countk j w1) = Eq

n1 < countk k w1 + countk k w2 + n
lia.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: (w2, k, Bd n1) ∈md mret T j (Bd (n0 - 1))
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Gt
ineqp: n0 > countk j w1

n1 < countk k (w1 ● w2) + n
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
n1: nat
w1, w2: list K
n0: nat
in_t: (w1, j, Bd n0) ∈md t
in_open: w2 = Ƶ /\ j = k /\ Bd (n0 - 1) = Bd n1
ineqrw: PeanoNat.Nat.compare n0 (countk j w1) = Gt
ineqp: n0 > countk j w1

n1 < countk k (w1 ● w2) + n
false; intuition. } Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n (t '( j | u)) -> LCn U k n t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n (t '( j | u)) -> LCn U k n t
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> (forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)) -> forall w l, (w, k, l) ∈md t -> lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
l: LN
Hin: (w, k, l) ∈md t

lc_loc k n (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

lc_loc k n (w, Fr n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t
lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

lc_loc k n (w, Fr n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
n0: atom
Hin: (w, k, Fr n0) ∈md t

True
auto.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
lct: forall w l, (w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)
w: list K
n0: nat
Hin: (w, k, Bd n0) ∈md t

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
w: list K
n0: nat
lct: (w, k, Bd n0) ∈md t '( j | u) -> lc_loc k n (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t

lc_loc k n (w, Bd n0)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
neq: k <> j
lcu: LC (T j) k u
w: list K
n0: nat
lct: (w, k, Bd n0) ∈md t '( j | u) -> lc_loc k n (w, Bd n0)
Hin: (w, k, Bd n0) ∈md t

(w, k, Bd n0) ∈md t '( j | u)
rewrite (inmd_open_neq_iff U); auto. Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n t <-> LCn U k n (t '( j | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j n t (u : T j LN), k <> j -> LC (T j) k u -> LCn U k n t <-> LCn U k n (t '( j | u))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
n: nat
t: U LN
u: T j LN
H1: k <> j
H2: LC (T j) k u

LCn U k n t <-> LCn U k n (t '( j | u))
intuition (eauto using open_lc_gap_neq_1, open_lc_gap_neq_2). Qed.
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t x, k <> j -> LC U k t <-> LC U k (t '( j | mret T j (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T

forall k j t x, k <> j -> LC U k t <-> LC U k (t '( j | mret T j (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

LC U k t <-> LC U k (t '( j | mret T j (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

LCn U k 0 t <-> LCn U k 0 (t '( j | mret T j (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

LCn U k 0 (t '( j | ?Goal0)) <-> LCn U k 0 (t '( j | mret T j (Fr x)))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j
LC (T j) k ?Goal0
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

LC (T j) k (mret T j (Fr x))
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

forall w l, (w, k, l) ∈md mret T j (Fr x) -> lc_loc k 0 (w, l)
U: Type -> Type
ix: Index
T: K -> Type -> Type
MReturn0: MReturn T
MBind0: MBind (list K) T U
H: forall k, MBind (list K) T (T k)
H0: MultiDecoratedTraversablePreModule (list K) T U
MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad (list K) T
k, j: K
t: U LN
x: atom
H1: k <> j

forall w l, w = Ƶ /\ j = k /\ Fr x = l -> lc_loc k 0 (w, l)
intuition. Qed. End open_metatheory.