Ltac memval_lessdef_tac :=
match goal with
| H: memval_lessdef ?a ?b |- _ => destruct a,b; inv H
| H: list_forall2 _ ?a ?b |- _ => destruct a,b; inv H
| H: proj_bytes ?a = Some _ |- _ => match a with context [nil] => inv H end
end;
try discriminate;
try solve [unfold decode_val; simpl; auto] .

Lemma mem_lessdef_loadbytes:
forall m1 m2, mem_lessdef m1 m2 ->
forall b z n v1, Mem.loadbytes m1 b z n = Some v1 ->
exists v2, list_forall2 memval_lessdef v1 v2 /\ Mem.loadbytes m2 b z n = Some v2.