Proof with eauto with renamings id_renamings val_renamings.
intros.
constructor; constructor;
eauto with id_renamings; unfold id_ren; intros;
repeat match goal with
| [H: context[valid_block_dec ?M ?B] |- _] =>
destruct (valid_block_dec M B); simpl in *
| [H: _ = Some _ |- _] => inv H; clear H
end; auto.
now apply po_refl.
destruct (ZMap.get ofs (Mem.mem_contents m) # b2) eqn:Hget;
constructor.
destruct v0; constructor.
specialize (H _ v _ _ Hget).
simpl in H.
destruct (valid_block_dec m b); simpl; tauto.
Qed.

Lemma mem_obs_eq_extend:
forall m1 m1' m2' f pmap pmap'
(Hlt1: permMapLt pmap (getMaxPerm m1))
(Hlt1': permMapLt pmap' (getMaxPerm m1'))
(Hlt2': permMapLt pmap' (getMaxPerm m2'))
(Hmem_obs_eq: mem_obs_eq f (restrPermMap Hlt1) (restrPermMap Hlt1'))
(Hextend': forall b, Mem.valid_block m1' b -> Mem.valid_block m2' b)
(Hstable: forall b ofs, Mem.perm (restrPermMap Hlt1') b ofs Cur Readable ->
ZMap.get ofs (Mem.mem_contents m1') # b = ZMap.get ofs (Mem.mem_contents m2') # b),
mem_obs_eq f (restrPermMap Hlt1) (restrPermMap Hlt2').