code: private void updatePredicateDependencyGraph(CQIE rule) {
  
  		List<Predicate> dependencyList = new LinkedList<>();
  
  		for (Function bodyAtom : rule.getBody()) {
  
  			if (bodyAtom.isDataFunction()) {
  				dependencyList.add(bodyAtom.getFunctionSymbol());
  			} else if (bodyAtom.isAlgebraFunction() || bodyAtom.isOperation()) {
  				updatePredicateDependencyGraph_traverseBodyAtom(dependencyList, bodyAtom);
  				//} else if (bodyAtom.isArithmeticFunction() || bodyAtom.isDataTypeFunction() {
  			} else if (bodyAtom.isDataTypeFunction()) {
  					continue;
  				} else {
  					throw new IllegalStateException("Unknown Function");
  				}
  		}
  
  		Predicate headPred = rule.getHead().getFunctionSymbol();
  		predicateDependencyGraph.addVertex(headPred);
  
  		for (Predicate dependentPred : dependencyList) {
  			predicateDependencyGraph.addVertex(dependentPred);
  			predicateDependencyGraph.addEdge(headPred, dependentPred);
  		}
  	}
docs: Updates the {@link #predicateDependencyGraph} by the input rule.
  
  It adds all the edges <rule.head.pred, p> to
  {@link #predicateDependencyGraph}, for all the p in the predicates of the
  rule body
  
  
  @param rule