Remark in_remove:
forall (A: Type) (eq: forall (x y: A), {x=y}+{x<>y}) x y l,
In y (List.remove eq x l) <-> x <> y /\ In y l.

Lemma add_op_holds:
forall valu1 ge sp rs m n op (args: list reg) v dst,
numbering_holds valu1 ge sp rs m n ->
eval_operation ge sp op rs##args m = Some v ->
exists valu2, numbering_holds valu2 ge sp (rs#dst <- v) m (add_op n dst op args).