code: public void updateRuleIndexByBodyPredicate(CQIE rule) {
  		for (Function bodyAtom : rule.getBody()) {
  
  			if (bodyAtom.isDataFunction()) {
  				Predicate functionSymbol = bodyAtom.getFunctionSymbol();
  				if (!ruleIndexByBodyPredicate.containsEntry(functionSymbol, rule)){
  					ruleIndexByBodyPredicate.put(functionSymbol, rule);
  				}
  			} else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) {
  				updateRuleIndexByBodyPredicate_traverseBodyAtom(rule, bodyAtom);
  			// BC: should we reintroduce arithmetic functions?
  			//} else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction()){
  			} else if (bodyAtom.isDataTypeFunction()){
  				continue;
  			} else {
  				throw new IllegalStateException("Unknown Function");
  			}
  		}
  	}
docs: updates
  
  @param rule