Fixpoint reach'' (m:mem) (B:block -> bool) (L:list (block * Z)): block -> bool:=
  match L with
    nil => B
  | l::L => match l with
             (b',z) => match ZMap.get z (PMap.get b' (Mem.mem_contents m))
                       with Pointer b off n => fun bb => eq_block bb b &&
                                               Mem.perm_dec m b' z Cur Readable  &&
                                               reach'' m B L b'
                           | _ => fun bb => false
                       end
            end
  end.

Lemma reach_inject: forall m1 m2 j (J: Mem.inject j m1 m2) L1 b1 B1 (R: reach m1 B1 L1 b1) B2 (HB: forall b, B1 b -> exists jb d, j b = Some(jb,d) /\ B2 jb), exists b2 L2 d2, j b1 = Some(b2,d2) /\ reach m2 B2 L2 b2.