let rec mk_offset_update texpr env base t_base exp off =
  match off with
  | NoOffset -> exp
  | Field (f, next) ->
      let e = M.mk_field_access base f in
      let e = mk_offset_update texpr env e (Ctype f.ftype) exp next in
      let e = match e with None -> None
          | Some e -> Some (M.mk_field_update base f e)
      in e
  | Index (t,next) ->
      match texpr t with
        | Some idx ->
            let idx = match env with None -> idx
              | Some env -> MT.term_at env (LogicLabel "Old") idx Fol.PTint in
            let t_elem = Types.ltype_array_elem t_base in
            let e = M.mk_index_access base t_elem idx in
            let e = mk_offset_update texpr env e t_elem exp next in
            let e = match e with None -> None
              | Some e -> Some (M.mk_index_update base idx e)
            in e
        | None -> None