let subst_havoc env = function
    | D.Aloc(te,lval) ->
        let m = mem_at env Clabels.Here in
        let t = D.tau_of_object te in
        let v = D.fresh "out" (Mdata.Vmodel t) in
        let exp = F.var v in
        let x, _f_obj_n, f_mu = mk_mu m lval in
        let newterm (sigma : D.substitution) : Formula.abstract F.term =
          let obj_0 = D.apply sigma (F.var x) in
          f_mu obj_0 exp
        in
        [D.Fresh v ; D.Update(x,newterm)]
    | D.Arange(_,lval,rg) ->
        let m = mem_at env Clabels.Here in
        let upd_range rg t = F.wrap (D.set_range_index (F.unwrap t) rg) in
        let x, f_obj_n, f_mu = mk_mu m lval in
        let newterm (sigma : D.substitution) : Formula.abstract F.term =
          let obj_0 = D.apply sigma (F.var x) in
          let obj_n = f_obj_n obj_0 in
          let exp = upd_range rg obj_n in
          f_mu obj_0 exp
        in
        [D.Update(x,newterm)]