code: public static ReasonerQueryImpl create(List<Atom> as, TransactionOLTP tx){
          boolean isAtomic = as.size() == 1;
          return isAtomic?
                  new ReasonerAtomicQuery(Iterables.getOnlyElement(as)).inferTypes() :
                  new ReasonerQueryImpl(as, tx).inferTypes();
      }
docs: create a reasoner query from provided list of atoms
  NB: atom constraints (types and predicates, if any) will be included in the query
  @param as list of atoms that define the query
  @param tx corresponding transaction
  @return reasoner query defined by the provided list of atoms together with their constraints (types and predicates, if any)