@Override
  public boolean isApplicable(TableauTree tree) {
    if (tree.getConcepts() == null || tree.getConcepts().isEmpty()) {
      tree.addAppliedRule(this.getClass());
      return false;
    }

    if (tree.isRuleApplied(this.getClass())) {
      return false;
    }

    return getExistencialTerm(tree) != null;
  }
  /**
   * @return
   * @author jmayaalv
   */
  private RoleTerm getExistencialTerm(TableauTree tree) {

    RoleTerm rTerm = null;
    for (Term term : tree.getConcepts()) {
      if (term instanceof RoleTerm) {
        RoleTerm roleTerm = (RoleTerm) term;
        if (RoleTerm.RoleTermOperation.EXISTENTIAL_RESTRICTION.equals(roleTerm.getOperation())) {
          rTerm = roleTerm;
          break;
        }
      }
    }

    if (rTerm == null) {
      tree.addAppliedRule(this.getClass());
    }

    return rTerm;
  }