code: @Override
      public CQIE getFreshCQIECopy(CQIE rule) {
  
          int suff = ++suffix;
  
          // This method doesn't support nested functional terms
          CQIE freshRule = rule.clone();
          Function head = freshRule.getHead();
          List<Term> headTerms = head.getTerms();
          for (int i = 0; i < headTerms.size(); i++) {
              Term term = headTerms.get(i);
              Term newTerm = getFreshTerm(term, suff);
              headTerms.set(i, newTerm);
          }
  
          List<Function> body = freshRule.getBody();
          for (Function atom : body) {
              List<Term> atomTerms = atom.getTerms();
              for (int i = 0; i < atomTerms.size(); i++) {
                  Term term = atomTerms.get(i);
                  Term newTerm = getFreshTerm(term, suff);
                  atomTerms.set(i, newTerm);
              }
          }
          return freshRule;
      }
docs: *
  Replaces each variable 'v' in the query for a new variable constructed
  using the name of the original variable plus the counter. For example
  
  <pre>
  q(x) :- C(x)
  
  results in
  
  q(x_1) :- C(x_1)
  
  if counter = 1.
  </pre>
  
  <p>
  This method can be used to generate "fresh" rules from a datalog program
  so that it can be used during a resolution step.
  suffix
  The integer that will be apended to every variable name
  @param rule
  @return