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