let p_exists_vars (prop_in_data: ('a d_term -> 'a d_term) -> 'a -> 'a d_term) vars (p: 'a d_pred) : 'a d_pred = let vars, p = fresh_vars_in_pred prop_in_data vars p in List.fold_left (fun p v -> p_exists v p) p vars