private static <A, B, C> State resolvePair2(StatePair lr, Fst<A> left,

	Fst<B> rigth, final Map<StatePair, State> chart, Fst<C> intersection) {
		if (chart.containsKey(lr)) {
			return chart.get(lr);
		} else {

			boolean isInit = left.isInitial(lr.fst) && rigth.isInitial(lr.snd);
			boolean isAccept = left.isAccept(lr.fst) && rigth.isAccept(lr.snd);

			State intersectionState = intersection.addState(
					isInit ? StateFlag.INITIAL : null,
					isAccept ? StateFlag.ACCEPT : null);
			chart.put(lr, intersectionState);
			return intersectionState;
		}
	}