let visit_data_in_pred ~all do_data acc p =
  let do_var acc v = do_data (fun acc _ -> acc) acc (D1var (None, v)) in
  let do_top_data do_exp acc d =
    let do_sub_data acc d = if all then do_data do_exp acc d else acc in
      visit_exp_in_data do_sub_data do_exp (do_data do_exp acc d) d
  in
  Fol.fold_data_in_pred do_var do_top_data acc p