Definition AccessMap_IE_Property  j12 j12' m1 m1' m2 m3'
           (AM:ZMap.t (Z -> perm_kind -> option permission)):Prop :=
  forall b2,
    (Mem.valid_block m2 b2 -> forall k ofs2,
         match source j12 m1 b2 ofs2 with
             Some(b1,ofs1) =>  PMap.get b2 AM ofs2 k =
                               PMap.get b1 m1'.(Mem.mem_access) ofs1 k
           | None => PMap.get b2 AM ofs2 k =
                     PMap.get b2 m2.(Mem.mem_access) ofs2 k
           end)
     /\ (~ Mem.valid_block m2 b2 -> forall k ofs2,
           match source j12' m1' b2 ofs2 with
              Some(b1,ofs1) => PMap.get b2 AM ofs2 k =
                               PMap.get b1 m1'.(Mem.mem_access) ofs1 k
            | None => PMap.get b2 AM ofs2 k =
                      PMap.get b2 m3'.(Mem.mem_access) ofs2 k
          end).

Lemma IE_ok: forall (m1 m1' m2 m3 m3':Mem.mem) j (Minj12 : Mem.inject j m1 m2) (Fwd1: mem_forward m1 m1') j' (InjInc: inject_incr j j') (Sep12 : inject_separated j j' m1 m2) (UnchLUj: Mem.unchanged_on (loc_unmapped j) m1 m1') (Ext23 : Mem.extends m2 m3) (Fwd3: mem_forward m3 m3') (UnchLOORj1_3: Mem.unchanged_on (loc_out_of_reach j m1) m3 m3') (Inj13' : Mem.inject j' m1' m3') (UnchLOOB23_3': Mem.unchanged_on (loc_out_of_bounds m2) m3 m3') m2' (NB: m2'.(Mem.nextblock)=m3'.(Mem.nextblock)) (CONT: Content_IE_Property j m1 m1' m2 m3' (m2'.(Mem.mem_contents))) (ACCESS: AccessMap_IE_Property j j' m1 m1' m2 m3' (m2'.(Mem.mem_access))), mem_forward m2 m2' /\ Mem.extends m2' m3' /\ Mem.inject j' m1' m2' /\ Mem.unchanged_on (loc_out_of_reach j m1) m2 m2'.