private static ClauseAction createClauseActionWithNoAntecedant(Term consequent) {
      if (consequent.getNumberOfArguments() == 0) {
         return new AlwaysMatchedClauseAction(null);
      }

      // if all non-shared variables then always true
      // if all concrete terms (no variables) then reusable
      boolean hasVariables = false;
      boolean hasConcreteTerms = false;
      boolean hasSharedVariables = false;
      Set<Term> variables = new HashSet<>();
      for (Term t : consequent.getArgs()) {
         if (t.getType() == TermType.NAMED_VARIABLE) {
            hasVariables = true;
            if (!variables.add(t)) {
               hasSharedVariables = true;
            }
         } else {
            hasConcreteTerms = true;
            if (t.isImmutable() == false) {
               hasVariables = true;
            }
         }
      }

      if (!hasSharedVariables && !hasConcreteTerms) {
         return new AlwaysMatchedClauseAction(consequent.getArgs());
      } else if (hasConcreteTerms && !hasVariables) {
         return new ImmutableArgumentsClauseAction(consequent.getArgs());
      } else {
         return new MutableArgumentsClauseAction(consequent.getArgs());
      }
   }