code: public static Collection<TreeWitnessGenerator> getTreeWitnessGenerators(ClassifiedTBox reasoner) {
  		
  		Map<ClassExpression, TreeWitnessGenerator> gens = new HashMap<>();
  
  		// COLLECT GENERATING CONCEPTS (together with their declared subclasses)
  		// TODO: improve the algorithm
  		for (Equivalences<ClassExpression> set : reasoner.classesDAG()) {
  			Set<Equivalences<ClassExpression>> subClasses = reasoner.classesDAG().getSub(set);
  			boolean couldBeGenerating = set.size() > 1 || subClasses.size() > 1; 
  			for (ClassExpression concept : set) {
  				if (concept instanceof ObjectSomeValuesFrom && couldBeGenerating) {
  					ObjectSomeValuesFrom some = (ObjectSomeValuesFrom)concept;
  					TreeWitnessGenerator twg = gens.get(some);
  					if (twg == null) {
  						twg = new TreeWitnessGenerator(reasoner, some.getProperty());			
  						gens.put(concept, twg);
  					}
  					for (Equivalences<ClassExpression> subClassSet : subClasses) {
  						for (ClassExpression subConcept : subClassSet) {
  							if (!subConcept.equals(concept)) {
  								twg.concepts.add(subConcept);
  								log.debug("GENERATING CI: {} <= {}", subConcept, some);
  							}
  						}
  					}
  				}				
  			}
  		}
  
  		return gens.values();
  		
  	}
docs: tree witness generators of the ontology (i.e., positive occurrences of \exists R.B)