private static <L> State resolveSet(Collection<State> set, Fst<L> owner,
			final Map<Collection<State>, State> chart, Fst<L> result) {
		if (chart.containsKey(set)) {
			return chart.get(set);
		} else {

			boolean isInit = false;
			for (State s : set) {
				if (owner.isInitial(s)) {
					isInit = true;
					break;
				}
			}

			boolean isAccept = false;
			for (State s : set) {
				if (owner.isAccept(s)) {
					isAccept = true;
					break;
				}
			}
			State intersectionState = result.addState(
					isInit ? StateFlag.INITIAL : null,
					isAccept ? StateFlag.ACCEPT : null);
			chart.put(set, intersectionState);
			return intersectionState;
		}
	}