ostream& operator<<(ostream& os, const Predicate& p) {
std::ostream& operator<<(std::ostream& os, const Predicate& p) {
ostream& operator<<(ostream& os, const Predicate& p) {  os << '(' << p.name();  size_t n = p.arity();  for (size_t i = 0; i < n; i++) {    os << " x? - " << p.type(i);  }  os << ')';  return os;}