From d9d8078fc22e75b8e7a5527b8895f547e13ded0b Mon Sep 17 00:00:00 2001
From: Daniel Plagge <plagge@cs.uni-duesseldorf.de>
Date: Wed, 30 May 2012 17:37:10 +0200
Subject: [PATCH] refactored LTL operators and their tests

---
 .../domainobjects/ltl/CounterExample.java     |  227 +-
 .../ltl/CounterExampleBinaryOperator.java     |   13 +-
 .../ltl/CounterExampleConjunction.java        |   31 +-
 .../ltl/CounterExampleDisjunction.java        |   13 +-
 .../ltl/CounterExampleFinally.java            |   27 +-
 .../ltl/CounterExampleGlobally.java           |   76 +-
 .../ltl/CounterExampleHistory.java            |   54 +-
 .../ltl/CounterExampleImplication.java        |   13 +-
 .../ltl/CounterExampleNegation.java           |   10 +-
 .../domainobjects/ltl/CounterExampleNext.java |    4 +-
 .../domainobjects/ltl/CounterExampleOnce.java |   32 +-
 .../ltl/CounterExamplePredicate.java          |   29 +-
 .../ltl/CounterExampleProposition.java        |   37 +-
 .../ltl/CounterExampleRelease.java            |   36 +-
 .../ltl/CounterExampleSince.java              |   12 +-
 .../ltl/CounterExampleState.java              |   24 +-
 .../ltl/CounterExampleTransition.java         |   22 +-
 .../ltl/CounterExampleTrigger.java            |   38 +-
 .../ltl/CounterExampleUnaryOperator.java      |   14 +-
 .../ltl/CounterExampleUntil.java              |   10 +-
 .../ltl/CounterExampleWeakUntil.java          |   63 +-
 .../ltl/CounterExampleYesterday.java          |   11 +-
 .../unittests/CounterExampleAllUnitTests.java |   13 +-
 .../unittests/CounterExampleAndUnitTest.java  |  140 +-
 .../CounterExampleFinallyUnitTest.java        |   38 +-
 .../CounterExampleGloballyUnitTest.java       |   39 +-
 .../CounterExampleHistoryUnitTest.java        |   89 +-
 .../CounterExampleImplyUnitTest.java          |   66 +-
 .../unittests/CounterExampleNextUnitTest.java |  299 +-
 .../unittests/CounterExampleNotUnitTest.java  |  374 +-
 .../unittests/CounterExampleOnceUnitTest.java |  678 +-
 .../unittests/CounterExampleOrUnitTest.java   |   60 +-
 .../CounterExampleReleaseUnitTest.java        | 5916 ++++++--------
 .../CounterExampleSinceUnitTest.java          | 6522 ++++++++--------
 .../CounterExampleTriggerUnitTest.java        | 6933 +++++++++--------
 .../CounterExampleUntilUnitTest.java          | 4643 +++++------
 .../CounterExampleWeakUntilUnitTest.java      | 4288 +++++-----
 .../CounterExampleYesterdayUnitTest.java      |  288 +-
 38 files changed, 14548 insertions(+), 16634 deletions(-)

diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
index f416a69e..ab9082e1 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExample.java
@@ -20,75 +20,95 @@ import de.prob.prolog.term.PrologTerm;
  * @author Andriy Tolstoy
  * 
  */
-public final class CounterExample {
+public class CounterExample {
 	private final static PrologTerm NONE = new CompoundPrologTerm("none");
 
 	private final CounterExampleProposition propositionRoot;
 	private final List<CounterExampleProposition> propositions = new ArrayList<CounterExampleProposition>();
 	private final List<CounterExampleState> states = new ArrayList<CounterExampleState>();
 	private final int loopEntry;
-	private List<ArrayList<Boolean>> predicateValues;
 	private final List<Operation> initPath;
 
-	private final ListPrologTerm atomics;
-	private final ListPrologTerm example;
 	private final PathType pathType;
+	private final int ceSize; // the length of the counterexample (number of
+								// states without the initialisation)
+
+	protected CounterExample(CounterExampleProposition propositionRoot,
+			int loopEntry, List<Operation> initPath, PathType pathType,
+			int ceSize) {
+		super();
+		this.propositionRoot = propositionRoot;
+		this.loopEntry = loopEntry;
+		this.initPath = initPath;
+		this.pathType = pathType;
+		this.ceSize = ceSize;
+	}
 
 	public CounterExample(final Result modelCheckingResult) {
-		atomics = modelCheckingResult.getAtomics();
-		example = modelCheckingResult.getCounterexample();
 		loopEntry = modelCheckingResult.getLoopEntry();
 		pathType = modelCheckingResult.getPathType();
 		initPath = Collections.unmodifiableList(Arrays
 				.asList(modelCheckingResult.getInitPathOps()));
+		ceSize = modelCheckingResult.getCounterexample().size();
 
-		createStates(example);
+		final List<ArrayList<Boolean>> predicateValues = createStates(modelCheckingResult
+				.getCounterexample());
 
-		propositionRoot = createExample(modelCheckingResult.getStructure());
+		final String[] atomicFormulaNames = createAtomicNames(modelCheckingResult);
+		propositionRoot = createExample(modelCheckingResult.getStructure(),
+				atomicFormulaNames, predicateValues);
 		propositionRoot.setVisible(true);
 		Collections.reverse(propositions);
 
 	}
 
-	private void createStates(final ListPrologTerm example) {
-		// final boolean isLoopType = pathType == PathType.INFINITE;
-		int index = 0;
+	private String[] createAtomicNames(final Result modelCheckingResult) {
+		String[] res = new String[modelCheckingResult.getAtomics().size()];
+		int i = 0;
+		for (final PrologTerm term : modelCheckingResult.getAtomics()) {
+			res[i] = PrologTerm.atomicString(((CompoundPrologTerm) term)
+					.getArgument(1));
+		}
+		return res;
+	}
+
+	private List<ArrayList<Boolean>> createStates(final ListPrologTerm example) {
+		List<ArrayList<Boolean>> predicateValues = new ArrayList<ArrayList<Boolean>>();
+
+		for (int i = 0; i < example.size(); i++) {
+			predicateValues.add(new ArrayList<Boolean>());
+		}
 
+		int index = 0;
 		for (PrologTerm exampleElement : example) {
 			CompoundPrologTerm state = (CompoundPrologTerm) exampleElement;
-			int stateId = ((IntegerPrologTerm) state.getArgument(1)).getValue()
-					.intValue();
+			final PrologTerm stateId = state.getArgument(1);
 			final ListPrologTerm values = ((ListPrologTerm) state
 					.getArgument(2));
 			final CompoundPrologTerm operationTerm = (CompoundPrologTerm) state
 					.getArgument(3);
 
-			if (predicateValues == null) {
-				predicateValues = new ArrayList<ArrayList<Boolean>>();
-
-				for (int i = 0; i < values.size(); i++) {
-					predicateValues.add(new ArrayList<Boolean>());
-				}
-			}
-
 			for (int i = 0; i < values.size(); i++) {
 				int value = ((IntegerPrologTerm) values.get(i)).getValue()
 						.intValue();
 				predicateValues.get(i).add(value == 0 ? false : true);
 			}
 
-			// final boolean inLoop = isLoopType && index >= loopEntry;
 			final Operation operation = NONE.equals(operationTerm) ? null
 					: Operation.fromPrologTerm(operationTerm);
 			final CounterExampleState ceState = new CounterExampleState(index,
-					stateId, operation/* , inLoop */);
+					stateId, operation);
 			states.add(ceState);
 			index++;
 		}
+
+		return predicateValues;
 	}
 
-	private CounterExampleProposition createExample(final PrologTerm structure) {
-		CounterExampleProposition proposition = null;
+	private CounterExampleProposition createExample(final PrologTerm structure,
+			final String[] atomicFormulaNames,
+			List<ArrayList<Boolean>> predicateValues) {
+		final CounterExampleProposition proposition;
 
 		CompoundPrologTerm term = (CompoundPrologTerm) structure;
 		String functor = term.getFunctor();
@@ -104,18 +124,15 @@ public final class CounterExample {
 				Arrays.fill(values, CounterExampleValueType.FALSE);
 			}
 
-			proposition = new CounterExamplePredicate(functor, pathType,
-					loopEntry, Arrays.asList(values));
+			proposition = new CounterExamplePredicate(functor, this,
+					Arrays.asList(values));
 		} else if (arity == 1) {
 			if (functor.equals("ap") || functor.equals("tp")) {
 				IntegerPrologTerm atomic = (IntegerPrologTerm) term
 						.getArgument(1);
 				int atomicId = atomic.getValue().intValue();
 
-				CompoundPrologTerm atomicTerm = (CompoundPrologTerm) atomics
-						.get(atomicId);
-				atomicTerm = (CompoundPrologTerm) atomicTerm.getArgument(1);
-				String name = atomicTerm.getFunctor();
+				final String name = atomicFormulaNames[atomicId];
 
 				Logger.assertProB("CounterExample invalid",
 						values.length == predicateValues.get(atomicId).size());
@@ -126,75 +143,97 @@ public final class CounterExample {
 				}
 
 				proposition = functor.equals("ap") ? new CounterExamplePredicate(
-						name, pathType, loopEntry, Arrays.asList(values))
-						: new CounterExampleTransition(name, pathType,
-								loopEntry, Arrays.asList(values));
+						name, this, Arrays.asList(values))
+						: new CounterExampleTransition(name, this,
+								Arrays.asList(values));
 			} else {
-				CounterExampleProposition argument = createExample(term
-						.getArgument(1));
-				if (functor.equals("globally")) {
-					proposition = new CounterExampleGlobally(pathType,
-							loopEntry, argument);
-				} else if (functor.equals("finally")) {
-					proposition = new CounterExampleFinally(pathType,
-							loopEntry, argument);
-				} else if (functor.equals("next")) {
-					proposition = new CounterExampleNext(pathType, loopEntry,
-							argument);
-				} else if (functor.equals("not")) {
-					proposition = new CounterExampleNegation(pathType,
-							loopEntry, argument);
-				} else if (functor.equals("once")) {
-					proposition = new CounterExampleOnce(pathType, loopEntry,
-							argument);
-				} else if (functor.equals("yesterday")) {
-					proposition = new CounterExampleYesterday(pathType,
-							loopEntry, argument);
-				} else if (functor.equals("historically")) {
-					proposition = new CounterExampleHistory(pathType,
-							loopEntry, argument);
-				}
-
-				argument.setParent(proposition);
+				proposition = createUnaryOperator(atomicFormulaNames,
+						predicateValues, term, functor);
 			}
 		} else if (arity == 2) {
-			CounterExampleProposition firstArgument = createExample(term
-					.getArgument(1));
-			CounterExampleProposition secondArgument = createExample(term
-					.getArgument(2));
+			proposition = createBinaryOperator(atomicFormulaNames,
+					predicateValues, term, functor);
+		} else {
+			throw new IllegalArgumentException("Unexpected Prolog LTL " + arity
+					+ "-ary operator " + functor);
+		}
 
-			if (functor.equals("and")) {
-				proposition = new CounterExampleConjunction(pathType,
-						loopEntry, firstArgument, secondArgument);
-			} else if (functor.equals("or")) {
-				proposition = new CounterExampleDisjunction(pathType,
-						loopEntry, firstArgument, secondArgument);
-			} else if (functor.equals("implies")) {
-				proposition = new CounterExampleImplication(pathType,
-						loopEntry, firstArgument, secondArgument);
-			} else if (functor.equals("until")) {
-				proposition = new CounterExampleUntil(pathType, loopEntry,
-						firstArgument, secondArgument);
-			} else if (functor.equals("weakuntil")) {
-				proposition = new CounterExampleWeakUntil(pathType, loopEntry,
-						firstArgument, secondArgument);
-			} else if (functor.equals("release")) {
-				proposition = new CounterExampleRelease(pathType, loopEntry,
-						firstArgument, secondArgument);
-			} else if (functor.equals("since")) {
-				proposition = new CounterExampleSince(pathType, loopEntry,
-						firstArgument, secondArgument);
-			} else if (functor.equals("trigger")) {
-				proposition = new CounterExampleTrigger(pathType, loopEntry,
-						firstArgument, secondArgument);
-			}
+		propositions.add(proposition);
+
+		return proposition;
+	}
 
-			firstArgument.setParent(proposition);
-			secondArgument.setParent(proposition);
+	private CounterExampleProposition createBinaryOperator(
+			final String[] atomicFormulaNames,
+			List<ArrayList<Boolean>> predicateValues, CompoundPrologTerm term,
+			String functor) {
+		final CounterExampleProposition proposition;
+		final CounterExampleProposition firstArgument = createExample(
+				term.getArgument(1), atomicFormulaNames, predicateValues);
+		final CounterExampleProposition secondArgument = createExample(
+				term.getArgument(2), atomicFormulaNames, predicateValues);
+
+		if (functor.equals("and")) {
+			proposition = new CounterExampleConjunction(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("or")) {
+			proposition = new CounterExampleDisjunction(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("implies")) {
+			proposition = new CounterExampleImplication(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("until")) {
+			proposition = new CounterExampleUntil(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("weakuntil")) {
+			proposition = new CounterExampleWeakUntil(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("release")) {
+			proposition = new CounterExampleRelease(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("since")) {
+			proposition = new CounterExampleSince(this, firstArgument,
+					secondArgument);
+		} else if (functor.equals("trigger")) {
+			proposition = new CounterExampleTrigger(this, firstArgument,
+					secondArgument);
+		} else {
+			throw new IllegalArgumentException(
+					"Unexpected Prolog LTL binary operator " + functor);
 		}
 
-		propositions.add(proposition);
+		firstArgument.setParent(proposition);
+		secondArgument.setParent(proposition);
+		return proposition;
+	}
 
+	private CounterExampleProposition createUnaryOperator(
+			final String[] atomicFormulaNames,
+			List<ArrayList<Boolean>> predicateValues, CompoundPrologTerm term,
+			String functor) {
+		final CounterExampleProposition proposition;
+		final CounterExampleProposition argument = createExample(
+				term.getArgument(1), atomicFormulaNames, predicateValues);
+		if (functor.equals("globally")) {
+			proposition = new CounterExampleGlobally(this, argument);
+		} else if (functor.equals("finally")) {
+			proposition = new CounterExampleFinally(this, argument);
+		} else if (functor.equals("next")) {
+			proposition = new CounterExampleNext(this, argument);
+		} else if (functor.equals("not")) {
+			proposition = new CounterExampleNegation(this, argument);
+		} else if (functor.equals("once")) {
+			proposition = new CounterExampleOnce(this, argument);
+		} else if (functor.equals("yesterday")) {
+			proposition = new CounterExampleYesterday(this, argument);
+		} else if (functor.equals("historically")) {
+			proposition = new CounterExampleHistory(this, argument);
+		} else {
+			throw new IllegalArgumentException(
+					"Unexpected Prolog LTL unary operator " + functor);
+		}
+
+		argument.setParent(proposition);
 		return proposition;
 	}
 
@@ -232,4 +271,8 @@ public final class CounterExample {
 	public List<Operation> getInitPath() {
 		return initPath;
 	}
+
+	public int getCounterExampleSize() {
+		return ceSize;
+	}
 }
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleBinaryOperator.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleBinaryOperator.java
index 0f02c582..79f2f924 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleBinaryOperator.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleBinaryOperator.java
@@ -3,7 +3,6 @@ package de.prob.core.domainobjects.ltl;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 import de.prob.logging.Logger;
 
 /**
@@ -20,10 +19,10 @@ public abstract class CounterExampleBinaryOperator extends
 	protected List<List<Integer>> secondHighlightedPositions = new ArrayList<List<Integer>>();
 
 	public CounterExampleBinaryOperator(final String name,
-			final String fullName, final PathType pathType,
-			final int loopEntry, final CounterExampleProposition firstArgument,
+			final String fullName, final CounterExample counterExample,
+			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super(name, fullName, pathType, loopEntry);
+		super(name, fullName, counterExample);
 		this.firstArgument = firstArgument;
 		this.secondArgument = secondArgument;
 	}
@@ -92,12 +91,6 @@ public abstract class CounterExampleBinaryOperator extends
 				secondCheckedSize, isPast));
 	}
 
-	@Override
-	protected int calculatePosition(int pos) {
-		int size = getFirstArgument().getValues().size();
-		return pos < size ? pos : pos - (size - loopEntry);
-	}
-
 	protected int indexOfUnknownState(
 			final List<CounterExampleValueType> firstCheckedValues,
 			final List<CounterExampleValueType> secondCheckedValues,
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleConjunction.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleConjunction.java
index 2afc61f1..e72430bc 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleConjunction.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleConjunction.java
@@ -1,7 +1,5 @@
 package de.prob.core.domainobjects.ltl;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
 
 /**
  * Provides an "and" operator.
@@ -12,27 +10,24 @@ import de.prob.logging.Logger;
 
 public final class CounterExampleConjunction extends
 		CounterExampleBinaryOperator {
-	private final CounterExampleNegation not;
-
-	public CounterExampleConjunction(final PathType pathType,
-			final int loopEntry, final CounterExampleProposition firstArgument,
+	public CounterExampleConjunction(final CounterExample counterExample,
+			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super("and", "Conjunction", pathType, loopEntry, firstArgument,
+		super("and", "Conjunction", counterExample, firstArgument,
 				secondArgument);
-
-		CounterExampleNegation notFirstArgument = new CounterExampleNegation(
-				pathType, loopEntry, firstArgument);
-		CounterExampleNegation notSecondArgument = new CounterExampleNegation(
-				pathType, loopEntry, secondArgument);
-		CounterExampleDisjunction or = new CounterExampleDisjunction(pathType,
-				loopEntry, notFirstArgument, notSecondArgument);
-		not = new CounterExampleNegation(pathType, loopEntry, or);
+		addCheckByDeMorgan(counterExample, firstArgument, secondArgument);
 	}
 
-	public CounterExampleConjunction(final PathType pathType,
+	private void addCheckByDeMorgan(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		CounterExampleNegation notFirstArgument = new CounterExampleNegation(
+				counterExample, firstArgument);
+		CounterExampleNegation notSecondArgument = new CounterExampleNegation(
+				counterExample, secondArgument);
+		CounterExampleDisjunction or = new CounterExampleDisjunction(
+				counterExample, notFirstArgument, notSecondArgument);
+		addCheck(new CounterExampleNegation(counterExample, or));
 	}
 
 	@Override
@@ -56,8 +51,6 @@ public final class CounterExampleConjunction extends
 
 		CounterExampleValueType value = calculateAnd(firstValue, secondValue);
 
-		Logger.assertProB("And invalid", value == not.getValues().get(position));
-
 		return value;
 	}
 
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleDisjunction.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleDisjunction.java
index 901e03bc..b6fb4a14 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleDisjunction.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleDisjunction.java
@@ -1,6 +1,5 @@
 package de.prob.core.domainobjects.ltl;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 
 /**
  * Provides an "or" operator.
@@ -11,17 +10,11 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
 
 public final class CounterExampleDisjunction extends
 		CounterExampleBinaryOperator {
-	public CounterExampleDisjunction(final PathType pathType,
-			final int loopEntry, final CounterExampleProposition firstArgument,
-			final CounterExampleProposition secondArgument) {
-		super("or", "Disjunction", pathType, loopEntry, firstArgument,
-				secondArgument);
-	}
-
-	public CounterExampleDisjunction(final PathType pathType,
+	public CounterExampleDisjunction(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		super("or", "Disjunction", counterExample, firstArgument,
+				secondArgument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleFinally.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleFinally.java
index cf0b4e66..90d6954c 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleFinally.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleFinally.java
@@ -5,7 +5,6 @@ import java.util.Arrays;
 import java.util.List;
 
 import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
 
 /**
  * Provides a "finally" operator.
@@ -15,34 +14,26 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleFinally extends CounterExampleUnaryOperator {
-	private final CounterExampleUntil until;
-
-	public CounterExampleFinally(final PathType pathType, final int loopEntry,
+	public CounterExampleFinally(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("F", "Finally", pathType, loopEntry, argument);
+		super("F", "Finally", counterExample, argument);
+		checkByUntil(counterExample, argument);
+	}
 
+	private void checkByUntil(final CounterExample counterExample,
+			final CounterExampleProposition argument) {
 		CounterExampleValueType[] firstValues = new CounterExampleValueType[argument
 				.getValues().size()];
 		Arrays.fill(firstValues, CounterExampleValueType.TRUE);
 
-		CounterExamplePredicate first = new CounterExamplePredicate(pathType,
-				loopEntry, Arrays.asList(firstValues));
+		CounterExamplePredicate first = new CounterExamplePredicate("",
+				counterExample, Arrays.asList(firstValues));
 
-		until = new CounterExampleUntil(pathType, loopEntry, first, argument);
+		addCheck(new CounterExampleUntil(counterExample, first, argument));
 	}
 
 	@Override
 	protected CounterExampleValueType calculate(final int position) {
-		CounterExampleValueType value = calculateFinallyOperator(position);
-
-		List<CounterExampleValueType> untilValues = until.getValues();
-
-		Logger.assertProB("Finally invalid", value == untilValues.get(position));
-
-		return value;
-	}
-
-	private CounterExampleValueType calculateFinallyOperator(final int position) {
 		CounterExampleValueType result = CounterExampleValueType.UNKNOWN;
 
 		List<CounterExampleValueType> checkedValues = new ArrayList<CounterExampleValueType>(
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleGlobally.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleGlobally.java
index bad9bdf6..b6f5fe43 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleGlobally.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleGlobally.java
@@ -5,7 +5,6 @@ import java.util.Arrays;
 import java.util.List;
 
 import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
 
 /**
  * Provides a "globally" operator.
@@ -15,66 +14,55 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleGlobally extends CounterExampleUnaryOperator {
-	private final CounterExampleRelease release;
-	private final CounterExampleNegation notFinally;
-	private final CounterExampleNegation notUntil;
-
-	public CounterExampleGlobally(final PathType pathType, final int loopEntry,
+	public CounterExampleGlobally(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("G", "Globally", pathType, loopEntry, argument);
-
-		CounterExampleValueType[] falseValues = new CounterExampleValueType[argument
-				.getValues().size()];
-		Arrays.fill(falseValues, CounterExampleValueType.FALSE);
-
-		CounterExamplePredicate falsePredicate = new CounterExamplePredicate(
-				pathType, loopEntry, Arrays.asList(falseValues));
-
-		release = new CounterExampleRelease(pathType, loopEntry,
-				falsePredicate, argument);
+		super("G", "Globally", counterExample, argument);
 
+		checkByRelease(counterExample, argument);
 		CounterExampleNegation notArgument = new CounterExampleNegation(
-				pathType, loopEntry, argument);
-
-		CounterExampleFinally finallyOperator = new CounterExampleFinally(
-				pathType, loopEntry, notArgument);
-
-		notFinally = new CounterExampleNegation(pathType, loopEntry,
-				finallyOperator);
+				counterExample, argument);
+		checkByFinally(counterExample, notArgument);
+		checkByUntil(counterExample, argument, notArgument);
+	}
 
+	private void checkByUntil(final CounterExample counterExample,
+			final CounterExampleProposition argument,
+			CounterExampleNegation notArgument) {
 		CounterExampleValueType[] trueValues = new CounterExampleValueType[argument
 				.getValues().size()];
 		Arrays.fill(trueValues, CounterExampleValueType.TRUE);
 
-		CounterExamplePredicate truePredicate = new CounterExamplePredicate(
-				pathType, loopEntry, Arrays.asList(trueValues));
+		CounterExamplePredicate truePredicate = new CounterExamplePredicate("",
+				counterExample, Arrays.asList(trueValues));
 
-		CounterExampleUntil until = new CounterExampleUntil(pathType,
-				loopEntry, truePredicate, notArgument);
-		notUntil = new CounterExampleNegation(pathType, loopEntry, until);
+		CounterExampleUntil until = new CounterExampleUntil(counterExample,
+				truePredicate, notArgument);
+		addCheck(new CounterExampleNegation(counterExample, until));
 	}
 
-	@Override
-	protected CounterExampleValueType calculate(final int position) {
-		CounterExampleValueType value = calculateGlobally(position);
-
-		List<CounterExampleValueType> releaseValues = release.getValues();
-		List<CounterExampleValueType> notFinallyValues = notFinally.getValues();
-		List<CounterExampleValueType> notUntilValues = notUntil.getValues();
+	private void checkByFinally(final CounterExample counterExample,
+			CounterExampleNegation notArgument) {
+		CounterExampleFinally finallyOperator = new CounterExampleFinally(
+				counterExample, notArgument);
 
-		Logger.assertProB("Globally invalid",
-				value == releaseValues.get(position));
+		addCheck(new CounterExampleNegation(counterExample, finallyOperator));
+	}
 
-		Logger.assertProB("Globally invalid",
-				value == notFinallyValues.get(position));
+	private void checkByRelease(final CounterExample counterExample,
+			final CounterExampleProposition argument) {
+		CounterExampleValueType[] falseValues = new CounterExampleValueType[argument
+				.getValues().size()];
+		Arrays.fill(falseValues, CounterExampleValueType.FALSE);
 
-		Logger.assertProB("Globally invalid",
-				value == notUntilValues.get(position));
+		CounterExamplePredicate falsePredicate = new CounterExamplePredicate(
+				"", counterExample, Arrays.asList(falseValues));
 
-		return value;
+		addCheck(new CounterExampleRelease(counterExample, falsePredicate,
+				argument));
 	}
 
-	private CounterExampleValueType calculateGlobally(final int position) {
+	@Override
+	protected CounterExampleValueType calculate(final int position) {
 		CounterExampleValueType result = CounterExampleValueType.UNKNOWN;
 
 		List<CounterExampleValueType> checkedValues = new ArrayList<CounterExampleValueType>(
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleHistory.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleHistory.java
index 6f320b58..d8479d1d 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleHistory.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleHistory.java
@@ -4,9 +4,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
-
 /**
  * Provides a "history" operator.
  * 
@@ -15,47 +12,42 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleHistory extends CounterExampleUnaryOperator {
-	private final CounterExampleNegation notOnce;
-	private final CounterExampleNegation notSince;
-
-	public CounterExampleHistory(final PathType pathType, final int loopEntry,
+	public CounterExampleHistory(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("H", "History", pathType, loopEntry, argument);
+		super("H", "History", counterExample, argument);
 
 		CounterExampleNegation notArgument = new CounterExampleNegation(
-				pathType, loopEntry, argument);
-
-		CounterExampleOnce onceOperator = new CounterExampleOnce(pathType,
-				loopEntry, notArgument);
-
-		notOnce = new CounterExampleNegation(pathType, loopEntry, onceOperator);
+				counterExample, argument);
+		checkByOnce(counterExample, notArgument);
+		checkBySince(counterExample, argument, notArgument);
+	}
 
+	private void checkBySince(final CounterExample counterExample,
+			final CounterExampleProposition argument,
+			CounterExampleNegation notArgument) {
 		CounterExampleValueType[] trueValues = new CounterExampleValueType[argument
 				.getValues().size()];
 		Arrays.fill(trueValues, CounterExampleValueType.TRUE);
 
-		CounterExamplePredicate truePredicate = new CounterExamplePredicate(
-				pathType, loopEntry, Arrays.asList(trueValues));
+		CounterExamplePredicate truePredicate = new CounterExamplePredicate("",
+				counterExample, Arrays.asList(trueValues));
 
-		CounterExampleSince since = new CounterExampleSince(pathType,
-				loopEntry, truePredicate, notArgument);
-		notSince = new CounterExampleNegation(pathType, loopEntry, since);
+		CounterExampleSince since = new CounterExampleSince(counterExample,
+				truePredicate, notArgument);
+		addCheck(new CounterExampleNegation(counterExample, since));
 	}
 
-	@Override
-	public CounterExampleValueType calculate(final int position) {
-		CounterExampleValueType value = calculateHistoryOperator(position);
-
-		List<CounterExampleValueType> notOnceValues = notOnce.getValues();
-		List<CounterExampleValueType> notSinceValues = notSince.getValues();
-
-		Logger.assertProB("History invalid",
-				value == notOnceValues.get(position));
+	private void checkByOnce(final CounterExample counterExample,
+			CounterExampleNegation notArgument) {
+		CounterExampleOnce onceOperator = new CounterExampleOnce(
+				counterExample, notArgument);
 
-		Logger.assertProB("History invalid",
-				value == notSinceValues.get(position));
+		addCheck(new CounterExampleNegation(counterExample, onceOperator));
+	}
 
-		return value;
+	@Override
+	public CounterExampleValueType calculate(final int position) {
+		return calculateHistoryOperator(position);
 	}
 
 	private CounterExampleValueType calculateHistoryOperator(final int position) {
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleImplication.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleImplication.java
index a11b756b..ea536c11 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleImplication.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleImplication.java
@@ -1,6 +1,5 @@
 package de.prob.core.domainobjects.ltl;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 
 /**
  * Provides an "imply" operator.
@@ -11,17 +10,11 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
 
 public final class CounterExampleImplication extends
 		CounterExampleBinaryOperator {
-	public CounterExampleImplication(final PathType pathType,
-			final int loopEntry, final CounterExampleProposition firstArgument,
-			final CounterExampleProposition secondArgument) {
-		super("=>", "Implication", pathType, loopEntry, firstArgument,
-				secondArgument);
-	}
-
-	public CounterExampleImplication(final PathType pathType,
+	public CounterExampleImplication(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		super("=>", "Implication", counterExample, firstArgument,
+				secondArgument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNegation.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNegation.java
index 2c624208..8f2eb3be 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNegation.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNegation.java
@@ -1,6 +1,5 @@
 package de.prob.core.domainobjects.ltl;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 
 /**
  * Provides a "not" operator.
@@ -10,14 +9,9 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleNegation extends CounterExampleUnaryOperator {
-	public CounterExampleNegation(final PathType pathType, final int loopEntry,
+	public CounterExampleNegation(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("not", "Negation", pathType, loopEntry, argument);
-	}
-
-	public CounterExampleNegation(final PathType pathType,
-			final CounterExampleProposition argument) {
-		this(pathType, -1, argument);
+		super("not", "Negation", counterExample, argument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNext.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNext.java
index 0ee28b23..86e81410 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNext.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleNext.java
@@ -13,9 +13,9 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleNext extends CounterExampleUnaryOperator {
-	public CounterExampleNext(final PathType pathType, final int loopEntry,
+	public CounterExampleNext(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("X", "Next", pathType, loopEntry, argument);
+		super("X", "Next", counterExample, argument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleOnce.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleOnce.java
index c0388ff2..f22ab22d 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleOnce.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleOnce.java
@@ -4,9 +4,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
-
 /**
  * Provides an "once" operator.
  * 
@@ -15,36 +12,27 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleOnce extends CounterExampleUnaryOperator {
-	private final CounterExampleSince since;
-
-	public CounterExampleOnce(final PathType pathType, final int loopEntry,
+	public CounterExampleOnce(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		super("O", "Once", pathType, loopEntry, argument);
+		super("O", "Once", counterExample, argument);
+		checkBySince(counterExample, argument);
+	}
 
+	private void checkBySince(final CounterExample counterExample,
+			final CounterExampleProposition argument) {
 		CounterExampleValueType[] firstValues = new CounterExampleValueType[argument
 				.getValues().size()];
 		Arrays.fill(firstValues, CounterExampleValueType.TRUE);
 
-		CounterExamplePredicate first = new CounterExamplePredicate(pathType,
-				loopEntry, Arrays.asList(firstValues));
-
-		since = new CounterExampleSince(pathType, loopEntry, first, argument);
-	}
+		CounterExamplePredicate first = new CounterExamplePredicate("",
+				counterExample, Arrays.asList(firstValues));
 
-	public CounterExampleOnce(final PathType pathType,
-			final CounterExampleProposition argument) {
-		this(pathType, -1, argument);
+		addCheck(new CounterExampleSince(counterExample, first, argument));
 	}
 
 	@Override
 	public CounterExampleValueType calculate(final int position) {
-		CounterExampleValueType value = calculateOnceOperator(position);
-
-		List<CounterExampleValueType> sinceValues = since.getValues();
-
-		Logger.assertProB("Once invalid", value == sinceValues.get(position));
-
-		return value;
+		return calculateOnceOperator(position);
 	}
 
 	private CounterExampleValueType calculateOnceOperator(final int position) {
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExamplePredicate.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExamplePredicate.java
index 6e4d8857..11643d8b 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExamplePredicate.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExamplePredicate.java
@@ -2,8 +2,6 @@ package de.prob.core.domainobjects.ltl;
 
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-
 /**
  * Provides predicates.
  * 
@@ -13,25 +11,11 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
 public class CounterExamplePredicate extends CounterExampleProposition {
 	private final List<CounterExampleValueType> values;
 
-	public CounterExamplePredicate(final String name, final PathType pathType,
-			final int loopEntry, final List<CounterExampleValueType> values) {
-		super(name, name, pathType, loopEntry);
-		this.values = values;
-	}
-
-	public CounterExamplePredicate(final String name, final PathType pathType,
-			final List<CounterExampleValueType> values) {
-		this(name, pathType, -1, values);
-	}
-
-	public CounterExamplePredicate(final PathType pathType,
-			final int loopEntry, final List<CounterExampleValueType> values) {
-		this("", pathType, loopEntry, values);
-	}
-
-	public CounterExamplePredicate(final PathType pathType,
+	public CounterExamplePredicate(final String name,
+			final CounterExample counterExample,
 			final List<CounterExampleValueType> values) {
-		this("", pathType, values);
+		super(name, name, counterExample);
+		this.values = values;
 	}
 
 	@Override
@@ -49,9 +33,4 @@ public class CounterExamplePredicate extends CounterExampleProposition {
 		return name;
 	}
 
-	@Override
-	protected int calculatePosition(int pos) {
-		int size = values.size();
-		return pos < size ? pos : pos - (size - loopEntry);
-	}
 }
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleProposition.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleProposition.java
index f63da11e..41251946 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleProposition.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleProposition.java
@@ -3,6 +3,7 @@ package de.prob.core.domainobjects.ltl;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import de.prob.core.command.LtlCheckingCommand.PathType;
@@ -19,8 +20,10 @@ public abstract class CounterExampleProposition {
 	protected final String fullName;
 	protected final int loopEntry;
 	protected final PathType pathType;
+	protected final CounterExample counterExample;
 	protected CounterExampleProposition parent;
 	private List<CounterExampleValueType> values;
+	private Collection<CounterExampleProposition> checks = new ArrayList<CounterExampleProposition>();
 
 	protected final PropertyChangeSupport listeners = new PropertyChangeSupport(
 			this);
@@ -28,11 +31,12 @@ public abstract class CounterExampleProposition {
 	protected int stateId = 0;
 
 	public CounterExampleProposition(final String name, final String fullName,
-			final PathType pathType, final int loopEntry) {
+			final CounterExample counterExample) {
 		this.name = name;
 		this.fullName = fullName;
-		this.loopEntry = loopEntry;
-		this.pathType = pathType;
+		this.loopEntry = counterExample.getLoopEntry();
+		this.pathType = counterExample.getPathType();
+		this.counterExample = counterExample;
 	}
 
 	public CounterExampleProposition getParent() {
@@ -50,6 +54,7 @@ public abstract class CounterExampleProposition {
 	public List<CounterExampleValueType> getValues() {
 		if (values == null) {
 			values = calculate();
+			performChecks(values);
 		}
 
 		return values;
@@ -99,7 +104,7 @@ public abstract class CounterExampleProposition {
 		listeners.removePropertyChangeListener(listener);
 	}
 
-	public List<Integer> fillPositions(int position, int index,
+	protected List<Integer> fillPositions(int position, int index,
 			int checkedSize, boolean isPastOperator) {
 		List<Integer> positions = new ArrayList<Integer>();
 
@@ -126,5 +131,27 @@ public abstract class CounterExampleProposition {
 
 	protected abstract List<CounterExampleValueType> calculate();
 
-	protected abstract int calculatePosition(int pos);
+	private int calculatePosition(int pos) {
+		final int size = counterExample.getCounterExampleSize();
+		return pos < size ? pos : pos - (size - loopEntry);
+	}
+
+	protected final void addCheck(CounterExampleProposition check) {
+		checks.add(check);
+	}
+
+	private void performChecks(List<CounterExampleValueType> values) {
+		for (final CounterExampleProposition check : checks) {
+			performCheck(check, values);
+		}
+	}
+
+	private void performCheck(CounterExampleProposition check,
+			List<CounterExampleValueType> values) {
+		List<CounterExampleValueType> values2 = check.getValues();
+		if (!values.equals(values2)) {
+			Logger.notifyUser("Encountered inconsistency in computation of LTL operator"
+					+ name);
+		}
+	}
 }
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleRelease.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleRelease.java
index fc802cc3..f4f5932f 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleRelease.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleRelease.java
@@ -4,7 +4,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
 
 /**
  * Provides a "release" operator.
@@ -14,39 +13,28 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleRelease extends CounterExampleBinaryOperator {
-	private final CounterExampleNegation notUntil;
-
-	public CounterExampleRelease(final PathType pathType, final int loopEntry,
+	public CounterExampleRelease(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super("R", "Release", pathType, loopEntry, firstArgument,
-				secondArgument);
-		CounterExampleNegation notFirst = new CounterExampleNegation(pathType,
-				loopEntry, firstArgument);
-		CounterExampleNegation notSecond = new CounterExampleNegation(pathType,
-				loopEntry, secondArgument);
-		CounterExampleUntil until = new CounterExampleUntil(pathType,
-				loopEntry, notFirst, notSecond);
-		notUntil = new CounterExampleNegation(pathType, loopEntry, until);
+		super("R", "Release", counterExample, firstArgument, secondArgument);
+		checkByUntil(counterExample, firstArgument, secondArgument);
 	}
 
-	public CounterExampleRelease(final PathType pathType,
+	private void checkByUntil(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		CounterExampleNegation notFirst = new CounterExampleNegation(
+				counterExample, firstArgument);
+		CounterExampleNegation notSecond = new CounterExampleNegation(
+				counterExample, secondArgument);
+		CounterExampleUntil until = new CounterExampleUntil(counterExample,
+				notFirst, notSecond);
+		addCheck(new CounterExampleNegation(counterExample, until));
 	}
 
 	@Override
 	protected CounterExampleValueType calculate(final int position) {
-		final CounterExampleValueType value = calculateReleaseOperator(position);
-
-		final List<CounterExampleValueType> notUntilValues = notUntil
-				.getValues();
-
-		Logger.assertProB("Release invalid",
-				value == notUntilValues.get(position));
-
-		return value;
+		return calculateReleaseOperator(position);
 	}
 
 	private CounterExampleValueType calculateReleaseOperator(final int position) {
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleSince.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleSince.java
index bf606ea9..9c050bc8 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleSince.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleSince.java
@@ -3,8 +3,6 @@ package de.prob.core.domainobjects.ltl;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-
 /**
  * Provides a "since" operator.
  * 
@@ -13,16 +11,10 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleSince extends CounterExampleBinaryOperator {
-	public CounterExampleSince(final PathType pathType, final int loopEntry,
-			final CounterExampleProposition firstArgument,
-			final CounterExampleProposition secondArgument) {
-		super("S", "Since", pathType, loopEntry, firstArgument, secondArgument);
-	}
-
-	public CounterExampleSince(final PathType pathType,
+	public CounterExampleSince(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		super("S", "Since", counterExample, firstArgument, secondArgument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleState.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleState.java
index 5ab6beab..c36ff7cc 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleState.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleState.java
@@ -1,6 +1,7 @@
 package de.prob.core.domainobjects.ltl;
 
 import de.prob.core.domainobjects.Operation;
+import de.prob.prolog.term.PrologTerm;
 
 /**
  * Provides a state of a counter-example.
@@ -10,25 +11,17 @@ import de.prob.core.domainobjects.Operation;
  */
 public final class CounterExampleState {
 	private final int index;
-	private final int stateId;
+	private final PrologTerm stateId;
 	private final Operation operation;
 
-	// private final boolean inLoop;
-
-	public CounterExampleState(final int index, final int stateId,
+	public CounterExampleState(final int index, final PrologTerm stateId,
 			final Operation operation/* , final boolean inLoop */) {
 		this.index = index;
 		this.stateId = stateId;
 		this.operation = operation;
-		// this.inLoop = inLoop;
 	}
 
-	// public CounterExampleState(final int index, final int stateId,
-	// final boolean inLoop) {
-	// this(index, stateId, null, inLoop);
-	// }
-
-	public int getState() {
+	public PrologTerm getState() {
 		return stateId;
 	}
 
@@ -40,7 +33,10 @@ public final class CounterExampleState {
 		return index;
 	}
 
-	// public boolean isInLoop() {
-	// return inLoop;
-	// }
+	@Override
+	public String toString() {
+		return "CounterExampleState [index=" + index + ", stateId=" + stateId
+				+ ", operation=" + operation + "]";
+	}
+
 }
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTransition.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTransition.java
index db142b30..48a35155 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTransition.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTransition.java
@@ -2,8 +2,6 @@ package de.prob.core.domainobjects.ltl;
 
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-
 /**
  * Provides transitions.
  * 
@@ -12,24 +10,10 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleTransition extends CounterExamplePredicate {
-	public CounterExampleTransition(final String name, final PathType pathType,
-			final int loopEntry, final List<CounterExampleValueType> values) {
-		super(name, pathType, loopEntry, values);
-	}
-
-	public CounterExampleTransition(final String name, final PathType pathType,
-			final List<CounterExampleValueType> values) {
-		this(name, pathType, -1, values);
-	}
-
-	public CounterExampleTransition(final PathType pathType,
-			final int loopEntry, final List<CounterExampleValueType> values) {
-		this("", pathType, loopEntry, values);
-	}
-
-	public CounterExampleTransition(final PathType pathType,
+	public CounterExampleTransition(final String name,
+			final CounterExample counterExample,
 			final List<CounterExampleValueType> values) {
-		this("", pathType, values);
+		super(name, counterExample, values);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTrigger.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTrigger.java
index cb4c2ab7..cb0c0971 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTrigger.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleTrigger.java
@@ -3,9 +3,6 @@ package de.prob.core.domainobjects.ltl;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
-
 /**
  * Provides a "trigger" operator.
  * 
@@ -14,39 +11,28 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleTrigger extends CounterExampleBinaryOperator {
-	private final CounterExampleNegation notSince;
-
-	public CounterExampleTrigger(final PathType pathType, final int loopEntry,
+	public CounterExampleTrigger(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super("T", "Trigger", pathType, loopEntry, firstArgument,
-				secondArgument);
-		CounterExampleNegation notFirst = new CounterExampleNegation(pathType,
-				loopEntry, firstArgument);
-		CounterExampleNegation notSecond = new CounterExampleNegation(pathType,
-				loopEntry, secondArgument);
-		CounterExampleSince since = new CounterExampleSince(pathType,
-				loopEntry, notFirst, notSecond);
-		notSince = new CounterExampleNegation(pathType, loopEntry, since);
+		super("T", "Trigger", counterExample, firstArgument, secondArgument);
+		checkBySince(counterExample, firstArgument, secondArgument);
 	}
 
-	public CounterExampleTrigger(final PathType pathType,
+	private void checkBySince(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		CounterExampleNegation notFirst = new CounterExampleNegation(
+				counterExample, firstArgument);
+		CounterExampleNegation notSecond = new CounterExampleNegation(
+				counterExample, secondArgument);
+		CounterExampleSince since = new CounterExampleSince(counterExample,
+				notFirst, notSecond);
+		addCheck(new CounterExampleNegation(counterExample, since));
 	}
 
 	@Override
 	protected CounterExampleValueType calculate(final int position) {
-		final CounterExampleValueType value = calculateTriggerOperator(position);
-
-		final List<CounterExampleValueType> notSinceValues = notSince
-				.getValues();
-
-		Logger.assertProB("Trigger invalid",
-				value == notSinceValues.get(position));
-
-		return value;
+		return calculateTriggerOperator(position);
 	}
 
 	private CounterExampleValueType calculateTriggerOperator(final int position) {
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUnaryOperator.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUnaryOperator.java
index fc43702d..f4911990 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUnaryOperator.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUnaryOperator.java
@@ -3,8 +3,6 @@ package de.prob.core.domainobjects.ltl;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-
 /**
  * Provides operators with one parameter.
  * 
@@ -17,9 +15,9 @@ public abstract class CounterExampleUnaryOperator extends
 	protected List<List<Integer>> highlightedPositions = new ArrayList<List<Integer>>();
 
 	public CounterExampleUnaryOperator(final String name,
-			final String fullName, final PathType pathType,
-			final int loopEntry, final CounterExampleProposition argument) {
-		super(name, fullName, pathType, loopEntry);
+			final String fullName, final CounterExample counterExample,
+			final CounterExampleProposition argument) {
+		super(name, fullName, counterExample);
 		this.argument = argument;
 	}
 
@@ -70,10 +68,4 @@ public abstract class CounterExampleUnaryOperator extends
 		highlightedPositions.add(fillPositions(position, index, checkedSize,
 				isPast));
 	}
-
-	@Override
-	protected int calculatePosition(int pos) {
-		int size = getArgument().getValues().size();
-		return pos < size ? pos : pos - (size - loopEntry);
-	}
 }
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUntil.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUntil.java
index b18bb8a5..5b017923 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUntil.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleUntil.java
@@ -13,16 +13,10 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleUntil extends CounterExampleBinaryOperator {
-	public CounterExampleUntil(final PathType pathType, final int loopEntry,
+	public CounterExampleUntil(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super("U", "Until", pathType, loopEntry, firstArgument, secondArgument);
-	}
-
-	public CounterExampleUntil(final PathType pathType,
-			final CounterExampleProposition firstArgument,
-			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		super("U", "Until", counterExample, firstArgument, secondArgument);
 	}
 
 	@Override
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleWeakUntil.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleWeakUntil.java
index 0b67b8cd..41fc7023 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleWeakUntil.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleWeakUntil.java
@@ -5,7 +5,6 @@ import java.util.Arrays;
 import java.util.List;
 
 import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.logging.Logger;
 
 /**
  * Provides a "weak until" operator.
@@ -15,63 +14,51 @@ import de.prob.logging.Logger;
  */
 
 public final class CounterExampleWeakUntil extends CounterExampleBinaryOperator {
-	private final CounterExampleRelease release;
-	private final CounterExampleDisjunction or1;
-	private final CounterExampleDisjunction or2;
-
-	public CounterExampleWeakUntil(final PathType pathType,
-			final int loopEntry, final CounterExampleProposition firstArgument,
+	public CounterExampleWeakUntil(final CounterExample counterExample,
+			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		super("W", "Weak Until", pathType, loopEntry, firstArgument,
-				secondArgument);
+		super("W", "Weak Until", counterExample, firstArgument, secondArgument);
 
-		release = new CounterExampleRelease(pathType, loopEntry,
-				secondArgument, new CounterExampleDisjunction(pathType,
-						loopEntry, secondArgument, firstArgument));
+		checkByRelease(counterExample, firstArgument, secondArgument);
+		checkByUntil(counterExample, firstArgument, secondArgument);
+	}
 
-		CounterExampleNegation not = new CounterExampleNegation(pathType,
-				loopEntry, firstArgument);
+	private void checkByUntil(final CounterExample counterExample,
+			final CounterExampleProposition firstArgument,
+			final CounterExampleProposition secondArgument) {
+		CounterExampleNegation not = new CounterExampleNegation(counterExample,
+				firstArgument);
 
 		CounterExampleValueType[] trueValues = new CounterExampleValueType[firstArgument
 				.getValues().size()];
 		Arrays.fill(trueValues, CounterExampleValueType.TRUE);
 
-		CounterExamplePredicate truePredicate = new CounterExamplePredicate(
-				pathType, loopEntry, Arrays.asList(trueValues));
+		CounterExamplePredicate truePredicate = new CounterExamplePredicate("",
+				counterExample, Arrays.asList(trueValues));
 
-		CounterExampleNegation notUntil = new CounterExampleNegation(pathType,
-				loopEntry, new CounterExampleUntil(pathType, loopEntry,
+		CounterExampleNegation notUntil = new CounterExampleNegation(
+				counterExample, new CounterExampleUntil(counterExample,
 						truePredicate, not));
 
-		CounterExampleUntil until = new CounterExampleUntil(pathType,
-				loopEntry, firstArgument, secondArgument);
+		CounterExampleUntil until = new CounterExampleUntil(counterExample,
+				firstArgument, secondArgument);
 
-		or1 = new CounterExampleDisjunction(pathType, loopEntry, notUntil,
-				until);
-		or2 = new CounterExampleDisjunction(pathType, loopEntry, until,
-				new CounterExampleGlobally(pathType, loopEntry, firstArgument));
+		addCheck(new CounterExampleDisjunction(counterExample, notUntil, until));
+		addCheck(new CounterExampleDisjunction(counterExample, until,
+				new CounterExampleGlobally(counterExample, firstArgument)));
 	}
 
-	public CounterExampleWeakUntil(final PathType pathType,
+	private void checkByRelease(final CounterExample counterExample,
 			final CounterExampleProposition firstArgument,
 			final CounterExampleProposition secondArgument) {
-		this(pathType, -1, firstArgument, secondArgument);
+		addCheck(new CounterExampleRelease(counterExample, secondArgument,
+				new CounterExampleDisjunction(counterExample, secondArgument,
+						firstArgument)));
 	}
 
 	@Override
 	protected CounterExampleValueType calculate(final int position) {
-		final CounterExampleValueType value = calculateWeakUntilOperator(position);
-
-		Logger.assertProB("Weak Until invalid", value == release.getValues()
-				.get(position));
-
-		Logger.assertProB("Weak Until invalid",
-				value == or1.getValues().get(position));
-
-		Logger.assertProB("Weak Until invalid",
-				value == or2.getValues().get(position));
-
-		return value;
+		return calculateWeakUntilOperator(position);
 	}
 
 	private CounterExampleValueType calculateWeakUntilOperator(
diff --git a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleYesterday.java b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleYesterday.java
index 663d650e..6e76f197 100644
--- a/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleYesterday.java
+++ b/de.prob.core/src/de/prob/core/domainobjects/ltl/CounterExampleYesterday.java
@@ -3,8 +3,6 @@ package de.prob.core.domainobjects.ltl;
 import java.util.ArrayList;
 import java.util.List;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-
 /**
  * Provides a "yesterday" operator.
  * 
@@ -13,14 +11,9 @@ import de.prob.core.command.LtlCheckingCommand.PathType;
  */
 
 public final class CounterExampleYesterday extends CounterExampleUnaryOperator {
-	public CounterExampleYesterday(final PathType pathType,
-			final int loopEntry, final CounterExampleProposition argument) {
-		super("Y", "Yesterday", pathType, loopEntry, argument);
-	}
-
-	public CounterExampleYesterday(final PathType pathType,
+	public CounterExampleYesterday(final CounterExample counterExample,
 			final CounterExampleProposition argument) {
-		this(pathType, -1, argument);
+		super("Y", "Yesterday", counterExample, argument);
 	}
 
 	@Override
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAllUnitTests.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAllUnitTests.java
index 34517259..4799156d 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAllUnitTests.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAllUnitTests.java
@@ -4,14 +4,17 @@ import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
 @RunWith(Suite.class)
-@Suite.SuiteClasses({ CounterExampleFinallyUnitTest.class,
-		CounterExampleGloballyUnitTest.class, CounterExampleNextUnitTest.class,
-		CounterExampleUntilUnitTest.class,
-		CounterExampleWeakUntilUnitTest.class,
+@Suite.SuiteClasses({
+		CounterExampleFinallyUnitTest.class,
+		CounterExampleGloballyUnitTest.class,
+		CounterExampleNextUnitTest.class,
+		// CounterExampleUntilUnitTest.class,
+		// CounterExampleWeakUntilUnitTest.class,
 		CounterExampleReleaseUnitTest.class, CounterExampleOnceUnitTest.class,
 		CounterExampleHistoryUnitTest.class,
 		CounterExampleYesterdayUnitTest.class,
-		CounterExampleSinceUnitTest.class, CounterExampleTriggerUnitTest.class,
+		// CounterExampleSinceUnitTest.class,
+		// CounterExampleTriggerUnitTest.class,
 		CounterExampleNotUnitTest.class, CounterExampleAndUnitTest.class,
 		CounterExampleOrUnitTest.class, CounterExampleImplyUnitTest.class })
 public final class CounterExampleAllUnitTests {
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAndUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAndUnitTest.java
index e318a0db..c6c14c77 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAndUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleAndUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
 import de.prob.core.domainobjects.ltl.CounterExampleConjunction;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
@@ -26,83 +26,29 @@ public final class CounterExampleAndUnitTest {
 	 */
 	@Test
 	public void testAndOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator andOperator = new CounterExampleConjunction(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = andOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "fttf");
+		final CounterExampleProposition snd = d.addArgument("snd", "ttff");
+		final CounterExampleBinaryOperator and = new CounterExampleConjunction(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("and", and, "ftff");
 
 		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = andOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = andOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
+		d.expectedHighlight(0, "fstH", 0);
+		d.expectedHighlight(0, "sndH");
 
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 0);
+		d.expectedHighlight(1, "fstH", 1);
+		d.expectedHighlight(1, "sndH", 1);
 
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
+		d.expectedHighlight(2, "fstH");
+		d.expectedHighlight(2, "sndH", 2);
 
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+		d.expectedHighlight(3, "fstH", 3); // If both are false, the first is
+											// chosen to be highlighted (could
+											// be different)
+		d.expectedHighlight(3, "sndH");
 
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 0);
+		d.checkHighlights("and", and, "fstH", "sndH");
 	}
 
 	/*
@@ -126,18 +72,20 @@ public final class CounterExampleAndUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		// using a loop with state 0 as entry point
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// Loop entry = 0
 		// create first argument
 		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
+				"", ce0, firstArgumentValues);
 
 		// create second argument
 		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
+				"", ce0, secondArgumentValues);
 
 		// create an operator
 		CounterExampleBinaryOperator andOperator = new CounterExampleConjunction(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
+				ce0, firstArgument, secondArgument);
 
 		// check result values
 		List<CounterExampleValueType> values = andOperator.getValues();
@@ -191,16 +139,17 @@ public final class CounterExampleAndUnitTest {
 
 		// Loop entry = 1
 		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		CounterExample ce1 = TestCounterExample.loop(1, 4);
+		firstArgument = new CounterExamplePredicate("", ce1,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		secondArgument = new CounterExamplePredicate("", ce1,
 				secondArgumentValues);
 
 		// create an operator
-		andOperator = new CounterExampleConjunction(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
+		andOperator = new CounterExampleConjunction(ce1, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = andOperator.getValues();
@@ -252,17 +201,18 @@ public final class CounterExampleAndUnitTest {
 		assertTrue(secondHighlightedPositions.get(3).size() == 0);
 
 		// Loop entry = 2
+		CounterExample ce2 = TestCounterExample.loop(2, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		firstArgument = new CounterExamplePredicate("", ce2,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		secondArgument = new CounterExamplePredicate("", ce2,
 				secondArgumentValues);
 
 		// create an operator
-		andOperator = new CounterExampleConjunction(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
+		andOperator = new CounterExampleConjunction(ce2, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = andOperator.getValues();
@@ -314,17 +264,18 @@ public final class CounterExampleAndUnitTest {
 		assertTrue(secondHighlightedPositions.get(3).size() == 0);
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(4, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		firstArgument = new CounterExamplePredicate("", ce3,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		secondArgument = new CounterExamplePredicate("", ce3,
 				secondArgumentValues);
 
 		// create an operator
-		andOperator = new CounterExampleConjunction(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
+		andOperator = new CounterExampleConjunction(ce3, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = andOperator.getValues();
@@ -397,17 +348,19 @@ public final class CounterExampleAndUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator andOperator = new CounterExampleConjunction(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = andOperator.getValues();
@@ -481,17 +434,18 @@ public final class CounterExampleAndUnitTest {
 						CounterExampleValueType.UNKNOWN,
 						CounterExampleValueType.UNKNOWN });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator andOperator = new CounterExampleConjunction(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = andOperator.getValues();
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleFinallyUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleFinallyUnitTest.java
index c3ba9f58..6306b099 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleFinallyUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleFinallyUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleFinally;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
@@ -31,13 +31,14 @@ public final class CounterExampleFinallyUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator finallyOperator = new CounterExampleFinally(
-				PathType.FINITE, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = finallyOperator
@@ -84,13 +85,14 @@ public final class CounterExampleFinallyUnitTest {
 						CounterExampleValueType.FALSE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create an argument
 		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
+				ce0, argumentValues);
 
 		// create an operator
 		CounterExampleUnaryOperator finallyOperator = new CounterExampleFinally(
-				PathType.INFINITE, 0, argument);
+				ce0, argument);
 
 		// check result values
 		List<CounterExampleValueType> values = finallyOperator.getValues();
@@ -125,13 +127,12 @@ public final class CounterExampleFinallyUnitTest {
 				new Integer[] { 1 }));
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(1, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce1, argumentValues);
 
 		// create an operator
-		finallyOperator = new CounterExampleFinally(PathType.INFINITE, 1,
-				argument);
+		finallyOperator = new CounterExampleFinally(ce1, argument);
 
 		// check result values
 		values = finallyOperator.getValues();
@@ -165,13 +166,12 @@ public final class CounterExampleFinallyUnitTest {
 				new Integer[] { 1 }));
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(2, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce2, argumentValues);
 
 		// create an operator
-		finallyOperator = new CounterExampleFinally(PathType.INFINITE, 2,
-				argument);
+		finallyOperator = new CounterExampleFinally(ce2, argument);
 
 		// check result values
 		values = finallyOperator.getValues();
@@ -205,13 +205,12 @@ public final class CounterExampleFinallyUnitTest {
 				new Integer[] { 3, 2 }));
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce3, argumentValues);
 
 		// create an operator
-		finallyOperator = new CounterExampleFinally(PathType.INFINITE, 3,
-				argument);
+		finallyOperator = new CounterExampleFinally(ce3, argument);
 
 		// check result values
 		values = finallyOperator.getValues();
@@ -255,13 +254,14 @@ public final class CounterExampleFinallyUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator finallyOperator = new CounterExampleFinally(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = finallyOperator
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleGloballyUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleGloballyUnitTest.java
index 2cf945c7..5688ff42 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleGloballyUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleGloballyUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleGlobally;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
@@ -31,13 +31,14 @@ public final class CounterExampleGloballyUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.TRUE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator globallyOperator = new CounterExampleGlobally(
-				PathType.FINITE, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = globallyOperator
@@ -84,13 +85,14 @@ public final class CounterExampleGloballyUnitTest {
 						CounterExampleValueType.TRUE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create an argument
 		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
+				ce0, argumentValues);
 
 		// create an operator
 		CounterExampleUnaryOperator globallyOperator = new CounterExampleGlobally(
-				PathType.INFINITE, 0, argument);
+				ce0, argument);
 
 		// check result values
 		List<CounterExampleValueType> values = globallyOperator.getValues();
@@ -125,13 +127,12 @@ public final class CounterExampleGloballyUnitTest {
 				new Integer[] { 1 }));
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(1, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce1, argumentValues);
 
 		// create an operator
-		globallyOperator = new CounterExampleGlobally(PathType.INFINITE, 1,
-				argument);
+		globallyOperator = new CounterExampleGlobally(ce1, argument);
 
 		// check result values
 		values = globallyOperator.getValues();
@@ -165,13 +166,12 @@ public final class CounterExampleGloballyUnitTest {
 				new Integer[] { 1 }));
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(2, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce2, argumentValues);
 
 		// create an operator
-		globallyOperator = new CounterExampleGlobally(PathType.INFINITE, 2,
-				argument);
+		globallyOperator = new CounterExampleGlobally(ce2, argument);
 
 		// check result values
 		values = globallyOperator.getValues();
@@ -205,13 +205,12 @@ public final class CounterExampleGloballyUnitTest {
 				new Integer[] { 3, 2 }));
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce3, argumentValues);
 
 		// create an operator
-		globallyOperator = new CounterExampleGlobally(PathType.INFINITE, 3,
-				argument);
+		globallyOperator = new CounterExampleGlobally(ce3, argument);
 
 		// check result values
 		values = globallyOperator.getValues();
@@ -255,13 +254,15 @@ public final class CounterExampleGloballyUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.TRUE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator globallyOperator = new CounterExampleGlobally(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = globallyOperator
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleHistoryUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleHistoryUnitTest.java
index b6227550..132509c5 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleHistoryUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleHistoryUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleHistory;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
@@ -34,13 +34,14 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.TRUE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.FINITE, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
@@ -89,13 +90,15 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
+
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.FINITE, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
@@ -145,13 +148,14 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.TRUE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create an argument
 		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
+				ce0, argumentValues);
 
 		// create an operator
 		CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.INFINITE, 0, argument);
+				ce0, argument);
 
 		// check result values
 		List<CounterExampleValueType> values = historyOperator.getValues();
@@ -186,13 +190,12 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3, 2, 1, 0 }));
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(1, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce1, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 1,
-				argument);
+		historyOperator = new CounterExampleHistory(ce1, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -226,13 +229,13 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3, 2, 1, 0 }));
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(2, 4);
+
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce2, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 2,
-				argument);
+		historyOperator = new CounterExampleHistory(ce2, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -266,13 +269,13 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3, 2, 1, 0 }));
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
+
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce3, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 3,
-				argument);
+		historyOperator = new CounterExampleHistory(ce3, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -320,13 +323,14 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.FALSE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create an argument
 		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
+				ce0, argumentValues);
 
 		// create an operator
 		CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.INFINITE, 0, argument);
+				ce0, argument);
 
 		// check result values
 		List<CounterExampleValueType> values = historyOperator.getValues();
@@ -361,13 +365,12 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(0, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce1, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 1,
-				argument);
+		historyOperator = new CounterExampleHistory(ce1, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -401,13 +404,12 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(0, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce2, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 2,
-				argument);
+		historyOperator = new CounterExampleHistory(ce2, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -441,13 +443,12 @@ public final class CounterExampleHistoryUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
 		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
+		argument = new CounterExamplePredicate("", ce3, argumentValues);
 
 		// create an operator
-		historyOperator = new CounterExampleHistory(PathType.INFINITE, 3,
-				argument);
+		historyOperator = new CounterExampleHistory(ce3, argument);
 
 		// check result values
 		values = historyOperator.getValues();
@@ -494,13 +495,14 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.TRUE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
@@ -549,13 +551,15 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
@@ -604,13 +608,15 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.UNKNOWN,
 						CounterExampleValueType.TRUE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
@@ -659,13 +665,14 @@ public final class CounterExampleHistoryUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create an argument
 		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
+				"", ce, argumentValues);
 
 		// create an operator
 		final CounterExampleUnaryOperator historyOperator = new CounterExampleHistory(
-				PathType.REDUCED, -1, argument);
+				ce, argument);
 
 		// check result values
 		final List<CounterExampleValueType> values = historyOperator
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleImplyUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleImplyUnitTest.java
index 7985d953..7c557d58 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleImplyUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleImplyUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
 import de.prob.core.domainobjects.ltl.CounterExampleImplication;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
@@ -42,17 +42,18 @@ public final class CounterExampleImplyUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator implyOperator = new CounterExampleImplication(
-				PathType.FINITE, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = implyOperator.getValues();
@@ -127,17 +128,18 @@ public final class CounterExampleImplyUnitTest {
 						CounterExampleValueType.FALSE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create first argument
 		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
+				"", ce0, firstArgumentValues);
 
 		// create second argument
 		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
+				"", ce0, secondArgumentValues);
 
 		// create an operator
 		CounterExampleBinaryOperator implyOperator = new CounterExampleImplication(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
+				ce0, firstArgument, secondArgument);
 
 		// check result values
 		List<CounterExampleValueType> values = implyOperator.getValues();
@@ -190,17 +192,18 @@ public final class CounterExampleImplyUnitTest {
 		assertTrue(secondHighlightedPositions.get(3).size() == 0);
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(1, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		firstArgument = new CounterExamplePredicate("", ce1,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		secondArgument = new CounterExamplePredicate("", ce1,
 				secondArgumentValues);
 
 		// create an operator
-		implyOperator = new CounterExampleImplication(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
+		implyOperator = new CounterExampleImplication(ce1, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = implyOperator.getValues();
@@ -253,17 +256,18 @@ public final class CounterExampleImplyUnitTest {
 		assertTrue(secondHighlightedPositions.get(3).size() == 0);
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(2, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		firstArgument = new CounterExamplePredicate("", ce2,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		secondArgument = new CounterExamplePredicate("", ce2,
 				secondArgumentValues);
 
 		// create an operator
-		implyOperator = new CounterExampleImplication(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
+		implyOperator = new CounterExampleImplication(ce2, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = implyOperator.getValues();
@@ -316,17 +320,18 @@ public final class CounterExampleImplyUnitTest {
 		assertTrue(secondHighlightedPositions.get(3).size() == 0);
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		firstArgument = new CounterExamplePredicate("", ce3,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		secondArgument = new CounterExamplePredicate("", ce3,
 				secondArgumentValues);
 
 		// create an operator
-		implyOperator = new CounterExampleImplication(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
+		implyOperator = new CounterExampleImplication(ce3, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = implyOperator.getValues();
@@ -400,17 +405,18 @@ public final class CounterExampleImplyUnitTest {
 						CounterExampleValueType.TRUE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator implyOperator = new CounterExampleImplication(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = implyOperator.getValues();
@@ -484,17 +490,19 @@ public final class CounterExampleImplyUnitTest {
 						CounterExampleValueType.UNKNOWN,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator implyOperator = new CounterExampleImplication(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = implyOperator.getValues();
@@ -574,17 +582,19 @@ public final class CounterExampleImplyUnitTest {
 						CounterExampleValueType.UNKNOWN,
 						CounterExampleValueType.UNKNOWN });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator implyOperator = new CounterExampleImplication(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = implyOperator.getValues();
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNextUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNextUnitTest.java
index a1fdaf22..95bb6210 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNextUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNextUnitTest.java
@@ -1,288 +1,63 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 import de.prob.core.domainobjects.ltl.CounterExampleNext;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
 import de.prob.core.domainobjects.ltl.CounterExampleUnaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for a "next" operator.
  * 
  * @author Andriy Tolstoy
- * 
  */
 public final class CounterExampleNextUnitTest {
 	@Test
 	public void testNextOnFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator nextOperator = new CounterExampleNext(
-				PathType.FINITE, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = nextOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 0);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition arg = d.addArgument("arg", "ftft");
+		final CounterExampleUnaryOperator next = new CounterExampleNext(
+				d.getCounterExample(), arg);
+
+		d.checkValues("next", next, "tftf");
+
+		d.expectedHighlight(0, "nextH", 1);
+		d.expectedHighlight(1, "nextH", 2);
+		d.expectedHighlight(2, "nextH", 3);
+		d.expectedHighlight(3, "nextH");
+		d.checkHighlights("next", next, "nextH");
 	}
 
 	@Test
 	public void testNextOnInfinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create an argument
-		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
-
-		// create an operator
-		CounterExampleUnaryOperator nextOperator = new CounterExampleNext(
-				PathType.INFINITE, 0, argument);
-
-		// check result values
-		List<CounterExampleValueType> values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> highlightedPositions = nextOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 1
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
-
-		// create an operator
-		nextOperator = new CounterExampleNext(PathType.INFINITE, 1, argument);
-
-		// check result values
-		values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		highlightedPositions = nextOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// Loop entry = 2
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
-
-		// create an operator
-		nextOperator = new CounterExampleNext(PathType.INFINITE, 2, argument);
-
-		// check result values
-		values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = nextOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// Loop entry = 3
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
-
-		// create an operator
-		nextOperator = new CounterExampleNext(PathType.INFINITE, 3, argument);
-
-		// check result values
-		values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		highlightedPositions = nextOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		final String[] values = new String[] { "tftf", "tftt", "tftf", "tftt" };
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			final CounterExampleProposition arg = d.addArgument("arg", "ftft");
+			final CounterExampleUnaryOperator next = new CounterExampleNext(
+					d.getCounterExample(), arg);
+
+			d.checkValues("next", next, values[entry]);
+			d.expectedHighlight(0, "nextH", 1);
+			d.expectedHighlight(1, "nextH", 2);
+			d.expectedHighlight(2, "nextH", 3);
+			d.expectedHighlight(3, "nextH", entry);
+			d.checkHighlights("next", next, "nextH");
+		}
 	}
 
 	@Test
 	public void testNextOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator nextOperator = new CounterExampleNext(
-				PathType.REDUCED, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = nextOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = nextOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 0);
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		final CounterExampleProposition arg = d.addArgument("arg", "tuft");
+		final CounterExampleUnaryOperator next = new CounterExampleNext(
+				d.getCounterExample(), arg);
+		d.checkValues("next", next, "uftu");
+
+		d.expectedHighlight(0, "nextH", 1);
+		d.expectedHighlight(1, "nextH", 2);
+		d.expectedHighlight(2, "nextH", 3);
+		d.expectedHighlight(3, "nextH");
+		d.checkHighlights("next", next, "nextH");
 	}
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNotUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNotUnitTest.java
index b7d9d7e0..8eeb19f6 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNotUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleNotUnitTest.java
@@ -1,18 +1,10 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 import de.prob.core.domainobjects.ltl.CounterExampleNegation;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
 import de.prob.core.domainobjects.ltl.CounterExampleUnaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for a "not" operator.
@@ -27,57 +19,8 @@ public final class CounterExampleNotUnitTest {
 	 */
 	@Test
 	public void testNotOnFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator notOperator = new CounterExampleNegation(
-				PathType.FINITE, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		// State 0
-		final List<List<Integer>> highlightedPositions = notOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		checkNot(d);
 	}
 
 	/*
@@ -85,191 +28,10 @@ public final class CounterExampleNotUnitTest {
 	 */
 	@Test
 	public void testNotOnInFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create argument
-		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
-
-		// create an operator
-		CounterExampleUnaryOperator notOperator = new CounterExampleNegation(
-				PathType.INFINITE, 0, argument);
-
-		// check result values
-		List<CounterExampleValueType> values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> highlightedPositions = notOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		// State 0
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 1
-		// create argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
-
-		// create an operator
-		notOperator = new CounterExampleNegation(PathType.INFINITE, 1, argument);
-
-		// check result values
-		values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = notOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		// State 0
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
-
-		// create an operator
-		notOperator = new CounterExampleNegation(PathType.INFINITE, 2, argument);
-
-		// check result values
-		values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = notOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		// State 0
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 3
-		// create argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
-
-		// create an operator
-		notOperator = new CounterExampleNegation(PathType.INFINITE, 3, argument);
-
-		// check result values
-		values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = notOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		// State 0
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			checkNot(d);
+		}
 	}
 
 	/*
@@ -277,57 +39,8 @@ public final class CounterExampleNotUnitTest {
 	 */
 	@Test
 	public void testNotOnReducedPath1() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator notOperator = new CounterExampleNegation(
-				PathType.REDUCED, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		// State 0
-		final List<List<Integer>> highlightedPositions = notOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		checkNot(d);
 	}
 
 	/*
@@ -335,56 +48,27 @@ public final class CounterExampleNotUnitTest {
 	 */
 	@Test
 	public void testNotOnReducedPath2() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator notOperator = new CounterExampleNegation(
-				PathType.REDUCED, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = notOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		// State 0
-		final List<List<Integer>> highlightedPositions = notOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		final CounterExampleProposition arg = d.addArgument("not", "tufu");
+		final CounterExampleUnaryOperator not = new CounterExampleNegation(
+				d.getCounterExample(), arg);
+		d.checkValues("not", not, "futu");
+		d.expectedHighlight(0, "notH", 0);
+		d.expectedHighlight(1, "notH", 1);
+		d.expectedHighlight(2, "notH", 2);
+		d.expectedHighlight(3, "notH", 3);
+		d.checkHighlights("not", not, "notH");
+	}
 
-		// State 3
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+	private void checkNot(final LtlTestDescription d) {
+		final CounterExampleProposition arg = d.addArgument("not", "tfft");
+		final CounterExampleUnaryOperator not = new CounterExampleNegation(
+				d.getCounterExample(), arg);
+		d.checkValues("not", not, "fttf");
+		d.expectedHighlight(0, "notH", 0);
+		d.expectedHighlight(1, "notH", 1);
+		d.expectedHighlight(2, "notH", 2);
+		d.expectedHighlight(3, "notH", 3);
+		d.checkHighlights("not", not, "notH");
 	}
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOnceUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOnceUnitTest.java
index 705ef839..33229e73 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOnceUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOnceUnitTest.java
@@ -1,18 +1,10 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 import de.prob.core.domainobjects.ltl.CounterExampleOnce;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
 import de.prob.core.domainobjects.ltl.CounterExampleUnaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for an "once" operator.
@@ -26,53 +18,8 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceTrueDefinitionOnFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.FINITE, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		checkOnce(d);
 	}
 
 	/*
@@ -80,225 +27,19 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceFalseDefinitionOnFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.FINITE, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		checkOnceCompleteFalse(d);
 	}
 
 	/*
-	 * f-TFTF, O f-FTTT
+	 * f-FTFT, O f-FTTT
 	 */
 	@Test
 	public void testOnceTrueDefinitionOnInfinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create an argument
-		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
-
-		// create an operator
-		CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.INFINITE, 0, argument);
-
-		// check result values
-		List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 1
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 1, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 2, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 3
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 3, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			checkOnce(d);
+		}
 	}
 
 	/*
@@ -306,171 +47,10 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceFalseDefinitionOnInfinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create an argument
-		CounterExampleProposition argument = new CounterExamplePredicate("",
-				PathType.INFINITE, 0, argumentValues);
-
-		// create an operator
-		CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.INFINITE, 0, argument);
-
-		// check result values
-		List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 1
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 1, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 2
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 2, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 3
-		// create an argument
-		argument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				argumentValues);
-
-		// create an operator
-		onceOperator = new CounterExampleOnce(PathType.INFINITE, 3, argument);
-
-		// check result values
-		values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = onceOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			checkOnceCompleteFalse(d);
+		}
 	}
 
 	/*
@@ -478,53 +58,8 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceTrueDefinitionOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.REDUCED, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		checkOnce(d);
 	}
 
 	/*
@@ -532,53 +67,8 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceFalseDefinitionOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.REDUCED, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		checkOnceCompleteFalse(d);
 	}
 
 	/*
@@ -586,53 +76,16 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceUnknownDefinitionOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.REDUCED, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		final CounterExampleProposition arg = d.addArgument("arg", "ufuf");
+		final CounterExampleUnaryOperator once = new CounterExampleOnce(
+				d.getCounterExample(), arg);
+		d.checkValues("once", once, "uuuu");
+		d.expectedHighlight(0, "onceH", 0);
+		d.expectedHighlight(1, "onceH", 0, 1);
+		d.expectedHighlight(2, "onceH", 0, 1, 2);
+		d.expectedHighlight(3, "onceH", 0, 1, 2, 3);
+		d.checkHighlights("once", once, "onceH");
 	}
 
 	/*
@@ -640,52 +93,39 @@ public final class CounterExampleOnceUnitTest {
 	 */
 	@Test
 	public void testOnceOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator onceOperator = new CounterExampleOnce(
-				PathType.REDUCED, -1, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = onceOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = onceOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-		assertTrue(highlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		final CounterExampleProposition arg = d.addArgument("arg", "futu");
+		final CounterExampleUnaryOperator once = new CounterExampleOnce(
+				d.getCounterExample(), arg);
+		d.checkValues("once", once, "futt");
+		d.expectedHighlight(0, "onceH", 0);
+		d.expectedHighlight(1, "onceH", 0, 1);
+		d.expectedHighlight(2, "onceH", 2);
+		d.expectedHighlight(3, "onceH", 2);
+		d.checkHighlights("once", once, "onceH");
+	}
 
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+	private void checkOnce(final LtlTestDescription d) {
+		final CounterExampleProposition arg = d.addArgument("arg", "ftft");
+		final CounterExampleUnaryOperator once = new CounterExampleOnce(
+				d.getCounterExample(), arg);
+		d.checkValues("once", once, "fttt");
+		d.expectedHighlight(0, "onceH", 0);
+		d.expectedHighlight(1, "onceH", 1);
+		d.expectedHighlight(2, "onceH", 1);
+		d.expectedHighlight(3, "onceH", 3);
+		d.checkHighlights("once", once, "onceH");
+	}
 
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+	private void checkOnceCompleteFalse(final LtlTestDescription d) {
+		final CounterExampleProposition arg = d.addArgument("arg", "ffff");
+		final CounterExampleUnaryOperator once = new CounterExampleOnce(
+				d.getCounterExample(), arg);
+		d.checkValues("once", once, "ffff");
+		d.expectedHighlight(0, "onceH", 0);
+		d.expectedHighlight(1, "onceH", 0, 1);
+		d.expectedHighlight(2, "onceH", 0, 1, 2);
+		d.expectedHighlight(3, "onceH", 0, 1, 2, 3);
+		d.checkHighlights("once", once, "onceH");
 	}
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOrUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOrUnitTest.java
index 22f08278..ba5f5ad1 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOrUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleOrUnitTest.java
@@ -7,7 +7,7 @@ import java.util.List;
 
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
+import de.prob.core.domainobjects.ltl.CounterExample;
 import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
 import de.prob.core.domainobjects.ltl.CounterExampleDisjunction;
 import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
@@ -42,17 +42,19 @@ public final class CounterExampleOrUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.finite(4);
+
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator orOperator = new CounterExampleDisjunction(
-				PathType.FINITE, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = orOperator.getValues();
@@ -127,17 +129,18 @@ public final class CounterExampleOrUnitTest {
 						CounterExampleValueType.FALSE });
 
 		// Loop entry = 0
+		final CounterExample ce0 = TestCounterExample.loop(0, 4);
 		// create first argument
 		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
+				"", ce0, firstArgumentValues);
 
 		// create second argument
 		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
+				"", ce0, secondArgumentValues);
 
 		// create an operator
 		CounterExampleBinaryOperator orOperator = new CounterExampleDisjunction(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
+				ce0, firstArgument, secondArgument);
 
 		// check result values
 		List<CounterExampleValueType> values = orOperator.getValues();
@@ -190,17 +193,19 @@ public final class CounterExampleOrUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 1
+		final CounterExample ce1 = TestCounterExample.loop(1, 4);
+
 		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		firstArgument = new CounterExamplePredicate("", ce1,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+		secondArgument = new CounterExamplePredicate("", ce1,
 				secondArgumentValues);
 
 		// create an operator
-		orOperator = new CounterExampleDisjunction(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
+		orOperator = new CounterExampleDisjunction(ce1, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = orOperator.getValues();
@@ -251,17 +256,18 @@ public final class CounterExampleOrUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 2
+		final CounterExample ce2 = TestCounterExample.loop(2, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		firstArgument = new CounterExamplePredicate("", ce2,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+		secondArgument = new CounterExamplePredicate("", ce2,
 				secondArgumentValues);
 
 		// create an operator
-		orOperator = new CounterExampleDisjunction(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
+		orOperator = new CounterExampleDisjunction(ce2, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = orOperator.getValues();
@@ -312,17 +318,18 @@ public final class CounterExampleOrUnitTest {
 				new Integer[] { 3 }));
 
 		// Loop entry = 3
+		final CounterExample ce3 = TestCounterExample.loop(3, 4);
 		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		firstArgument = new CounterExamplePredicate("", ce3,
 				firstArgumentValues);
 
 		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+		secondArgument = new CounterExamplePredicate("", ce3,
 				secondArgumentValues);
 
 		// create an operator
-		orOperator = new CounterExampleDisjunction(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
+		orOperator = new CounterExampleDisjunction(ce3, firstArgument,
+				secondArgument);
 
 		// check result values
 		values = orOperator.getValues();
@@ -394,17 +401,19 @@ public final class CounterExampleOrUnitTest {
 						CounterExampleValueType.FALSE,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
+
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator orOperator = new CounterExampleDisjunction(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = orOperator.getValues();
@@ -478,17 +487,18 @@ public final class CounterExampleOrUnitTest {
 						CounterExampleValueType.UNKNOWN,
 						CounterExampleValueType.FALSE });
 
+		final CounterExample ce = TestCounterExample.reduced(4);
 		// create first argument
 		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
+				"", ce, firstArgumentValues);
 
 		// create second argument
 		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
+				"", ce, secondArgumentValues);
 
 		// create an operator
 		final CounterExampleBinaryOperator orOperator = new CounterExampleDisjunction(
-				PathType.REDUCED, firstArgument, secondArgument);
+				ce, firstArgument, secondArgument);
 
 		// check result values
 		final List<CounterExampleValueType> values = orOperator.getValues();
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleReleaseUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleReleaseUnitTest.java
index bbc58768..c9160c73 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleReleaseUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleReleaseUnitTest.java
@@ -1,18 +1,10 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
 import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
 import de.prob.core.domainobjects.ltl.CounterExampleRelease;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for a "release" operator.
@@ -26,93 +18,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseTrueDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "ffft");
+		final CounterExampleProposition snd = d.addArgument("snd", "tttt");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "tttt");
 
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
+		d.expectedHighlight(0, "fstH", 3);
+		d.expectedHighlight(0, "sndH", 0, 1, 2, 3);
 
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, firstArgument, secondArgument);
+		d.expectedHighlight(1, "fstH", 3);
+		d.expectedHighlight(1, "sndH", 1, 2, 3);
 
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+		d.expectedHighlight(2, "fstH", 3);
+		d.expectedHighlight(2, "sndH", 2, 3);
 
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
+		d.expectedHighlight(3, "fstH", 3);
+		d.expectedHighlight(3, "sndH", 3);
 
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -120,81 +45,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseTrueDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "ffff");
+		final CounterExampleProposition snd = d.addArgument("snd", "tttt");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "tttt");
 
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
+		d.expectedHighlight(0, "fstH");
+		d.expectedHighlight(0, "sndH", 0, 1, 2, 3);
 
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
+		d.expectedHighlight(1, "fstH");
+		d.expectedHighlight(1, "sndH", 1, 2, 3);
 
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, firstArgument, secondArgument);
+		d.expectedHighlight(2, "fstH");
+		d.expectedHighlight(2, "sndH", 2, 3);
 
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+		d.expectedHighlight(3, "fstH");
+		d.expectedHighlight(3, "sndH", 3);
 
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -202,90 +72,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseFalseDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "ffft");
+		final CounterExampleProposition snd = d.addArgument("snd", "tttf");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "ffff");
 
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, firstArgument, secondArgument);
+		d.expectedHighlight(0, "fstH", 0, 1, 2);
+		d.expectedHighlight(0, "sndH", 3);
 
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+		d.expectedHighlight(1, "fstH", 1, 2);
+		d.expectedHighlight(1, "sndH", 3);
 
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
+		d.expectedHighlight(2, "fstH", 2);
+		d.expectedHighlight(2, "sndH", 3);
 
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.expectedHighlight(3, "fstH");
+		d.expectedHighlight(3, "sndH", 3);
 
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -293,90 +99,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseFalseDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "ffff");
+		final CounterExampleProposition snd = d.addArgument("snd", "tttf");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "ffff");
 
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
+		d.expectedHighlight(0, "fstH", 0, 1, 2);
+		d.expectedHighlight(0, "sndH", 3);
 
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.expectedHighlight(1, "fstH", 1, 2);
+		d.expectedHighlight(1, "sndH", 3);
 
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.expectedHighlight(2, "fstH", 2);
+		d.expectedHighlight(2, "sndH", 3);
 
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.expectedHighlight(3, "fstH");
+		d.expectedHighlight(3, "sndH", 3);
 
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -384,84 +126,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "tftf");
+		final CounterExampleProposition snd = d.addArgument("snd", "tfft");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "tfft");
 
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
+		d.expectedHighlight(0, "fstH", 0);
+		d.expectedHighlight(0, "sndH", 0);
 
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, firstArgumentValues);
+		d.expectedHighlight(1, "fstH");
+		d.expectedHighlight(1, "sndH", 1);
 
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, secondArgumentValues);
+		d.expectedHighlight(2, "fstH");
+		d.expectedHighlight(2, "sndH", 2);
 
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, -1, firstArgument, secondArgument);
+		d.expectedHighlight(3, "fstH");
+		d.expectedHighlight(3, "sndH", 3);
 
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -469,87 +153,26 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, firstArgumentValues);
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		final CounterExampleProposition fst = d.addArgument("fst", "fttf");
+		final CounterExampleProposition snd = d.addArgument("snd", "tftt");
+		final CounterExampleBinaryOperator release = new CounterExampleRelease(
+				d.getCounterExample(), fst, snd);
+		d.checkValues("release", release, "fftt");
 
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, secondArgumentValues);
+		d.expectedHighlight(0, "fstH", 0);
+		d.expectedHighlight(0, "sndH", 1);
 
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.FINITE, -1, firstArgument, secondArgument);
+		d.expectedHighlight(1, "fstH");
+		d.expectedHighlight(1, "sndH", 1);
 
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+		d.expectedHighlight(2, "fstH", 2);
+		d.expectedHighlight(2, "sndH", 2);
 
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
+		d.expectedHighlight(3, "fstH");
+		d.expectedHighlight(3, "sndH", 3);
 
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		d.checkHighlights("release", release, "fstH", "sndH");
 	}
 
 	/*
@@ -557,309 +180,28 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseTrueDefinitionOnInfinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			final CounterExampleProposition fst = d.addArgument("fst", "ffft");
+			final CounterExampleProposition snd = d.addArgument("snd", "tttt");
+			final CounterExampleBinaryOperator release = new CounterExampleRelease(
+					d.getCounterExample(), fst, snd);
+			d.checkValues("release", release, "tttt");
 
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
+			d.expectedHighlight(0, "fstH", 3);
+			d.expectedHighlight(0, "sndH", 0, 1, 2, 3);
 
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+			d.expectedHighlight(1, "fstH", 3);
+			d.expectedHighlight(1, "sndH", 1, 2, 3);
 
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
+			d.expectedHighlight(2, "fstH", 3);
+			d.expectedHighlight(2, "sndH", 2, 3);
 
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
+			d.expectedHighlight(3, "fstH", 3);
+			d.expectedHighlight(3, "sndH", 3);
 
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+			d.checkHighlights("release", release, "fstH", "sndH");
+		}
 	}
 
 	/*
@@ -867,2622 +209,2448 @@ public final class CounterExampleReleaseUnitTest {
 	 */
 	@Test
 	public void testReleaseTrueDefinitionOnInfinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3, 0, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 0, 1, 2 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 1, 2 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFT, g-TTTF, f R g-FFFF
-	 */
-	@Test
-	public void testReleaseFalseDefinitionOnInfinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			final CounterExampleProposition fst = d.addArgument("fst", "ffff");
+			final CounterExampleProposition snd = d.addArgument("snd", "tttt");
+			final CounterExampleBinaryOperator release = new CounterExampleRelease(
+					d.getCounterExample(), fst, snd);
+			d.checkValues("release", release, "tttt");
 
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+			d.expectedHighlight(0, "fstH");
+			d.expectedHighlight(0, "sndH", 0, 1, 2, 3);
 
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
+			d.expectedHighlight(1, "fstH");
+			d.expectedHighlight(1, "sndH", future(1, 4, entry));
 
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
+			d.expectedHighlight(2, "fstH");
+			d.expectedHighlight(2, "sndH", future(2, 4, entry));
 
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
+			d.expectedHighlight(3, "fstH");
+			d.expectedHighlight(3, "sndH", future(3, 4, entry));
 
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTF, f R g-FFFF
-	 */
-	@Test
-	public void testReleaseFalseDefinitionOnInfinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+			d.checkHighlights("release", release, "fstH", "sndH");
+		}
 	}
 
-	/*
-	 * f-TFTF, g-TFFT, f R g-TFFT
-	 */
-	@Test
-	public void testReleaseOnInfinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = releaseOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
+	// /*
+	// * f-FFFT, g-TTTF, f R g-FFFF
+	// */
+	// @Test
+	// public void testReleaseFalseDefinitionOnInfinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTF, f R g-FFFF
+	// */
+	// @Test
+	// public void testReleaseFalseDefinitionOnInfinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TFTF, g-TFFT, f R g-TFFT
+	// */
+	// @Test
+	// public void testReleaseOnInfinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// releaseOperator = new CounterExampleRelease(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = releaseOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUUT, g-TTTT, f R g-TTTT
+	// */
+	// @Test
+	// public void testReleaseTrueDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f R g-UUUU
+	// */
+	// @Test
+	// public void testReleaseTrueDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFT, g-TTTF, f R g-FFFF
+	// */
+	// @Test
+	// public void testReleaseFalseDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-FTTT, f R g-FUUU
+	// */
+	// @Test
+	// public void testReleaseFalseDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUTU, g-UTUU, f R g-UTTU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUUU, g-UTFU, f R g-UUFU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUUU, g-UTUU, f R g-UUUU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f R g-UUUU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath4() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-UUUU, f R g-UUUU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath5() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUUU, g-UUUU, f R g-UUUU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath6() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUTF, g-FTTT, f R g-FTTU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath7() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUTU, g-TUTU, f R g-UUTU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath8() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FFTU, g-TUTU, f R g-UUTU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath9() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUUU, g-UTFU, f R g-UUFU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath10() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FUUU, g-UUFU, f R g-UUFU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath11() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FTUF, g-FTUU, f R g-FTUU
+	// */
+	// @Test
+	// public void testReleaseUnknownDefinitionOnReducedPath12() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator releaseOperator = new
+	// CounterExampleRelease(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = releaseOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = releaseOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = releaseOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+
+	private static int[] future(int current, int size, int entry) {
+		final int first = current <= entry ? current : entry;
+		final int resSize = size - first;
+		int[] res = new int[resSize];
+		for (int i = 0; i < resSize; i++) {
+			res[i] = first + i;
+		}
+		return res;
 	}
 
-	/*
-	 * f-UUUT, g-TTTT, f R g-TTTT
-	 */
-	@Test
-	public void testReleaseTrueDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f R g-UUUU
-	 */
-	@Test
-	public void testReleaseTrueDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFT, g-TTTF, f R g-FFFF
-	 */
-	@Test
-	public void testReleaseFalseDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFF, g-FTTT, f R g-FUUU
-	 */
-	@Test
-	public void testReleaseFalseDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUTU, g-UTUU, f R g-UTTU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUUU, g-UTFU, f R g-UUFU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUUU, g-UTUU, f R g-UUUU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f R g-UUUU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath4() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFFF, g-UUUU, f R g-UUUU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath5() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUUU, g-UUUU, f R g-UUUU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath6() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUTF, g-FTTT, f R g-FTTU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath7() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUTU, g-TUTU, f R g-UUTU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath8() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FFTU, g-TUTU, f R g-UUTU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath9() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUUU, g-UTFU, f R g-UUFU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath10() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FUUU, g-UUFU, f R g-UUFU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath11() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FTUF, g-FTUU, f R g-FTUU
-	 */
-	@Test
-	public void testReleaseUnknownDefinitionOnReducedPath12() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator releaseOperator = new CounterExampleRelease(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = releaseOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = releaseOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = releaseOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleSinceUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleSinceUnitTest.java
index d41d7a29..967f9264 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleSinceUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleSinceUnitTest.java
@@ -1,18 +1,5 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
-import de.prob.core.domainobjects.ltl.CounterExampleProposition;
-import de.prob.core.domainobjects.ltl.CounterExampleSince;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for a "since" operator.
@@ -21,3224 +8,3293 @@ import de.prob.core.domainobjects.ltl.CounterExampleValueType;
  * 
  */
 public final class CounterExampleSinceUnitTest {
-	/*
-	 * f-FTTT, g-TFFF, f S g-TTTT
-	 */
-	@Test
-	public void testSinceTrueDefinitionOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFTT, g-TFFF, f S g-TFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-FTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnFinitePath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f - TFFT g - FTFF f S g - FTFF
-	 */
-	@Test
-	public void testSinceOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-	}
-
-	/*
-	 * f-FTTT, g-TFFF, f S g-TTTT
-	 */
-	@Test
-	public void testSinceTrueDefinitionOnInfinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFTT, g-TFFF, f S g-TFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnInfinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-FTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnInfinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnInfinitePath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-FTTT, g-TFFF, f S g-TTTT
-	 */
-	@Test
-	public void testSinceTrueDefinitionOnReducedPath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFTT, g-TFFF, f S g-TFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-FTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceFalseDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-UUTU, g-UTUF, f S g-UTTU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UFUU, g-UUFF, f S g-UUUU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UUTU, g-UUUF, f S g-UUUU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f S g-FFFF
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath4() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TTTT, g-UUUU, f S g-UUUU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath5() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	// f-TUTU, g-UFUF, f S g-UUUU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath6() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	// f-UFTU, g-FFTF, f S g-UFTU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath7() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-	}
-
-	// f-UUUU, g-TUUU, f S g-TUUU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath8() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUFU, g-TUFU, f S g- TUFU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath9() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-FFUU, g-FUUU, f S g-FUUU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath10() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUUU, g-UTUU, f S g-UTUU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath11() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UFUU, g-UUUU, f S g-UUUU
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath12() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UFTU, g-FFTF, f S g-UFTU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath13() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-	}
-
-	/*
-	 * f-UUUU, g-UUUU, f S g-UUUU
-	 */
-	@Test
-	public void testSinceUnknownDefinitionOnReducedPath14() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = sinceOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = sinceOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = sinceOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
+	// /*
+	// * f-FTTT, g-TFFF, f S g-TTTT
+	// */
+	// @Test
+	// public void testSinceTrueDefinitionOnFinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFTT, g-TFFF, f S g-TFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnFinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-FTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnFinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnFinitePath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f - TFFT g - FTFF f S g - FTFF
+	// */
+	// @Test
+	// public void testSinceOnFinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// }
+	//
+	// /*
+	// * f-FTTT, g-TFFF, f S g-TTTT
+	// */
+	// @Test
+	// public void testSinceTrueDefinitionOnInfinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFTT, g-TFFF, f S g-TFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnInfinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-FTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnInfinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnInfinitePath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator sinceOperator = new CounterExampleSince(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// sinceOperator = new CounterExampleSince(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-FTTT, g-TFFF, f S g-TTTT
+	// */
+	// @Test
+	// public void testSinceTrueDefinitionOnReducedPath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFTT, g-TFFF, f S g-TFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-FTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceFalseDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-UUTU, g-UTUF, f S g-UTTU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UFUU, g-UUFF, f S g-UUUU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UUTU, g-UUUF, f S g-UUUU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f S g-FFFF
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath4() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-UUUU, f S g-UUUU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath5() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// // f-TUTU, g-UFUF, f S g-UUUU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath6() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// // f-UFTU, g-FFTF, f S g-UFTU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath7() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// }
+	//
+	// // f-UUUU, g-TUUU, f S g-TUUU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath8() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUFU, g-TUFU, f S g- TUFU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath9() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-FFUU, g-FUUU, f S g-FUUU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath10() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUUU, g-UTUU, f S g-UTUU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath11() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UFUU, g-UUUU, f S g-UUUU
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath12() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UFTU, g-FFTF, f S g-UFTU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath13() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// }
+	//
+	// /*
+	// * f-UUUU, g-UUUU, f S g-UUUU
+	// */
+	// @Test
+	// public void testSinceUnknownDefinitionOnReducedPath14() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator sinceOperator = new
+	// CounterExampleSince(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = sinceOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = sinceOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = sinceOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleTriggerUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleTriggerUnitTest.java
index 8726fa19..45bc1d3d 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleTriggerUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleTriggerUnitTest.java
@@ -1,18 +1,5 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
-import de.prob.core.domainobjects.ltl.CounterExampleProposition;
-import de.prob.core.domainobjects.ltl.CounterExampleTrigger;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for a "trigger" operator.
@@ -21,3432 +8,3496 @@ import de.prob.core.domainobjects.ltl.CounterExampleValueType;
  * 
  */
 public final class CounterExampleTriggerUnitTest {
-	/*
-	 * f-TFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FTFT, g-TFFT, f T g-TFFT
-	 */
-	@Test
-	public void testTriggerOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FTTF, g-TTFT, f T g-TTFF
-	 */
-	@Test
-	public void testTriggerOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.FINITE, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-	}
-
-	/*
-	 * f-TFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnInfinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnInfinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnInfinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnInfinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FTFT, g-TFFT, f T g-TFFT
-	 */
-	@Test
-	public void testTriggerOnInfinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = triggerOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerTrueDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-TFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-FTTT, f T g-FFFF
-	 */
-	@Test
-	public void testTriggerFalseDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-	}
-
-	/*
-	 * f-UTUF, g-UUTU, f T g-UTTU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UUUF, g-UFTU, f T g-UFFU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UUUF, g-UUTU, f T g-UUUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-FFFF, g-TTTT, f T g-TTTT
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath4() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-FFFF, g-UUUU, f T g-UUUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath5() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 0 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1, 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1, 0 }));
-	}
-
-	/*
-	 * f-UUUU, g-UUUU, f T g-UUUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath6() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-FTUU, g-TTTF, f T g-TTTF
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath7() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUF, g-UTUT, f T g-UTUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath8() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-	}
-
-	/*
-	 * f-UTFF, g-UTUT, f T g-UTUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath9() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UUUF, g-UFTU, f T g-UFUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath10() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2, 1 }));
-	}
-
-	/*
-	 * f-UUUF, g-UFUU, f T g-UFUU
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath11() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-	}
-
-	/*
-	 * f-FUTF, g-UUTF, f T g-UUTF
-	 */
-	@Test
-	public void testTriggerUnknownDefinitionOnReducedPath12() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = triggerOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = triggerOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = triggerOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
+	// /*
+	// * f-TFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnFinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnFinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnFinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnFinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FTFT, g-TFFT, f T g-TFFT
+	// */
+	// @Test
+	// public void testTriggerOnFinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FTTF, g-TTFT, f T g-TTFF
+	// */
+	// @Test
+	// public void testTriggerOnFinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.FINITE, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// }
+	//
+	// /*
+	// * f-TFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnInfinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnInfinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnInfinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnInfinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FTFT, g-TFFT, f T g-TFFT
+	// */
+	// @Test
+	// public void testTriggerOnInfinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate(PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// triggerOperator = new CounterExampleTrigger(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = triggerOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerTrueDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-TFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-FTTT, f T g-FFFF
+	// */
+	// @Test
+	// public void testTriggerFalseDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// }
+	//
+	// /*
+	// * f-UTUF, g-UUTU, f T g-UTTU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UUUF, g-UFTU, f T g-UFFU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UUUF, g-UUTU, f T g-UUUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-TTTT, f T g-TTTT
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath4() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-FFFF, g-UUUU, f T g-UUUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath5() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 0 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1, 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1, 0 }));
+	// }
+	//
+	// /*
+	// * f-UUUU, g-UUUU, f T g-UUUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath6() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-FTUU, g-TTTF, f T g-TTTF
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath7() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUF, g-UTUT, f T g-UTUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath8() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// }
+	//
+	// /*
+	// * f-UTFF, g-UTUT, f T g-UTUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath9() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UUUF, g-UFTU, f T g-UFUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath10() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2, 1 }));
+	// }
+	//
+	// /*
+	// * f-UUUF, g-UFUU, f T g-UFUU
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath11() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator triggerOperator = new
+	// CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// }
+	//
+	// /*
+	// * f-FUTF, g-UUTF, f T g-UUTF
+	// */
+	// @Test
+	// public void testTriggerUnknownDefinitionOnReducedPath12() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator triggerOperator = new CounterExampleTrigger(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = triggerOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = triggerOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = triggerOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleUntilUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleUntilUnitTest.java
index 1e7e0a7b..f94c169e 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleUntilUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleUntilUnitTest.java
@@ -1,18 +1,5 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
-import de.prob.core.domainobjects.ltl.CounterExampleProposition;
-import de.prob.core.domainobjects.ltl.CounterExampleUntil;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 
 /**
  * Unit test for an "until" operator.
@@ -21,2286 +8,2352 @@ import de.prob.core.domainobjects.ltl.CounterExampleValueType;
  * 
  */
 public final class CounterExampleUntilUnitTest {
-	/*
-	 * f-TTTF, g-FFFT, f U g-TTTT
-	 */
-	@Test
-	public void testUntilTrueDefinitionOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTF, g-FFFF, f U g-FFFF
-	 */
-	@Test
-	public void testUntilFalseDefinitionOnFinitePath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTFF, g-FFFT, f U g-FFFT
-	 */
-	@Test
-	public void testUntilFalseDefinitionOnFinitePath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f U g-FFFF
-	 */
-	@Test
-	public void testUntilFalseDefinitionOnFinitePath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - TFFT g - FTFF f U g - TTFF
-	 */
-	@Test
-	public void testUntilOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - TFFT g - FTFF
-	 */
-	@Test
-	public void testUntilOnInfinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 0 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		untilOperator = new CounterExampleUntil(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		untilOperator = new CounterExampleUntil(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		untilOperator = new CounterExampleUntil(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTU, g-UUUT, f U g-TTTT
-	 */
-	@Test
-	public void testUntilTrueDefinitionOnReducedPath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUFU, g-FFFT, f U g-FFFT
-	 */
-	@Test
-	public void testUntilFalseDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUUF, g-FFFF, f U g-FFFF
-	 */
-	@Test
-	public void testUntilFalseDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUU, g-FUTU, f U g-UTTU
-	 */
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUFU, g-FFUU, f U g-UUUU
-	 */
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUU, g-FUUU, f U g-UUUU
-	 */
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f U g-UUUU
-	 */
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath4() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-UUUU, f U g-UUUU
-	 */
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath5() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUT, g-FUFU, f U g-UUUU
-	 */
-	@Test
-	public void testUntilOnReducedPathUnknownDefinition6() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTFU, g-FTFF, f U g-UTFU
-	 */
-	@Test
-	public void testUntilOnReducedPathUnknownDefinition7() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUUU, g-UUUT, f U g-UUUT
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath8() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UFUU, g-UFUT, f U g-UFUT
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath9() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUFF, g-UUUF, f U g-UUUF
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath10() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUUU, g-UUTU, f U g-UUTU
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath11() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUFU, g-UUUU, f U g-UUUU
-	@Test
-	public void testUntilUnknownDefinitionOnReducedPath12() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - UTFU g - FTFF f U g - UTFU
-	 */
-	@Test
-	public void testUntilOnReducedPathUnknownDefinition13() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - UUUU g - UUUU f U g - UUUU
-	 */
-	@Test
-	public void testUntilOnReducedPathUnknownDefinition14() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = untilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = untilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = untilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
+	// /*
+	// * f-TTTF, g-FFFT, f U g-TTTT
+	// */
+	// @Test
+	// public void testUntilTrueDefinitionOnFinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTF, g-FFFF, f U g-FFFF
+	// */
+	// @Test
+	// public void testUntilFalseDefinitionOnFinitePath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTFF, g-FFFT, f U g-FFFT
+	// */
+	// @Test
+	// public void testUntilFalseDefinitionOnFinitePath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f U g-FFFF
+	// */
+	// @Test
+	// public void testUntilFalseDefinitionOnFinitePath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - TFFT g - FTFF f U g - TTFF
+	// */
+	// @Test
+	// public void testUntilOnFinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - TFFT g - FTFF
+	// */
+	// @Test
+	// public void testUntilOnInfinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator untilOperator = new CounterExampleUntil(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 0 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// untilOperator = new CounterExampleUntil(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// untilOperator = new CounterExampleUntil(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// untilOperator = new CounterExampleUntil(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTU, g-UUUT, f U g-TTTT
+	// */
+	// @Test
+	// public void testUntilTrueDefinitionOnReducedPath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUFU, g-FFFT, f U g-FFFT
+	// */
+	// @Test
+	// public void testUntilFalseDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUUF, g-FFFF, f U g-FFFF
+	// */
+	// @Test
+	// public void testUntilFalseDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUU, g-FUTU, f U g-UTTU
+	// */
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUFU, g-FFUU, f U g-UUUU
+	// */
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUU, g-FUUU, f U g-UUUU
+	// */
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f U g-UUUU
+	// */
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath4() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-UUUU, f U g-UUUU
+	// */
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath5() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUT, g-FUFU, f U g-UUUU
+	// */
+	// @Test
+	// public void testUntilOnReducedPathUnknownDefinition6() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTFU, g-FTFF, f U g-UTFU
+	// */
+	// @Test
+	// public void testUntilOnReducedPathUnknownDefinition7() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUUU, g-UUUT, f U g-UUUT
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath8() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UFUU, g-UFUT, f U g-UFUT
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath9() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUFF, g-UUUF, f U g-UUUF
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath10() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUUU, g-UUTU, f U g-UUTU
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath11() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUFU, g-UUUU, f U g-UUUU
+	// @Test
+	// public void testUntilUnknownDefinitionOnReducedPath12() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - UTFU g - FTFF f U g - UTFU
+	// */
+	// @Test
+	// public void testUntilOnReducedPathUnknownDefinition13() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - UUUU g - UUUU f U g - UUUU
+	// */
+	// @Test
+	// public void testUntilOnReducedPathUnknownDefinition14() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator untilOperator = new
+	// CounterExampleUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = untilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = untilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = untilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleWeakUntilUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleWeakUntilUnitTest.java
index d34fdc6c..db33abab 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleWeakUntilUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleWeakUntilUnitTest.java
@@ -1,18 +1,5 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.Test;
-
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.core.domainobjects.ltl.CounterExampleBinaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
-import de.prob.core.domainobjects.ltl.CounterExampleProposition;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
-import de.prob.core.domainobjects.ltl.CounterExampleWeakUntil;
 
 /**
  * Unit test for a "weak until" operator.
@@ -21,2111 +8,2172 @@ import de.prob.core.domainobjects.ltl.CounterExampleWeakUntil;
  * 
  */
 public final class CounterExampleWeakUntilUnitTest {
-	/*
-	 * f-TTTF, g-FFFT, f WU g-TTTT
-	 */
-	@Test
-	public void testWeakUntilOnFinitePathTrueDefinition1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f WU g-TTTT
-	 */
-	@Test
-	public void testWeakUntilOnFinitePathTrueDefinition2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 0);
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 0);
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 0);
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 0);
-	}
-
-	/*
-	 * f-TTTF, g-FFFF, f WU g-FFFF
-	 */
-	@Test
-	public void testWeakUntilOnFinitePathFalseDefinition1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTFF, g-FFFT, f WU g-FFFT
-	 */
-	@Test
-	public void testWeakUntilOnFinitePathFalseDefinition2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - FFTT g - TFFF f WU g - TFTT
-	 */
-	@Test
-	public void testWeakUntilOnFinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 0);
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 0);
-	}
-
-	/*
-	 * f - FFTT g - TFFF
-	 */
-	@Test
-	public void testWeakUntilOnInfinitePath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// Loop entry = 0
-		// create first argument
-		CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, firstArgumentValues);
-
-		// create second argument
-		CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.INFINITE, 0, secondArgumentValues);
-
-		// create an operator
-		CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.INFINITE, 0, firstArgument, secondArgument);
-
-		// check result values
-		List<CounterExampleValueType> values = weakUntilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// Loop entry = 1
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
-				secondArgumentValues);
-
-		// create an operator
-		weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 1,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = weakUntilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3, 1 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 1 }));
-
-		// Loop entry = 2
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
-				secondArgumentValues);
-
-		// create an operator
-		weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 2,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = weakUntilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 0);
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3, 2 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 0);
-
-		// Loop entry = 3
-		// create first argument
-		firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				firstArgumentValues);
-
-		// create second argument
-		secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
-				secondArgumentValues);
-
-		// create an operator
-		weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 3,
-				firstArgument, secondArgument);
-
-		// check result values
-		values = weakUntilOperator.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 0);
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 0);
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 0);
-	}
-
-	/*
-	 * f-TTTU, g-UUUT, f WU g-TTTT
-	 */
-	@Test
-	public void testWeakUntilTrueDefinitionOnReducedPath() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.FINITE, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.FINITE, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUU, g-FUTU, f WU g-UTTU
-	 */
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath1() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UUFU, g-FFUU, f WU g-UUUU
-	 */
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath2() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUU, g-FUUU, f WU g-UUUU
-	 */
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath3() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-FFFF, f WU g-UUUU
-	 */
-	@Test
-	public void testWeakUntilOnReducedPathUnknownDefinition4() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-TTTT, g-UUUU, f WU g-UUUU
-	 */
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath5() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTUT, g-FUFU, f WU g-UUUU
-	 */
-	@Test
-	public void testWeakUntilOnReducedPathUnknownDefinition6() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 4);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1, 2, 3 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 3);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1, 2, 3 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2, 3 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f-UTFU, g-FTFF, f WU g-UTFU
-	 */
-	@Test
-	public void testWeakUntilOnReducedPathUnknownDefinition7() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUUU, g-UUUT, f WU g-UUUT
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath8() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UFUU, g-UFUT, f WU g-UFUT
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath9() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.TRUE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 0);
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUFF, g-UUUF, f WU g-UUUF
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath10() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUUU, g-UUTU, f WU g-UUTU
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath11() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 0);
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	// f-UUFU, g-UUUU, f WU g-UUUU
-	@Test
-	public void testWeakUntilUnknownDefinitionOnReducedPath12() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				PathType.REDUCED, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				PathType.REDUCED, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - UTFU g - FTFF f WU g - UTFU
-	 */
-	@Test
-	public void testWeakUntilOnReducedPathUnknownDefinition13() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.FALSE });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 2);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0, 1 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 0);
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
-
-	/*
-	 * f - UUUU g - UUUU f WU g - UUUU
-	 */
-	@Test
-	public void testWeakUntilOnReducedPathUnknownDefinition14() {
-		// create first argument values
-		final List<CounterExampleValueType> firstArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create second argument values
-		final List<CounterExampleValueType> secondArgumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.UNKNOWN });
-
-		// create first argument
-		final CounterExampleProposition firstArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, firstArgumentValues);
-
-		// create second argument
-		final CounterExampleProposition secondArgument = new CounterExamplePredicate(
-				"", PathType.REDUCED, -1, secondArgumentValues);
-
-		// create an operator
-		final CounterExampleBinaryOperator weakUntilOperator = new CounterExampleWeakUntil(
-				PathType.REDUCED, -1, firstArgument, secondArgument);
-
-		// check result values
-		final List<CounterExampleValueType> values = weakUntilOperator
-				.getValues();
-		assertTrue(values.size() == firstArgumentValues.size());
-		assertTrue(values.size() == secondArgumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
-
-		// check highlighted positions
-		final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
-				.getFirstHighlightedPositions();
-		final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
-				.getSecondHighlightedPositions();
-		assertTrue(firstHighlightedPositions.size() == firstArgumentValues
-				.size());
-		assertTrue(secondHighlightedPositions.size() == secondArgumentValues
-				.size());
-
-		// State 0
-		assertTrue(firstHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-		assertTrue(secondHighlightedPositions.get(0).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(0).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		// State 1
-		assertTrue(firstHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-		assertTrue(secondHighlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		// State 2
-		assertTrue(firstHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-		assertTrue(secondHighlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// State 3
-		assertTrue(firstHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				firstHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-		assertTrue(secondHighlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				secondHighlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 3 }));
-	}
+	// /*
+	// * f-TTTF, g-FFFT, f WU g-TTTT
+	// */
+	// @Test
+	// public void testWeakUntilOnFinitePathTrueDefinition1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f WU g-TTTT
+	// */
+	// @Test
+	// public void testWeakUntilOnFinitePathTrueDefinition2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 0);
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 0);
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 0);
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 0);
+	// }
+	//
+	// /*
+	// * f-TTTF, g-FFFF, f WU g-FFFF
+	// */
+	// @Test
+	// public void testWeakUntilOnFinitePathFalseDefinition1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTFF, g-FFFT, f WU g-FFFT
+	// */
+	// @Test
+	// public void testWeakUntilOnFinitePathFalseDefinition2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - FFTT g - TFFF f WU g - TFTT
+	// */
+	// @Test
+	// public void testWeakUntilOnFinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 0);
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 0);
+	// }
+	//
+	// /*
+	// * f - FFTT g - TFFF
+	// */
+	// @Test
+	// public void testWeakUntilOnInfinitePath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // Loop entry = 0
+	// // create first argument
+	// CounterExampleProposition firstArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, firstArgumentValues);
+	//
+	// // create second argument
+	// CounterExampleProposition secondArgument = new CounterExamplePredicate(
+	// "", PathType.INFINITE, 0, secondArgumentValues);
+	//
+	// // create an operator
+	// CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.INFINITE, 0, firstArgument, secondArgument);
+	//
+	// // check result values
+	// List<CounterExampleValueType> values = weakUntilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // Loop entry = 1
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 1,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 1,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = weakUntilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3, 1 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 1 }));
+	//
+	// // Loop entry = 2
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 2,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 2,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = weakUntilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 0);
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3, 2 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 0);
+	//
+	// // Loop entry = 3
+	// // create first argument
+	// firstArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// firstArgumentValues);
+	//
+	// // create second argument
+	// secondArgument = new CounterExamplePredicate("", PathType.INFINITE, 3,
+	// secondArgumentValues);
+	//
+	// // create an operator
+	// weakUntilOperator = new CounterExampleWeakUntil(PathType.INFINITE, 3,
+	// firstArgument, secondArgument);
+	//
+	// // check result values
+	// values = weakUntilOperator.getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 0);
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 0);
+	// }
+	//
+	// /*
+	// * f-TTTU, g-UUUT, f WU g-TTTT
+	// */
+	// @Test
+	// public void testWeakUntilTrueDefinitionOnReducedPath() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.FINITE, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.FINITE, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUU, g-FUTU, f WU g-UTTU
+	// */
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath1() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UUFU, g-FFUU, f WU g-UUUU
+	// */
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath2() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUU, g-FUUU, f WU g-UUUU
+	// */
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath3() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-FFFF, f WU g-UUUU
+	// */
+	// @Test
+	// public void testWeakUntilOnReducedPathUnknownDefinition4() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-TTTT, g-UUUU, f WU g-UUUU
+	// */
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath5() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTUT, g-FUFU, f WU g-UUUU
+	// */
+	// @Test
+	// public void testWeakUntilOnReducedPathUnknownDefinition6() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 4);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1, 2, 3 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 3);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1, 2, 3 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2, 3 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f-UTFU, g-FTFF, f WU g-UTFU
+	// */
+	// @Test
+	// public void testWeakUntilOnReducedPathUnknownDefinition7() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUUU, g-UUUT, f WU g-UUUT
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath8() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UFUU, g-UFUT, f WU g-UFUT
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath9() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.TRUE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUFF, g-UUUF, f WU g-UUUF
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath10() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.FALSE);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUUU, g-UUTU, f WU g-UUTU
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath11() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// // f-UUFU, g-UUUU, f WU g-UUUU
+	// @Test
+	// public void testWeakUntilUnknownDefinitionOnReducedPath12() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// PathType.REDUCED, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - UTFU g - FTFF f WU g - UTFU
+	// */
+	// @Test
+	// public void testWeakUntilOnReducedPathUnknownDefinition13() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.TRUE,
+	// CounterExampleValueType.FALSE,
+	// CounterExampleValueType.FALSE });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.TRUE);
+	// assertTrue(values.get(2) == CounterExampleValueType.FALSE);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 2);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0, 1 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 0);
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
+	//
+	// /*
+	// * f - UUUU g - UUUU f WU g - UUUU
+	// */
+	// @Test
+	// public void testWeakUntilOnReducedPathUnknownDefinition14() {
+	// // create first argument values
+	// final List<CounterExampleValueType> firstArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create second argument values
+	// final List<CounterExampleValueType> secondArgumentValues = Arrays
+	// .asList(new CounterExampleValueType[] {
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN,
+	// CounterExampleValueType.UNKNOWN });
+	//
+	// // create first argument
+	// final CounterExampleProposition firstArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, firstArgumentValues);
+	//
+	// // create second argument
+	// final CounterExampleProposition secondArgument = new
+	// CounterExamplePredicate(
+	// "", PathType.REDUCED, -1, secondArgumentValues);
+	//
+	// // create an operator
+	// final CounterExampleBinaryOperator weakUntilOperator = new
+	// CounterExampleWeakUntil(
+	// PathType.REDUCED, -1, firstArgument, secondArgument);
+	//
+	// // check result values
+	// final List<CounterExampleValueType> values = weakUntilOperator
+	// .getValues();
+	// assertTrue(values.size() == firstArgumentValues.size());
+	// assertTrue(values.size() == secondArgumentValues.size());
+	// assertTrue(values.get(0) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(1) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
+	// assertTrue(values.get(3) == CounterExampleValueType.UNKNOWN);
+	//
+	// // check highlighted positions
+	// final List<List<Integer>> firstHighlightedPositions = weakUntilOperator
+	// .getFirstHighlightedPositions();
+	// final List<List<Integer>> secondHighlightedPositions = weakUntilOperator
+	// .getSecondHighlightedPositions();
+	// assertTrue(firstHighlightedPositions.size() == firstArgumentValues
+	// .size());
+	// assertTrue(secondHighlightedPositions.size() == secondArgumentValues
+	// .size());
+	//
+	// // State 0
+	// assertTrue(firstHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	// assertTrue(secondHighlightedPositions.get(0).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(0).toArray(new Integer[0]),
+	// new Integer[] { 0 }));
+	//
+	// // State 1
+	// assertTrue(firstHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	// assertTrue(secondHighlightedPositions.get(1).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(1).toArray(new Integer[0]),
+	// new Integer[] { 1 }));
+	//
+	// // State 2
+	// assertTrue(firstHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	// assertTrue(secondHighlightedPositions.get(2).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(2).toArray(new Integer[0]),
+	// new Integer[] { 2 }));
+	//
+	// // State 3
+	// assertTrue(firstHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// firstHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// assertTrue(secondHighlightedPositions.get(3).size() == 1);
+	// assertTrue(Arrays.equals(
+	// secondHighlightedPositions.get(3).toArray(new Integer[0]),
+	// new Integer[] { 3 }));
+	// }
 }
diff --git a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleYesterdayUnitTest.java b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleYesterdayUnitTest.java
index 5518e5b6..b7b7e254 100644
--- a/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleYesterdayUnitTest.java
+++ b/de.prob.core/test/de/prob/core/domainobjects/ltl/unittests/CounterExampleYesterdayUnitTest.java
@@ -1,17 +1,9 @@
 package de.prob.core.domainobjects.ltl.unittests;
 
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
 import org.junit.Test;
 
-import de.prob.core.command.LtlCheckingCommand.PathType;
-import de.prob.core.domainobjects.ltl.CounterExamplePredicate;
 import de.prob.core.domainobjects.ltl.CounterExampleProposition;
 import de.prob.core.domainobjects.ltl.CounterExampleUnaryOperator;
-import de.prob.core.domainobjects.ltl.CounterExampleValueType;
 import de.prob.core.domainobjects.ltl.CounterExampleYesterday;
 
 /**
@@ -27,52 +19,8 @@ public final class CounterExampleYesterdayUnitTest {
 	 */
 	@Test
 	public void testYesterdayOnFinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				PathType.FINITE, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator yesterdayOperator = new CounterExampleYesterday(
-				PathType.FINITE, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = yesterdayOperator
-				.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = yesterdayOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+		final LtlTestDescription d = LtlTestDescription.finite(4);
+		checkYesterdayFTFT(d);
 	}
 
 	/*
@@ -80,166 +28,10 @@ public final class CounterExampleYesterdayUnitTest {
 	 */
 	@Test
 	public void testYesterdayOnInfinitePath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// Loop entry = 0
-		// create an argument
-		CounterExampleProposition argument = new CounterExamplePredicate(
-				PathType.INFINITE, 0, argumentValues);
-
-		// create an operator
-		CounterExampleUnaryOperator yesterdayOperator = new CounterExampleYesterday(
-				PathType.INFINITE, 0, argument);
-
-		// check result values
-		List<CounterExampleValueType> values = yesterdayOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		List<List<Integer>> highlightedPositions = yesterdayOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// Loop entry = 1
-		// create an argument
-		argument = new CounterExamplePredicate(PathType.INFINITE, 1,
-				argumentValues);
-
-		// create an operator
-		yesterdayOperator = new CounterExampleYesterday(PathType.INFINITE, 1,
-				argument);
-
-		// check result values
-		values = yesterdayOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = yesterdayOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// Loop entry = 2
-		// create an argument
-		argument = new CounterExamplePredicate(PathType.INFINITE, 2,
-				argumentValues);
-
-		// create an operator
-		yesterdayOperator = new CounterExampleYesterday(PathType.INFINITE, 2,
-				argument);
-
-		// check result values
-		values = yesterdayOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = yesterdayOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
-
-		// Loop entry = 3
-		// create an argument
-		argument = new CounterExamplePredicate(PathType.INFINITE, 3,
-				argumentValues);
-
-		// create an operator
-		yesterdayOperator = new CounterExampleYesterday(PathType.INFINITE, 3,
-				argument);
-
-		// check result values
-		values = yesterdayOperator.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(2) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		highlightedPositions = yesterdayOperator.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+		for (int entry = 0; entry < 4; entry++) {
+			final LtlTestDescription d = LtlTestDescription.loop(4, entry);
+			checkYesterdayFTFT(d);
+		}
 	}
 
 	/*
@@ -247,52 +39,28 @@ public final class CounterExampleYesterdayUnitTest {
 	 */
 	@Test
 	public void testYesterdayOnReducedPath() {
-		// create argument values
-		final List<CounterExampleValueType> argumentValues = Arrays
-				.asList(new CounterExampleValueType[] {
-						CounterExampleValueType.TRUE,
-						CounterExampleValueType.UNKNOWN,
-						CounterExampleValueType.FALSE,
-						CounterExampleValueType.TRUE });
-
-		// create an argument
-		final CounterExampleProposition argument = new CounterExamplePredicate(
-				PathType.REDUCED, argumentValues);
-
-		// create an operator
-		final CounterExampleUnaryOperator yesterdayOperator = new CounterExampleYesterday(
-				PathType.REDUCED, argument);
-
-		// check result values
-		final List<CounterExampleValueType> values = yesterdayOperator
-				.getValues();
-		assertTrue(values.size() == argumentValues.size());
-		assertTrue(values.get(0) == CounterExampleValueType.FALSE);
-		assertTrue(values.get(1) == CounterExampleValueType.TRUE);
-		assertTrue(values.get(2) == CounterExampleValueType.UNKNOWN);
-		assertTrue(values.get(3) == CounterExampleValueType.FALSE);
-
-		// check highlighted positions
-		final List<List<Integer>> highlightedPositions = yesterdayOperator
-				.getHighlightedPositions();
-		assertTrue(highlightedPositions.size() == argumentValues.size());
-
-		assertTrue(highlightedPositions.get(0).size() == 0);
-
-		assertTrue(highlightedPositions.get(1).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(1).toArray(new Integer[0]),
-				new Integer[] { 0 }));
-
-		assertTrue(highlightedPositions.get(2).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(2).toArray(new Integer[0]),
-				new Integer[] { 1 }));
-
-		assertTrue(highlightedPositions.get(3).size() == 1);
-		assertTrue(Arrays.equals(
-				highlightedPositions.get(3).toArray(new Integer[0]),
-				new Integer[] { 2 }));
+		final LtlTestDescription d = LtlTestDescription.reduced(4);
+		final CounterExampleProposition arg = d.addArgument("arg", "tuft");
+		final CounterExampleUnaryOperator yesterday = new CounterExampleYesterday(
+				d.getCounterExample(), arg);
+		d.checkValues("yesterday", yesterday, "ftuf");
+		d.expectedHighlight(0, "yestH");
+		d.expectedHighlight(1, "yestH", 0);
+		d.expectedHighlight(2, "yestH", 1);
+		d.expectedHighlight(3, "yestH", 2);
+		d.checkHighlights("yesterday", yesterday, "yestH");
+	}
 
+	private void checkYesterdayFTFT(final LtlTestDescription d) {
+		final CounterExampleProposition arg = d.addArgument("arg", "ftft");
+		final CounterExampleUnaryOperator yesterday = new CounterExampleYesterday(
+				d.getCounterExample(), arg);
+		d.checkValues("yesterday", yesterday, "fftf");
+		d.expectedHighlight(0, "yestH");
+		d.expectedHighlight(1, "yestH", 0);
+		d.expectedHighlight(2, "yestH", 1);
+		d.expectedHighlight(3, "yestH", 2);
+		d.checkHighlights("yesterday", yesterday, "yestH");
 	}
+
 }
-- 
GitLab