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)]