Proof using.
induction ns; intros; simpl in *; [ intuition | idtac ].
invc_NoDup.
break_or_hyp.
- rewrite collate_ls_not_in; auto.
unfold update2.
break_if; auto.
break_or_hyp; intuition.
- assert (H_neq: a <> from).
intro.
find_rewrite.
auto.
rewrite IHns; auto.
unfold update2.
break_if; auto.
break_and; subst.
intuition.
Qed.

(* Specifications: *)
Lemma collate_ls_live_related :
forall ns (f : A -> A -> list B) ns' h mg from,
~ In from ns' ->
R h from ->
In from ns ->
NoDup ns ->
collate_ls A_eq_dec (filter_rel R_dec h (remove_all A_eq_dec ns' ns)) f h mg from h = f from h ++ [mg].