code: public Collection<Axiom> getInferredAxioms() {
          final Collection<Axiom> inferred = new HashSet<>();
  
          if(!isClassified) classify();
  
          if (!no.isTaxonomyComputed()) {
              log.info("Building taxonomy");
              no.buildTaxonomy();
          }
  
          final Map<String, Node> taxonomy = no.getTaxonomy();
          final IConceptMap<Context> contextIndex = no.getContextIndex();
          final IntIterator itr = contextIndex.keyIterator();
          while (itr.hasNext()) {
              final int key = itr.next();
              final String id = factory.lookupConceptId(key).toString();
  
              if (factory.isVirtualConcept(key) || NamedConcept.BOTTOM.equals(id)) {
                  continue;
              }
  
              Concept rhs = getNecessary(contextIndex, taxonomy, key);
  
              final Concept lhs = new NamedConcept(id);
              if (!lhs.equals(rhs) && !rhs.equals(NamedConcept.TOP_CONCEPT)) { // skip trivial axioms
                  inferred.add(new ConceptInclusion(lhs, rhs));
              }
          }
  
          return inferred;
      }
docs: Ideally we'd return some kind of normal form axioms here.  However, in
  the presence of GCIs this is not well defined (as far as I know -
  Michael).
  <p>
  Instead, we will return stated form axioms for Sufficient conditions
  (i.e. for INamedConcept on the RHS), and SNOMED CT DNF-based axioms for
  Necessary conditions. The former is just a filter over the stated axioms,
  the latter requires looking at the Taxonomy and inferred relationships.
  <p>
  Note that there will be <i>virtual</i> INamedConcepts that need to be
  skipped/expanded and redundant IExistentials that need to be filtered.
  
  @return