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.