public void removeIncoerentTrees() {
		HashSet<HashSet<Integer>> treeToRemove = new HashSet<HashSet<Integer>>();
		HashSet<Integer> keyToRemove = new HashSet<Integer>();
		Set<Integer> goodStates = FiniteTreesTable.keySet();
		for (Entry<Integer, HashSet<HashSet<Integer>>> entryOfTable : FiniteTreesTable.entrySet()) {
			for (HashSet<Integer> tree : entryOfTable.getValue()) {
				if (!goodStates.containsAll(tree)) {
					treeToRemove.add(tree);
				}
			}
			for(HashSet<Integer> tree : treeToRemove){
				entryOfTable.getValue().remove(tree);
			}
			treeToRemove.clear();
			if (entryOfTable.getValue().isEmpty()) {
				keyToRemove.add(entryOfTable.getKey());
			}
		}
		for (Integer key : keyToRemove)
			FiniteTreesTable.remove(key);
		keyToRemove.clear();
	}