Inductive match_freelists (j:meminj): list (block * Z * Z) -> list (block * Z * Z) -> Prop :=
match_freelists_nil: match_freelists j nil nil
| match_freelists_cons: forall b1 lo1 hi1 t1 b2 lo2 hi2 t2 delta,
j b1 = Some (b2,delta) ->
lo2 = lo1+delta -> hi2 = hi1+delta ->
match_freelists j t1 t2 ->
match_freelists j ((b1,lo1,hi1)::t1) ((b2,lo2,hi2)::t2).

Lemma freelist_freelist_inject : forall f l1 l2
(F: match_freelists f l1 l2)  m1 m1' m2 m2'
(INJ: Mem.inject f m1 m2)
(FREE1: Mem.free_list m1 l1 = Some m1')
(FREE2: Mem.free_list m2 l2 = Some m2'),
Mem.inject f m1' m2'.