docs: @SuppressWarnings("unchecked")
  	private Vector<Vector<HashMap<FuzzyAllenIntervalConstraint.Type, Double>>> fuzzyPathConsistency(Vector<Vector<HashMap<FuzzyAllenIntervalConstraint.Type, Double>>> frelations) {
  		int numVars = getNumVars();
  		//need to cycle at least (numVars^2 - numVars) times
  		int counter = numVars*numVars - numVars;
  		boolean[][] mark = new boolean[numVars][numVars];
  		
  		for(int i = 0; i < numVars; i++) {
  			for(int j = 0; j < numVars; j++) {
  				if(i == j) mark[i][j] = false;
  				else mark[i][j] = true;
  			}
  		}	
  		
  		while(counter != 0) { // while the set is not empty
  			for(int i = 0; i < numVars; i++) {
  				for(int j = 0; j < numVars; j++) {
  					if(i == j) continue;
  					if(mark[i][j]){
  						mark[i][j] = false;	
  						counter--; //remove from set
  						for(int k = 0; k < numVars; k++) {
  							if(k == i || k == j) continue;
  							//process relation (k,j)
  							//back up relation (k,j)
  							HashMap<FuzzyAllenIntervalConstraint.Type, Double> hashMaptmp = (HashMap<FuzzyAllenIntervalConstraint.Type, Double>) frelations.get(k).get(j).clone();
  							//(k,j) <-- (k,j) n (k,i) + (i,j) 
  							updateRelation(frelations.get(k).get(j), generateComposition(frelations.get(k).get(i), frelations.get(i).get(j)));
  							//if changed, must re-process (k,j)
  							if(!compareRelation(frelations.get(k).get(j), hashMaptmp)) {
  								if(!mark[k][j]) {
  									mark[k][j] = true;
  									counter++;
  								}
  							}
  							//process relation (i,k)
  							//back up relation (i,k)
  							hashMaptmp = (HashMap<FuzzyAllenIntervalConstraint.Type, Double>)frelations.get(i).get(k).clone();
  							//(i,k) <-- (i,k) n (i,j) + (j,k)
  							updateRelation(frelations.get(i).get(k), generateComposition(frelations.get(i).get(j), frelations.get(j).get(k)));
  							//if changed, must re-process (i,k)
  							if(!compareRelation(frelations.get(i).get(k), hashMaptmp)) {
  								if(!mark[i][k]) {
  									mark[i][k] = true;
  									counter++;
  								}
  							}
  						}//end of k loop	
  					}
  				}
  			}
  		}
  		return frelations;
  	}