code: @Override
      public void visit(HighLevelAbstractionDefinition def) throws ProtempaException {
          LOGGER.log(Level.FINER, "Creating rule for {0}", def);
          try {
              Set<ExtendedPropositionDefinition> epdsC = def
                      .getExtendedPropositionDefinitions();
  
              /*
               * If there are no extended proposition definitions defined, we
               * might still have an inverseIsA relationship with another
               * high-level abstraction definition.
               */
              if (!epdsC.isEmpty()) {
                  Rule rule = new Rule(def.getId());
                  rule.setSalience(TWO_SALIENCE);
                  ExtendedPropositionDefinition[] epds = epdsC
                          .toArray(new ExtendedPropositionDefinition[epdsC.size()]);
                  for (int i = 0; i < epds.length; i++) {
                      Pattern p = new Pattern(i, PROP_OT);
                      GetMatchesPredicateExpression matchesPredicateExpression = new GetMatchesPredicateExpression(epds[i], this.cache);
                      Constraint c = new PredicateConstraint(
                              matchesPredicateExpression);
                      p.addConstraint(c);
                      rule.addPattern(p);
                  }
                  rule.addPattern(new EvalCondition(
                          new HighLevelAbstractionCondition(def, epds), null));
                  rule.setConsequence(new HighLevelAbstractionConsequence(def,
                          epds, this.derivationsBuilder));
                  this.ruleToAbstractionDefinition.put(rule, def);
                  rules.add(rule);
                  ABSTRACTION_COMBINER.toRules(def, rules, this.derivationsBuilder);
              }
          } catch (InvalidRuleException e) {
              throw new AssertionError(e.getClass().getName() + ": "
                      + e.getMessage());
          }
      }
docs: Translates a high-level abstraction definition into rules.
  
  @param def a {@link HighLevelAbstractionDefinition}. Cannot be
  <code>null</code>.
  @throws KnowledgeSourceReadException if an error occurs accessing the
  knowledge source during rule creation.