let assign_exp lv e p =
  try
    let ty = Ctype (Cil.typeOfLval lv) in
    let new_mem = M.mem_update (Lazy.force MV.cur_mem) ty (lval_addr lv) e in
    Fol.let_pred M.prop_in_data ~fresh:true
      (Lazy.force MV.cur_mem_var) new_mem p
  with Calculus.InvalidModel msg -> MV.abort msg