Definition sign_ext (n: Z) (x: nval) :=
match x with
| Nothing => Nothing
| I m => I (Int.or (Int.zero_ext n m) (Int.shl Int.one (Int.repr (n - 1))))
| All => I (Int.zero_ext n Int.mone)
end.

Lemma sign_ext_sound:
forall v w x n,
vagree v w (sign_ext n x) ->
0 < n < Int.zwordsize ->
vagree (Val.sign_ext n v) (Val.sign_ext n w) x.