docs: private void validateClause(MatchClause matchClause) {
  
          Disjunction<Conjunction<Pattern>> negationDNF = matchClause.getPatterns().getNegationDNF();
  
          // assert none of the statements have no properties (eg. `match $x; get;`)
          List<Statement> statementsWithoutProperties = negationDNF.getPatterns().stream()
                  .flatMap(p -> p.statements().stream())
                  .filter(statement -> statement.properties().size() == 0)
                  .collect(toList());
          if (statementsWithoutProperties.size() != 0) {
              throw GraqlQueryException.matchWithoutAnyProperties(statementsWithoutProperties.get(0));
          }
  
          validateVarVarComparisons(negationDNF);
  
          negationDNF.getPatterns().stream()
                  .flatMap(p -> p.statements().stream())
                  .map(p -> Graql.and(Collections.singleton(p)))
                  .forEach(pattern -> ReasonerQueries.createWithoutRoleInference(pattern, transaction).checkValid());
          if (!infer) {
              boolean containsNegation = negationDNF.getPatterns().stream()
                      .flatMap(p -> p.getPatterns().stream())
                      .anyMatch(Pattern::isNegation);
              if (containsNegation) {
                  throw GraqlQueryException.usingNegationWithReasoningOff(matchClause.getPatterns());
              }
          }
      }