code: protected boolean completeConsistentTable(List<List<Row<I>>> unclosed, boolean checkConsistency) {
          boolean refined = false;
          List<List<Row<I>>> unclosedIter = unclosed;
          do {
              while (!unclosedIter.isEmpty()) {
                  List<Row<I>> closingRows = selectClosingRows(unclosedIter);
                  unclosedIter = table.toShortPrefixes(closingRows, oracle);
                  refined = true;
              }
  
              if (checkConsistency) {
                  Inconsistency<I> incons;
  
                  do {
                      incons = table.findInconsistency();
                      if (incons != null) {
                          Word<I> newSuffix = analyzeInconsistency(incons);
                          unclosedIter = table.addSuffix(newSuffix, oracle);
                      }
                  } while (unclosedIter.isEmpty() && (incons != null));
              }
          } while (!unclosedIter.isEmpty());
  
          return refined;
      }
docs: Iteratedly checks for unclosedness and inconsistencies in the table, and fixes any occurrences thereof. This
  process is repeated until the observation table is both closed and consistent.
  
  @param unclosed
  the unclosed rows (equivalence classes) to start with.