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 VariableT.(** * Binders contexts **)(** We assume that binder contexts are lists of tagged values of type <<unit>>, which are just tags themselves. *)(******************************************************************************)Sectionoperations_on_context.Context
`{Index}.Fixpointcountk (j : K) (l : list K) : nat :=
match l with
| nil => 0
| cons k rest =>
(if j == k then1else0) + countk j rest
end.
H: Index
forallj : K, countk j [] = 0
H: Index
forallj : K, countk j [] = 0
easy.Qed.
H: Index
forallj : K, countk j [j] = 1
H: Index
forallj : K, countk j [j] = 1
H: Index j: K
countk j [j] = 1
H: Index j: K
(if j == j then1else0) + 0 = 1
compare values j and j.Qed.
H: Index
foralljk : K, j <> k -> countk j [k] = 0
H: Index
foralljk : 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 then1else0) + 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 then1else0) + countk j l =
S (countk j l)
compare values j and j.Qed.
H: Index
forall (jk : K) (l : list K),
j <> k -> countk j (k :: l) = countk j l
H: Index
forall (jk : K) (l : list K),
j <> k -> countk j (k :: l) = countk j l
compare values n and n0; auto.Qed.#[export] InstanceEqDec_LN : EquivDec.EqDec LN eq := eq_dec_LN.
forall (x : atom) (l : LN) (P : LN -> Prop),
P (Fr x) ->
(foralla : atom, a <> x -> P (Fr a)) ->
(foralln : nat, P (Bd n)) -> P l
forall (x : atom) (l : LN) (P : LN -> Prop),
P (Fr x) ->
(foralla : atom, a <> x -> P (Fr a)) ->
(foralln : nat, P (Bd n)) -> P l
x: atom l: LN P: LN -> Prop case1: P (Fr x) case2: foralla : atom, a <> x -> P (Fr a) case3: foralln : nat, P (Bd n)
P l
x, n: atom P: LN -> Prop case1: P (Fr x) case2: foralla : atom, a <> x -> P (Fr a) case3: foralln : nat, P (Bd n)
P (Fr n)
x: atom n: nat P: LN -> Prop case1: P (Fr x) case2: foralla : atom, a <> x -> P (Fr a) case3: foralln : nat, P (Bd n)
P (Bd n)
x, n: atom P: LN -> Prop case1: P (Fr x) case2: foralla : atom, a <> x -> P (Fr a) case3: foralln : nat, P (Bd n)
P (Fr n)
x, n: atom P: LN -> Prop case1: P (Fr x) case2: foralla : atom, a <> x -> P (Fr a) case3: foralln : 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: foralla : atom, a <> x -> P (Fr a) case3: foralln : 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 *)(******************************************************************************)Sectionlocal_operations.Context
`{Index}
`{MReturn T}.Implicit Types (x : atom) (k : K).Definitionfree_loc : LN -> list atom :=
funl => match l with
| Fr x => cons x List.nil
| _ => List.nil
end.Definitionsubst_lockx (u : T k LN) : LN -> T k LN :=
funl => match l with
| Fr y =>
if x == y then u else mret T k (Fr y)
| Bd n =>
mret T k (Bd n)
end.Definitionopen_lock (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)
endend.Definitionis_opened : list K * (K * LN) -> Prop :=
fun '(w, (k, l)) =>
match l with
| Fr y => False
| Bd n => n = countk k w
end.Definitionclose_lockx : 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
endend.(** 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. **)Definitionlc_lock (gap : nat) : list K * LN -> Prop :=
fun '(w, l) =>
match l with
| Fr x => True
| Bd n => n < (countk k w) + gap
end.Endlocal_operations.(** ** Lifted operations *)(******************************************************************************)SectionLocallyNamelessOperations.Context
(U : Type -> Type)
`{MultiDecoratedTraversablePreModule (list K) T U
(mn_op := Monoid_op_list)
(mn_unit := Monoid_unit_list)}
`{! MultiDecoratedTraversableMonad (list K) T}.Definitionopenk (u : T k LN) : U LN -> U LN :=
kbindd U k (open_loc k u).Definitionclosekx : U LN -> U LN :=
kmapd U k (close_loc k x).Definitionsubstkx (u : T k LN) : U LN -> U LN :=
kbind U k (subst_loc k x u).Definitionfree : K -> U LN -> list atom :=
funkt => bind (T := list) free_loc (toklist U k t).DefinitionLCnk (gap : nat) : U LN -> Prop :=
funt => forall (w : list K) (l : LN),
(w, (k, l)) ∈md t -> lc_loc k gap (w, l).DefinitionLCk : U LN -> Prop :=
LCn k 0.DefinitionFV : K -> U LN -> AtomSet.t :=
funkt => AtomSet.atoms (free k t).Definitionscoped : K -> U LN -> AtomSet.t -> Prop :=
funktγ => FV k t ⊆ γ.EndLocallyNamelessOperations.(** ** Notations for operations *)(******************************************************************************)ModuleNotations.Notation"t '{ k | x ~> u }" := (subst _ k x u t) (at level35).Notation"t '( k | u )" := (open _ k u t) (at level35).Notation"'[ k | x ] t" := (close _ k x t) (at level35).Notation"( x , y , z )" := (pair x (pair y z)) : tealeaves_multi_scope.EndNotations.Sectiontest_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
(kj : 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 : forallk : 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 : forallk : 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").
Endtest_notations.Import Notations.
Sectionoperations_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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) t (u1u2 : T k LN),
(forallwl,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) t (u1u2 : T k LN),
(forallwl,
(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: forallk : 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: forallwl,
(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: forallk : 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: forallwl,
(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: forallk : 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: forallwl,
(w, k, l) ∈md t ->
open_loc k u1 (w, l) = open_loc k u2 (w, l)
forallw (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: forallk : 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),
(forallwl,
(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: forallk : 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),
(forallwl,
(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: forallk : 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: forallwl,
(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: forallk : 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: forallwl,
(w, k, l) ∈md t ->
open_loc k u (w, l) = mret T k l
kbindd U k (open_loc k u) t = t
nowapply (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx (u1u2 : T k LN),
(foralll,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx (u1u2 : T k LN),
(foralll,
(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: forallk : 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: foralll,
(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: forallk : 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: foralll,
(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: forallk : 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: foralll,
(k, l) ∈m t ->
subst_loc k x u1 l = subst_loc k x u2 l
foralla : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx (u : T k LN),
(foralll,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx (u : T k LN),
(foralll,
(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: forallk : 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: foralll,
(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: forallk : 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: foralll,
(k, l) ∈m t -> subst_loc k x u l = mret T k l
kbind U k (subst_loc k x u) t = t
nowapply 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) t (xy : atom),
(forallwl,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) t (xy : atom),
(forallwl,
(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: forallk : 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: forallwl,
(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: forallk : 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: forallwl,
(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
nowapply (kmapd_respectful).Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx,
(forallwl,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) tx,
(forallwl,
(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: forallk : 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: forallwl,
(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: forallk : 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: forallwl,
(w, k, l) ∈md t -> close_loc k x (w, l) = l
kmapd U k (close_loc k x) t = t
nowapply (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lw (u : T k LN) t,
(w, k, l) ∈md t '( k | u) <->
(existsw1w2l1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lw (u : T k LN) t,
(w, k, l) ∈md t '( k | u) <->
(existsw1w2l1,
(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: forallk : 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) <->
(existsw1w2l1,
(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: forallk : 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 <->
(existsw1w2l1,
(w1, k, l1) ∈md t /\
(w2, k, l) ∈md open_loc k u (w1, l1) /\ w = w1 ● w2)
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lw (u : T j LN) t,
k <> j ->
(w, k, l) ∈md t '( j | u) <->
(w, k, l) ∈md t \/
(existsw1w2l1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lw (u : T j LN) t,
k <> j ->
(w, k, l) ∈md t '( j | u) <->
(w, k, l) ∈md t \/
(existsw1w2l1,
(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: forallk : 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 \/
(existsw1w2l1,
(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: forallk : 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 \/
(existsw1w2l1,
(w1, j, l1) ∈md t /\
(w2, k, l) ∈md open_loc j u (w1, l1) /\ w = w1 ● w2)
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lwxt,
(w, k, l) ∈md '[ k | x] t <->
(existsl1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lwxt,
(w, k, l) ∈md '[ k | x] t <->
(existsl1,
(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: forallk : 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 <->
(existsl1,
(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: forallk : 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 <->
(existsl1,
(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: forallk : 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
(existsa1 : LN,
(w, k, a1) ∈md t /\ l = close_loc k x (w, a1)) <->
(existsl1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lwxt,
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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lwxt,
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: forallk : 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: forallk : 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
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) wl (u : T k LN) tx,
(w, k, l) ∈md t '{ k | x ~> u} <->
(existsw1w2l1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) wl (u : T k LN) tx,
(w, k, l) ∈md t '{ k | x ~> u} <->
(existsw1w2l1,
(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: forallk : 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} <->
(existsw1w2l1,
(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: forallk : 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 <->
(existsw1w2l1,
(w1, k, l1) ∈md t /\
(w2, k, l) ∈md subst_loc k x u l1 /\ w = w1 ● w2)
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) wl (u : T j LN) tx,
k <> j ->
(w, k, l) ∈md t '{ j | x ~> u} <->
(w, k, l) ∈md t \/
(existsw1w2l1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) wl (u : T j LN) tx,
k <> j ->
(w, k, l) ∈md t '{ j | x ~> u} <->
(w, k, l) ∈md t \/
(existsw1w2l1,
(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: forallk : 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 \/
(existsw1w2l1,
(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: forallk : 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 \/
(existsw1w2l1,
(w1, j, l1) ∈md t /\
(w2, k, l) ∈md subst_loc j x u l1 /\ w = w1 ● w2)
nowrewrite (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: forallk : 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) <->
(existsw1l1,
(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: forallk : 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) <->
(existsw1l1,
(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: forallk : 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) <->
(existsw1l1,
(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: forallk : 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 <->
(existsw1l1,
(w1, k, l1) ∈md t /\
(k, l) ∈m open_loc k u (w1, l1))
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) l (u : T j LN) t,
k <> j ->
(k, l) ∈m t '( j | u) <->
(k, l) ∈m t \/
(existsw1l1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) l (u : T j LN) t,
k <> j ->
(k, l) ∈m t '( j | u) <->
(k, l) ∈m t \/
(existsw1l1,
(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: forallk : 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 \/
(existsw1l1,
(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: forallk : 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 \/
(existsw1l1,
(w1, j, l1) ∈md t /\
(k, l) ∈m open_loc j u (w1, l1))
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lxt,
(k, l) ∈m '[ k | x] t <->
(existswl1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) lxt,
(k, l) ∈m '[ k | x] t <->
(existswl1,
(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: forallk : 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 <->
(existswl1,
(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: forallk : 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 <->
(existswl1,
(w, k, l1) ∈md t /\ l = close_loc k x (w, l1))
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lxt,
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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) lxt,
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: forallk : 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: forallk : 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
nowrewrite (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: forallk : 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) tx,
(k, l) ∈m t '{ k | x ~> u} <->
(existsl1,
(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: forallk : 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) tx,
(k, l) ∈m t '{ k | x ~> u} <->
(existsl1,
(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: forallk : 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} <->
(existsl1,
(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: forallk : 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 <->
(existsl1,
(k, l1) ∈m t /\ (k, l) ∈m subst_loc k x u l1)
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) l (u : T j LN) tx,
j <> k ->
(k, l) ∈m t '{ j | x ~> u} <->
(k, l) ∈m t \/
(existsl1,
(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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : K) l (u : T j LN) tx,
j <> k ->
(k, l) ∈m t '{ j | x ~> u} <->
(k, l) ∈m t \/
(existsl1,
(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: forallk : 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 \/
(existsl1,
(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: forallk : 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 \/
(existsl1,
(j, l1) ∈m t /\ (k, l) ∈m subst_loc j x u l1)
nowrewrite (in_kbind_neq_iff U).Qed.Endoperations_specifications.(** * Specifications for <<free>> *)(******************************************************************************)Sectionoperations_specifications.(** ** Characterizations for [free] and [FV] *)(******************************************************************************)Sectioncharacterize_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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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) =
(funA : Type => tosubset ∘ tolist)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk : 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) =
(funA : Type => tosubset ○ tolist)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T A: Type l: list A
(funa : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T A: Type l: list A
(funa : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T A: Type l: list A
(funa : A => List.In a l) =
(funa : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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
(existsa : 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: forallk : 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
(existsa : 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: forallk : 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 ->
existsa : 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: forallk : 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
(existsa : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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 ->
existsa : 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: forallk : 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
existsa : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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
nowleft.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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.Endcharacterize_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: forallk : 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: forallk : 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: forallk : 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: forallk : 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: forallk : 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))
nowrewrite in_open_eq_iff.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : 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: forallk : 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: forallk : 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: forallk : 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))
nowrewrite 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) (t : U LN) (xy : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (k : K) (t : U LN) (xy : 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: forallk : 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: forallk : 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))
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (kj : 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: forallk : 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: forallk : 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
nowrewrite (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: forallk : 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) (xy : atom),
y ∈ free U k (t '{ k | x ~> u}) <->
(existsl1 : 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: forallk : 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) (xy : atom),
y ∈ free U k (t '{ k | x ~> u}) <->
(existsl1 : 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: forallk : 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}) <->
(existsl1 : 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: forallk : 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} <->
(existsl1 : 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: forallk : 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} <->
(existsl1 : LN,
(k, l1) ∈m t /\ (k, Fr y) ∈m subst_loc k x u l1)
nowrewrite (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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (jk : K) (u : T k LN) (t : U LN) (xy : atom),
k <> j ->
y ∈ free U j (t '{ k | x ~> u}) <->
y ∈ free U j t \/
(existsl1 : 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: forallk : K, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (jk : K) (u : T k LN) (t : U LN) (xy : atom),
k <> j ->
y ∈ free U j (t '{ k | x ~> u}) <->
y ∈ free U j t \/
(existsl1 : 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: forallk : 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 \/
(existsl1 : 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: forallk : 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 \/
(existsl1 : 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: forallk : 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 \/
(existsl1 : LN,
(k, l1) ∈m t /\ (j, Fr y) ∈m subst_loc k x u l1)
nowrewrite (in_subst_neq_iff); auto.Qed.Endoperations_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.Sectionlocally_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) (jk : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowsubst.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowinjection hyp.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallxy : 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: forallk, 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
nowrewrite Fr_injective.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallnx, (Bd n = Fr x) = False
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallnx, (Bd n = Fr x) = False
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (A : Type) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (A : Type) (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowinjection hyp.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxlt,
~ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxlt,
~ 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (X : Type) (xy : X), (x <> y) = (y <> x)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forall (X : Type) (xy : X), (x <> y) = (y <> x)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T X: Type x, y: X
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (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: forallk, 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: forallk, 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
nowcompare values x and x.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) (xy : 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: forallk, 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: forallk, 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)
nowcompare values x and y.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) xn,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) xn,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) lx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) lx,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxl (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxl (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: forallk, 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: forallk, 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
nowrewrite kbind_comp_mret_eq.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjxl (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjxl (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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wn,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wn,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) nw,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) nw,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkw (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkw (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wx,
open_loc k u (w, Fr x) = mret T k (Fr x)
reflexivity.Qed.Endlocally_nameless_local.(** ** Tactics for local reasoning *)(******************************************************************************)Tactic Notation"unfold_monoid" :=
repeatunfold 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 usingtypeclasses 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
usingtypeclasses eauto : tea_local.#[export] Hint Rewrite
@subst_loc_neq @subst_loc_b @subst_loc_fr_neq @subst_in_mret_neq
usingfirst [ typeclasses eauto | auto ] : tea_local.#[export] Hint Rewrite
@open_loc_lt @open_loc_gt
usingfirst [ typeclasses eauto | auto ] : tea_local.#[export] Hint Rewrite
@open_loc_eq @open_loc_atom
usingtypeclasses eauto : tea_local.Tactic Notation"simpl_local" := (autorewrite* with tea_local).(** * Metatheory for the <<subst>> operation *)(******************************************************************************)Sectionsubst_metatheory.Sectionfix_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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwjp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwjp (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwp (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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwjp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklwjp (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjwt (u : T k LN) lx,
(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 \/
(existsw1w2,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjwt (u : T k LN) lx,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2) ->
existsw1w2l1,
(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: forallk, 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
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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
existsw1w2,
(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: forallk, 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
existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2) ->
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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: existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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: existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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: forallk, 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: forallk, 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: existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2
existsw1w2l1,
(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: forallk, 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: existsw1w2,
(w1, j, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2
existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(w1, k, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2) ->
(w, j, l) ∈md t \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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
existsw1w2,
(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: forallk, 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: forallk, 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 \/
(existsw1w2,
(w1, k, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2) ->
(w, j, l) ∈md t \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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 \/
(existsw1w2l1,
(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: forallk, 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
existsw1w2l1,
(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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkwt (u : T k LN) lx,
(w, k, l) ∈md t '{ k | x ~> u} <->
(w, k, l) ∈md t /\ l <> Fr x \/
(existsw1w2,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkwt (u : T k LN) lx,
(w, k, l) ∈md t '{ k | x ~> u} <->
(w, k, l) ∈md t /\ l <> Fr x \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(w1, k, Fr x) ∈md t /\
(w2, k, l) ∈md u /\ w = w1 ● w2) <->
(w, k, l) ∈md t /\ l <> Fr x \/
(existsw1w2,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjwt (u : T k LN) lx,
k <> j ->
(w, j, l) ∈md t '{ k | x ~> u} <->
(w, j, l) ∈md t \/
(existsw1w2,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjwt (u : T k LN) lx,
k <> j ->
(w, j, l) ∈md t '{ k | x ~> u} <->
(w, j, l) ∈md t \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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 \/
(existsw1w2,
(w1, k, Fr x) ∈md t /\
(w2, j, l) ∈md u /\ w = w1 ● w2) <->
(w, j, l) ∈md t \/
(existsw1w2,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkljp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkljp (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallklp (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkljp (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkljp (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
(existsl1,
(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: forallk, 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
(existsl1,
(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: forallk, 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
(existsl1,
(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: forallk, 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 ->
existsl1,
(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: forallk, 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
(existsl1,
(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: forallk, 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: forallk, 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 ->
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(j, l1) ∈m t /\
(l1 <> Fr x /\ l1 = l \/ l1 = Fr x /\ (j, l) ∈m u)
existsl...
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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: forallk, 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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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 \/
(existsl1,
(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: forallk, 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
existsl1,
(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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) lx,
(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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) lx,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) lx,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjt (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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltjk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltjk (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) lx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) lx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) lx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) (xy : 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: forallk, 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}
nowapply in_subst_lower_neq.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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})
nowapply 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx (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: forallk, 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: forallk, 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
foralll,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, 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}
nowrewrite subst_fresh.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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
nowrewrite free_subst_fresh.Qed.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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.Endfix_dtm.(** ** Composing substitutions *)(******************************************************************************)Sectionfix_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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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}}
nowdo2 (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) x1x2,
~ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) x1x2,
~ 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx1x2,
~ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx1x2,
~ 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowapply 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx1x2,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx1x2,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) tx,
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: forallk, 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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 + 0end 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) + 0end
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkj (u : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkj (u : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkj (u : T k LN) tx,
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: forallk, 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: forallk, 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 \/
(existsw1w2,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 + 0end 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) + 0end
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wlx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wlx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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))
endend
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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))
endend
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: forallk, 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: forallk, 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) =
matchmatch Nat.compare n (countk k w) with
| Lt => Bd n
| _ => Bd (S n)
endwith
| 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))
endend
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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) =
matchmatch Nat.compare n (countk k w) with
| Lt => Bd n
| _ => Bd (S n)
endwith
| 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))
endend
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
nowcompare 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkx (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkx (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
forallw (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: forallk, 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 **)(******************************************************************************)Definitionsubst_loc_LNkx (u : LN) : LN -> LN :=
funl => 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxl,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxl,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
foralla : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkx, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T t: U LN k: K x: atom
foralll,
(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: forallk, 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.Endfix_dtm.Endsubst_metatheory.(** ** Metatheory for <<close>> *)(******************************************************************************)Sectionclose_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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkwlt (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkwlt (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowapply (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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (xy : atom),
x <> y ->
(k, Fr y) ∈m t ->
existswl,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (xy : atom),
x <> y ->
(k, Fr y) ∈m t ->
existswl,
(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: forallk, 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
existswl,
(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: forallk, 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: existsw, (w, k, Fr y) ∈md t
existswl,
(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: forallk, 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
existswl,
(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: forallk, 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
existsl,
(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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (xy : 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: forallk, 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: forallk, 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
(existswl1,
(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: forallk, 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
(existswl1,
(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: forallk, 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
(existswl1,
(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: forallk, 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 ->
existswl1,
(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: forallk, 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
(existswl1,
(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: forallk, 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: forallk, 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 ->
existswl1,
(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: forallk, 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
existswl1,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (xy : 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, ~ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, ~ 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx, 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: forallk, 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: forallk, 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: existsl1,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 + 1end
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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 + 1end
compare values x and a.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Lt => Bd n
| _ => Bd (S n)
endwith
| Fr _ => True
| Bd n => n < countk k w + 1end
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjtx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjtx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjtx,
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: forallk, 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.Endclose_metatheory.(** ** Metatheory for <<open>> *)(******************************************************************************)Sectionopen_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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) wlx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) wlx,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) wlx,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (u : T k LN) wlx,
(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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) wlx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (u : T k LN) wlx,
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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: existswl1,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 \/
(existswl1,
(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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: existsw, (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: forallk, 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: forallk, 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
existswl1,
(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: forallk, 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
existswl1,
(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: forallk, 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)
nowautorewrite with tea_local.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltkj (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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
foralltk (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wl,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) wl,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, 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: forallk, 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
forallwl,
(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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
forallw0 (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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))
nowrewrite (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u1u2 : T k LN) tx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk1k2 (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk1k2 (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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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))
endend =
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))
endend
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
(funk =>
btgd k2 (subst_loc k2 x u2 ∘ extract) k ∘ incr w) =
(funk => 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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)
(funk =>
btgd k2 (subst_loc k2 x u2 ○ extract) k
○ allK (incr w) k) (mret T j (extract (w, l))) =
mbindd (T j)
(funk =>
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: forallk, 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)
(funk =>
btgd k2 (subst_loc k2 x u2 ○ extract) k
○ allK (incr w) k) (mret T j l) =
mbindd (T j)
(funk =>
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: forallk, 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)
(funk =>
btgd k2 (subst_loc k2 x u2 ○ extract) k
○ allK (incr w) k) ∘ mret T j) l =
mbindd (T j)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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
((funa : list K * LN =>
subst_loc k2 x u2 (extract (allK (incr w) k2 a)))
∘ ret) l =
mbindd (T k2)
(funk =>
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: forallk, 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
((funa : list K * LN =>
subst_loc k2 x u2 (extract (allK (incr w) k2 a)))
∘ ret) l =
mbindd (T k2)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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
forallw0k (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallwl,
(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: forallk, 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: forallk, 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' + 0end 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 [funH : K => T H LN]
eq_ind_r (funk => 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: forallk, 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 [funH : K => T H LN]
eq_ind_r (funk => k1 = k) eq_refl DESTR_EQ0 in
mret T k1 (Fr n) = mret T k1 (Fr n)
nowdestruct DESTR_EQ0.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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: forallk, 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)
(funk =>
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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)
(funk =>
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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) xt,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) xt,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
(funk '(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: forallk, 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
(funk '(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
(funk '(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: forallk, 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
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (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)
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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)))
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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)))
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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)
(funk =>
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)
(funk =>
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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
(funk =>
btg k2 (subst_loc k2 x u2) k ∘ allK extract k
∘ allK (incr w) k) =
(funk =>
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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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: forallk, 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: forallk1k2 (u1 : T k1 LN) (u2 : T k2 LN) x,
k1 <> k2 ->
LC (T k2) k1 u2 ->
(funk '(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))) =
(funk '(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
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) xwl,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) xwl,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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))
nowrewrite 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) tx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) tx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
forallw (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 infresh; eauto.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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)
nowrewrite <- (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) t (xy : 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallk (u : T k LN) t (xy : 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxwl,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxwl,
(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: forallk, 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: forallk, 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
matchmatch 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)
endendwith
| 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))
endend = mret T k l
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
matchmatch 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)
endendwith
| 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))
endend = mret T k l
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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))
endend = mret T k (Fr x)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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))
endend = mret T k (Fr a)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Lt => Bd n
| _ => Bd (S n)
endwith
| 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))
endend = mret T k (Bd n)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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))
endend = mret T k (Fr x)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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))
endend = 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: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Lt => Bd n
| _ => Bd (S n)
endwith
| 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))
endend = mret T k (Bd n)
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxt,
('[ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxt,
('[ 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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] *)(**************************************************************************)Definitionopen_LN_lock (u : LN) : list K * LN -> LN :=
funwl =>
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
endendend.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkl,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkl,
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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T k: K l: LN t: U LN
forallw (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxwl,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxwl,
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: forallk, 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: forallk, 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
matchmatch 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)
endendwith
| 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)
endend = l
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
matchmatch 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)
endendwith
| 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)
endend = l
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Eq => Fr x
| Lt => Bd n
| Gt => Bd (n - 1)
endwith
| 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)
endend = Bd n
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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
nowcompare values x and a.
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Eq => Fr x
| Lt => Bd n
| Gt => Bd (n - 1)
endwith
| 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)
endend = Bd n
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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
matchmatch Nat.compare n (countk k w) with
| Eq => Fr x
| Lt => Bd n
| Gt => Bd (n - 1)
endwith
| 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)
endend = Bd n
U: Type -> Type ix: Index T: K -> Type -> Type MReturn0: MReturn T MBind0: MBind (list K) T U H: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxt,
~ 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkxt,
~ 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
forallw (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
nowapply 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (u : T k LN),
LC (T k) k u ->
(forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l)) ->
forallwl,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l) w: list K l: LN Hin: existsw1w2l1,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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 + 0end 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (u : T k LN),
n > 0 ->
LC (T k) k u ->
(forallwl,
(w, k, l) ∈md t '( k | u) -> lc_loc k (n - 1) (w, l)) ->
forallwl, (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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: forallwl,
(existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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
existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, 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: (existsw1w2l1,
(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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallknt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkntx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkntx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkt (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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallktx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (u : T j LN),
k <> j ->
LC (T j) k u ->
(forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l)) ->
forallwl,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l) w: list K l: LN Hin: (w, k, l) ∈md t \/
(existsw1w2l1,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l) w: list K l: LN Hin: existsw1w2l1,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (w, k, l) ∈md t -> lc_loc k n (w, l) w: list K l: LN Hin: existsw1w2l1,
(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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, 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: forallwl, (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (u : T j LN),
k <> j ->
LC (T j) k u ->
(forallwl,
(w, k, l) ∈md t '( j | u) -> lc_loc k n (w, l)) ->
forallwl, (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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(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: forallk, 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: forallwl,
(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: forallk, 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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjnt (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: forallk, 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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjtx,
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: forallk, MBind (list K) T (T k) H0: MultiDecoratedTraversablePreModule (list K) T U MultiDecoratedTraversableMonad0: MultiDecoratedTraversableMonad
(list K) T
forallkjtx,
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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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: forallk, 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
forallwl,
(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: forallk, 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
forallwl,
w = Ƶ /\ j = k /\ Fr x = l -> lc_loc k 0 (w, l)