Ltac geninv x :=
  let H := fresh in (generalize x; intro H; inv H).

(* Specifications: *)
Lemma match_env_invariant: forall f1 cenv e sp lo hi f2, match_env f1 cenv e sp lo hi -> inject_incr f1 f2 -> (forall b delta, f2 b = Some(sp, delta) -> f1 b = Some(sp, delta)) -> (forall b, Plt b lo -> f2 b = f1 b) -> match_env f2 cenv e sp lo hi.
Lemma match_env_restrict_invariant: forall f1 cenv e sp lo hi f2 (WD1: SM_wd f1) (WD2: SM_wd f2) (ME: match_env (restrict (as_inj f1) (vis f1)) cenv e sp lo hi) (INT: intern_incr f1 f2) (HA: forall b delta, as_inj f2 b = Some(sp, delta) -> as_inj f1 b = Some(sp, delta)) (HB: forall b, Plt b lo -> (as_inj f2) b = (as_inj f1) b), match_env (restrict (as_inj f2) (vis f2)) cenv e sp lo hi.