Definition shrimm (x: nval) (n: int) :=
match x with
| Nothing => Nothing
| I m => I (let m' := Int.shl m n in
if Int.eq_dec (Int.shru m' n) m
then m'
else Int.or m' (Int.repr Int.min_signed))
| All => I (Int.or (Int.shl Int.mone n) (Int.repr Int.min_signed))
end.

(* Specifications: *)
Lemma shrimm_sound:
forall v w x n,
vagree v w (shrimm x n) ->
vagree (Val.shr v (Vint n)) (Val.shr w (Vint n)) x.