let mk_let ~fresh v exp p = match exp with
  | Fol.Tdata D1addr _
  | Fol.Tdata (D1var _)
    -> Fol.subst_in_pred do_exp_in_data v exp p
  | Fol.Tvar _v ->
      Fol.subst_in_pred do_exp_in_data v exp p
  | Fol.Tdata (D1muI _)
  | Fol.Tdata (D1muIrange _)
      (* TODO : build a let on x if it is not a single node *)
    -> Fol.subst_in_pred do_exp_in_data v exp p
  | _ -> Fol.let_pred do_exp_in_data ~fresh v exp p