let create_schema_term (predicate: symbol) : term =
  if Symbol.arity predicate = 0 then
    request_const predicate

  else
    (* create the most general term,
       i.e. a term with a fresh parameter at each position *)

    let terms =
      Array.make (Symbol.arity predicate) null_term
    in
      for i = 0 to Symbol.arity predicate - 1 do
      terms.(i) <- request_var (Var.create_universal i)
      done;
      request_func (predicate, terms)