let subst env lval exp p =
let mem_here = mem_at env Clabels.Here in
let var, mu = get_var_and_mu mem_here lval exp in
match mu with None -> unsupported "substitution of unknown value"
| Some mu ->
debug2 "[subst_var_and_mu] %a := %a@." F.pp_var var F.pp_term mu;
let p = D.subst var mu p in
debug2 "= %a@." F.pp_pred p;
p