diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java
index 76c9d52b54d11dbcecd22d3197db1c47f5ec3eac..dfe0e4a12cf543a46c982e4e6694a18a3ec7b231 100644
--- a/src/main/java/de/tla2bAst/BAstCreator.java
+++ b/src/main/java/de/tla2bAst/BAstCreator.java
@@ -1,47 +1,29 @@
 package de.tla2bAst;
 
-import java.util.*;
-import java.util.Map.Entry;
-
-import tla2sany.semantic.*;
-import tla2sany.st.Location;
-import tlc2.tool.BuiltInOPs;
-import tlc2.value.ModelValue;
-import tlc2.value.SetEnumValue;
-import tlc2.value.StringValue;
-import tlc2.value.Value;
-import tlc2.value.ValueConstants;
 import de.be4.classicalb.core.parser.Definitions;
 import de.be4.classicalb.core.parser.node.*;
 import de.hhu.stups.sablecc.patch.PositionedNode;
 import de.hhu.stups.sablecc.patch.SourcePosition;
-import de.tla2b.analysis.BOperation;
-import de.tla2b.analysis.PredicateVsExpression;
-import de.tla2b.analysis.RecursiveDefinition;
-import de.tla2b.analysis.SpecAnalyser;
-import de.tla2b.analysis.UsedExternalFunctions;
+import de.tla2b.analysis.*;
 import de.tla2b.analysis.PredicateVsExpression.DefinitionType;
 import de.tla2b.analysis.UsedExternalFunctions.EXTERNAL_FUNCTIONS;
 import de.tla2b.config.ConfigfileEvaluator;
 import de.tla2b.config.ValueObj;
 import de.tla2b.exceptions.NotImplementedException;
-import de.tla2b.global.BBuildIns;
-import de.tla2b.global.BBuiltInOPs;
-import de.tla2b.global.OperatorTypes;
-import de.tla2b.global.Priorities;
-import de.tla2b.global.TranslationGlobals;
+import de.tla2b.global.*;
 import de.tla2b.translation.BMacroHandler;
 import de.tla2b.translation.RecursiveFunctionHandler;
-import de.tla2b.types.EnumType;
-import de.tla2b.types.FunctionType;
-import de.tla2b.types.IType;
-import de.tla2b.types.SetType;
-import de.tla2b.types.StructType;
-import de.tla2b.types.TLAType;
-import de.tla2b.types.TupleType;
+import de.tla2b.types.*;
+import tla2sany.semantic.*;
+import tla2sany.st.Location;
+import tlc2.tool.BuiltInOPs;
+import tlc2.value.*;
+
+import java.util.*;
+import java.util.Map.Entry;
 
 public class BAstCreator extends BuiltInOPs
-		implements TranslationGlobals, ASTConstants, BBuildIns, Priorities, ValueConstants {
+	implements TranslationGlobals, ASTConstants, BBuildIns, Priorities, ValueConstants {
 
 	List<PMachineClause> machineClauseList;
 	ConfigfileEvaluator conEval;
@@ -105,8 +87,8 @@ public class BAstCreator extends BuiltInOPs
 	}
 
 	public BAstCreator(ModuleNode moduleNode, ConfigfileEvaluator conEval, SpecAnalyser specAnalyser,
-			UsedExternalFunctions usedExternalFunctions, PredicateVsExpression predicateVsExpression,
-			BMacroHandler bMacroHandler, RecursiveFunctionHandler recursiveFunctionHandler) {
+	                   UsedExternalFunctions usedExternalFunctions, PredicateVsExpression predicateVsExpression,
+	                   BMacroHandler bMacroHandler, RecursiveFunctionHandler recursiveFunctionHandler) {
 		this.predicateVsExpression = predicateVsExpression;
 		this.bMacroHandler = bMacroHandler;
 		this.recursiveFunctionHandler = recursiveFunctionHandler;
@@ -279,7 +261,7 @@ public class BAstCreator extends BuiltInOPs
 			params.add(createIdentifierNode("Msg"));
 			def1.setParameters(params);
 			def1.setRhs(new AEqualPredicate(new AIntegerExpression(new TIntegerLiteral("1")),
-					new AIntegerExpression(new TIntegerLiteral("1"))));
+				new AIntegerExpression(new TIntegerLiteral("1"))));
 			list.add(def1);
 
 			AExpressionDefinitionDefinition def2 = new AExpressionDefinitionDefinition();
@@ -339,7 +321,7 @@ public class BAstCreator extends BuiltInOPs
 			for (OpDeclNode opDeclNode : bVariables) {
 
 				AIdentifierExpression id = createPositionedNode(
-						new AIdentifierExpression(createTIdentifierLiteral(getName(opDeclNode))), opDeclNode);
+					new AIdentifierExpression(createTIdentifierLiteral(getName(opDeclNode))), opDeclNode);
 				list.add(id);
 				TLAType type = (TLAType) opDeclNode.getToolObject(TYPE_ID);
 				typeTable.put(id, type);
@@ -354,8 +336,8 @@ public class BAstCreator extends BuiltInOPs
 
 		for (RecursiveDefinition recDef : specAnalyser.getRecursiveDefinitions()) {
 			AIdentifierExpression id = createPositionedNode(
-					new AIdentifierExpression(createTIdentifierLiteral(getName(recDef.getOpDefNode()))),
-					recDef.getOpDefNode());
+				new AIdentifierExpression(createTIdentifierLiteral(getName(recDef.getOpDefNode()))),
+				recDef.getOpDefNode());
 			constantsList.add(id);
 			TLAType type = (TLAType) recDef.getOpDefNode().getToolObject(TYPE_ID);
 			typeTable.put(id, type);
@@ -370,7 +352,7 @@ public class BAstCreator extends BuiltInOPs
 
 		if (!constantsList.isEmpty()) {
 			AAbstractConstantsMachineClause abstractConstantsClause = new AAbstractConstantsMachineClause(
-					constantsList);
+				constantsList);
 			machineClauseList.add(abstractConstantsClause);
 		}
 	}
@@ -386,7 +368,7 @@ public class BAstCreator extends BuiltInOPs
 		List<PExpression> constantsList = new ArrayList<>();
 		for (OpDeclNode opDeclNode : bConstants) {
 			AIdentifierExpression id = createPositionedNode(
-					new AIdentifierExpression(createTIdentifierLiteral(getName(opDeclNode))), opDeclNode);
+				new AIdentifierExpression(createTIdentifierLiteral(getName(opDeclNode))), opDeclNode);
 			constantsList.add(id);
 			TLAType type = (TLAType) opDeclNode.getToolObject(TYPE_ID);
 			typeTable.put(id, type);
@@ -474,7 +456,7 @@ public class BAstCreator extends BuiltInOPs
 			ThmOrAssumpDefNode def = assumeNode.getDef();
 			if (def != null) {
 				ALabelPredicate aLabelPredicate = new ALabelPredicate(new TPragmaIdOrString(def.getName().toString()),
-						createPositionedNode(visitAssumeNode(assumeNode), assumeNode));
+					createPositionedNode(visitAssumeNode(assumeNode), assumeNode));
 				assertionList.add(aLabelPredicate);
 			} else {
 				propertiesList.add(visitAssumeNode(assumeNode));
@@ -497,7 +479,7 @@ public class BAstCreator extends BuiltInOPs
 		List<PPredicate> propertiesList = new ArrayList<PPredicate>();
 		for (OpDefNode def : specAnalyser.getRecursiveFunctions()) {
 			AEqualPredicate equals = new AEqualPredicate(createIdentifierNode(def),
-					visitExprNodeExpression(def.getBody()));
+				visitExprNodeExpression(def.getBody()));
 			propertiesList.add(equals);
 		}
 		return propertiesList;
@@ -545,27 +527,27 @@ public class BAstCreator extends BuiltInOPs
 
 	private PExpression createTLCValue(Value tlcValue) {
 		switch (tlcValue.getKind()) {
-		case INTVALUE:
-			return new AIntegerExpression(new TIntegerLiteral(tlcValue.toString()));
-		case SETENUMVALUE: {
-			SetEnumValue s = (SetEnumValue) tlcValue;
-			ArrayList<PExpression> list = new ArrayList<>();
-			for (int i = 0; i < s.elems.size(); i++) {
-				Value v = s.elems.elementAt(i);
-				list.add(createTLCValue(v));
+			case INTVALUE:
+				return new AIntegerExpression(new TIntegerLiteral(tlcValue.toString()));
+			case SETENUMVALUE: {
+				SetEnumValue s = (SetEnumValue) tlcValue;
+				ArrayList<PExpression> list = new ArrayList<>();
+				for (int i = 0; i < s.elems.size(); i++) {
+					Value v = s.elems.elementAt(i);
+					list.add(createTLCValue(v));
+				}
+				return new ASetExtensionExpression(list);
 			}
-			return new ASetExtensionExpression(list);
-		}
-		case MODELVALUE: {
-			ModelValue m = (ModelValue) tlcValue;
-			return createIdentifierNode(m.toString());
-		}
-		case STRINGVALUE: {
-			StringValue stringValue = (StringValue) tlcValue;
-			return new AStringExpression(new TStringLiteral(stringValue.getVal().toString()));
-		}
-		default:
-			throw new NotImplementedException("TLC value in configuration file: " + tlcValue.getClass());
+			case MODELVALUE: {
+				ModelValue m = (ModelValue) tlcValue;
+				return createIdentifierNode(m.toString());
+			}
+			case STRINGVALUE: {
+				StringValue stringValue = (StringValue) tlcValue;
+				return new AStringExpression(new TStringLiteral(stringValue.getVal().toString()));
+			}
+			default:
+				throw new NotImplementedException("TLC value in configuration file: " + tlcValue.getClass());
 		}
 	}
 
@@ -613,52 +595,52 @@ public class BAstCreator extends BuiltInOPs
 
 	public PPredicate visitExprNodePredicate(ExprNode exprNode) {
 		switch (exprNode.getKind()) {
-		case OpApplKind:
-			return visitOpApplNodePredicate((OpApplNode) exprNode);
-		case LetInKind: {
-			LetInNode letInNode = (LetInNode) exprNode;
-			return visitExprNodePredicate(letInNode.getBody());
-		}
-		case NumeralKind:
-		case DecimalKind: {
-			throw new RuntimeException();
-		}
-		default:
-			throw new NotImplementedException(exprNode.getClass().toString());
+			case OpApplKind:
+				return visitOpApplNodePredicate((OpApplNode) exprNode);
+			case LetInKind: {
+				LetInNode letInNode = (LetInNode) exprNode;
+				return visitExprNodePredicate(letInNode.getBody());
+			}
+			case NumeralKind:
+			case DecimalKind: {
+				throw new RuntimeException();
+			}
+			default:
+				throw new NotImplementedException(exprNode.getClass().toString());
 		}
 
 	}
 
 	private PExpression visitExprNodeExpression(ExprNode exprNode) {
 		switch (exprNode.getKind()) {
-		case OpApplKind:
-			return visitOpApplNodeExpression((OpApplNode) exprNode);
-		case NumeralKind: {
-			String number = String.valueOf(((NumeralNode) exprNode).val());
-			return createPositionedNode(new AIntegerExpression(new TIntegerLiteral(number)), exprNode);
-		}
-		case DecimalKind: {
-			return createPositionedNode(new ARealExpression(new TRealLiteral(exprNode.toString())), exprNode);
-		}
-		case StringKind: {
-			StringNode s = (StringNode) exprNode;
-			return createPositionedNode(new AStringExpression(new TStringLiteral(s.getRep().toString())), exprNode);
-		}
-		case AtNodeKind: { // @
-			AtNode at = (AtNode) exprNode;
-			TLAType type = (TLAType) at.getExceptRef().getToolObject(TYPE_ID);
-			OpApplNode seq = at.getAtModifier();
-			LinkedList<ExprOrOpArgNode> list = new LinkedList<>(Arrays.asList(seq.getArgs()));
-			// PExpression base = visitExprNodeExpression(at.getAtBase());
-			PExpression base = (PExpression) at.getExceptComponentRef().getToolObject(EXCEPT_BASE);
-			return evalAtNode(list, type, base.clone());
-		}
-		case LetInKind: {
-			LetInNode letInNode = (LetInNode) exprNode;
-			return visitExprNodeExpression(letInNode.getBody());
-		}
-		default:
-			throw new NotImplementedException(exprNode.getClass().toString());
+			case OpApplKind:
+				return visitOpApplNodeExpression((OpApplNode) exprNode);
+			case NumeralKind: {
+				String number = String.valueOf(((NumeralNode) exprNode).val());
+				return createPositionedNode(new AIntegerExpression(new TIntegerLiteral(number)), exprNode);
+			}
+			case DecimalKind: {
+				return createPositionedNode(new ARealExpression(new TRealLiteral(exprNode.toString())), exprNode);
+			}
+			case StringKind: {
+				StringNode s = (StringNode) exprNode;
+				return createPositionedNode(new AStringExpression(new TStringLiteral(s.getRep().toString())), exprNode);
+			}
+			case AtNodeKind: { // @
+				AtNode at = (AtNode) exprNode;
+				TLAType type = (TLAType) at.getExceptRef().getToolObject(TYPE_ID);
+				OpApplNode seq = at.getAtModifier();
+				LinkedList<ExprOrOpArgNode> list = new LinkedList<>(Arrays.asList(seq.getArgs()));
+				// PExpression base = visitExprNodeExpression(at.getAtBase());
+				PExpression base = (PExpression) at.getExceptComponentRef().getToolObject(EXCEPT_BASE);
+				return evalAtNode(list, type, base.clone());
+			}
+			case LetInKind: {
+				LetInNode letInNode = (LetInNode) exprNode;
+				return visitExprNodeExpression(letInNode.getBody());
+			}
+			default:
+				throw new NotImplementedException(exprNode.getClass().toString());
 		}
 
 	}
@@ -690,99 +672,97 @@ public class BAstCreator extends BuiltInOPs
 
 	private PPredicate visitOpApplNodePredicate(OpApplNode opApplNode) {
 		switch (opApplNode.getOperator().getKind()) {
-		case VariableDeclKind:
-		case ConstantDeclKind:
-		case FormalParamKind: {
-			return createPositionedNode(
+			case VariableDeclKind:
+			case ConstantDeclKind:
+			case FormalParamKind: {
+				return createPositionedNode(
 					new AEqualPredicate(createIdentifierNode(opApplNode.getOperator()), new ABooleanTrueExpression()),
 					opApplNode);
-		}
-		case BuiltInKind:
-			return visitBuiltInKindPredicate(opApplNode);
+			}
+			case BuiltInKind:
+				return visitBuiltInKindPredicate(opApplNode);
 
-		case UserDefinedOpKind: {
-			return visitUserdefinedOpPredicate(opApplNode);
-		}
-		default:
-			throw new NotImplementedException(opApplNode.getClass().toString());
+			case UserDefinedOpKind: {
+				return visitUserdefinedOpPredicate(opApplNode);
+			}
+			default:
+				throw new NotImplementedException(opApplNode.getClass().toString());
 		}
 
 	}
 
 	private PExpression visitOpApplNodeExpression(OpApplNode n) {
 		switch (n.getOperator().getKind()) {
-		case ConstantDeclKind: {
-			return createIdentifierNode(n.getOperator());
-		}
-		case VariableDeclKind: {
-			return createIdentifierNode(n.getOperator());
-		}
-		case FormalParamKind: {
-			FormalParamNode param = (FormalParamNode) n.getOperator();
-			ExprOrOpArgNode e = (ExprOrOpArgNode) param.getToolObject(SUBSTITUTE_PARAM);
-			if (e != null) {
-				return visitExprOrOpArgNodeExpression(e);
-			}
-
-			if (recursiveFunctionHandler.isRecursiveFunction(param)) {
-				ArrayList<SymbolNode> list = recursiveFunctionHandler.getAdditionalParams(param);
-				if (!list.isEmpty()) {
-					AFunctionExpression call = new AFunctionExpression();
-					call.setIdentifier(createIdentifierNode(param));
-					ArrayList<PExpression> params = new ArrayList<>();
-					for (SymbolNode symbolNode : list) {
-						params.add(createIdentifierNode(symbolNode));
+			case ConstantDeclKind:
+			case VariableDeclKind: {
+				return createIdentifierNode(n.getOperator());
+			}
+			case FormalParamKind: {
+				FormalParamNode param = (FormalParamNode) n.getOperator();
+				ExprOrOpArgNode e = (ExprOrOpArgNode) param.getToolObject(SUBSTITUTE_PARAM);
+				if (e != null) {
+					return visitExprOrOpArgNodeExpression(e);
+				}
+
+				if (recursiveFunctionHandler.isRecursiveFunction(param)) {
+					ArrayList<SymbolNode> list = recursiveFunctionHandler.getAdditionalParams(param);
+					if (!list.isEmpty()) {
+						AFunctionExpression call = new AFunctionExpression();
+						call.setIdentifier(createIdentifierNode(param));
+						ArrayList<PExpression> params = new ArrayList<>();
+						for (SymbolNode symbolNode : list) {
+							params.add(createIdentifierNode(symbolNode));
+						}
+						call.setParameters(params);
+						return call;
 					}
-					call.setParameters(params);
-					return call;
 				}
-			}
-			FormalParamNode[] tuple = (FormalParamNode[]) param.getToolObject(TUPLE);
-			if (tuple != null) {
-				if (tuple.length == 1) {
-					AFunctionExpression functionCall = new AFunctionExpression();
-					functionCall.setIdentifier(createIdentifierNode(n.getOperator()));
-					List<PExpression> paramList = new ArrayList<>();
-					paramList.add(new AIntegerExpression(new TIntegerLiteral("1")));
-					functionCall.setParameters(paramList);
-					return functionCall;
-				} else {
+				FormalParamNode[] tuple = (FormalParamNode[]) param.getToolObject(TUPLE);
+				if (tuple != null) {
+					if (tuple.length == 1) {
+						AFunctionExpression functionCall = new AFunctionExpression();
+						functionCall.setIdentifier(createIdentifierNode(n.getOperator()));
+						List<PExpression> paramList = new ArrayList<>();
+						paramList.add(new AIntegerExpression(new TIntegerLiteral("1")));
+						functionCall.setParameters(paramList);
+						return functionCall;
+					} else {
 
-					StringBuilder sb = new StringBuilder();
-					List<TLAType> typeList = new ArrayList<>();
-					int number = -1;
-					for (int j = 0; j < tuple.length; j++) {
-						FormalParamNode p = tuple[j];
-						sb.append(p.getName().toString());
-						TLAType type = (TLAType) p.getToolObject(TYPE_ID);
-						typeList.add(type);
-						if (p == param) {
-							number = j + 1;
+						StringBuilder sb = new StringBuilder();
+						List<TLAType> typeList = new ArrayList<>();
+						int number = -1;
+						for (int j = 0; j < tuple.length; j++) {
+							FormalParamNode p = tuple[j];
+							sb.append(p.getName().toString());
+							TLAType type = (TLAType) p.getToolObject(TYPE_ID);
+							typeList.add(type);
+							if (p == param) {
+								number = j + 1;
+							}
 						}
+						TupleType tupleType = new TupleType(typeList);
+						PExpression id = createIdentifierNode(sb.toString());
+						return createProjectionFunction(id, number, tupleType);
 					}
-					TupleType tupleType = new TupleType(typeList);
-					PExpression id = createIdentifierNode(sb.toString());
-					return createProjectionFunction(id, number, tupleType);
 				}
+				return createIdentifierNode(n.getOperator());
 			}
-			return createIdentifierNode(n.getOperator());
-		}
-		case BuiltInKind:
-			return visitBuiltInKindExpression(n);
+			case BuiltInKind:
+				return visitBuiltInKindExpression(n);
 
-		case UserDefinedOpKind: {
-			return visitUserdefinedOpExpression(n);
-		}
-		default:
-			throw new NotImplementedException(n.getOperator().getName().toString());
+			case UserDefinedOpKind: {
+				return visitUserdefinedOpExpression(n);
+			}
+			default:
+				throw new NotImplementedException(n.getOperator().getName().toString());
 		}
 	}
 
 	private PPredicate visitUserdefinedOpPredicate(OpApplNode n) {
 		OpDefNode def = (OpDefNode) n.getOperator();
 		if (BBuiltInOPs.contains(def.getName()) // Operator is a B built-in
-												// operator
-				&& STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) {
+			// operator
+			&& STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) {
 			return visitBBuitInsPredicate(n);
 		}
 		if (specAnalyser.getRecursiveFunctions().contains(def)) {
@@ -822,7 +802,7 @@ public class BAstCreator extends BuiltInOPs
 		OpDefNode def = (OpDefNode) n.getOperator();
 		// Operator is a B built-in operator
 		if (BBuiltInOPs.contains(def.getName())
-				&& STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) {
+			&& STANDARD_MODULES.contains(def.getSource().getOriginallyDefinedInModuleNode().getName().toString())) {
 			return visitBBuitInsExpression(n);
 		}
 
@@ -895,278 +875,277 @@ public class BAstCreator extends BuiltInOPs
 	private PPredicate visitBBuitInsPredicate(OpApplNode opApplNode) {
 		PPredicate returnNode = null;
 		switch (BBuiltInOPs.getOpcode(opApplNode.getOperator().getName())) {
-		case B_OPCODE_lt: // <
-			returnNode = new ALessPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_lt: // <
+				returnNode = new ALessPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_gt: // >
-			returnNode = new AGreaterPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_gt: // >
+				returnNode = new AGreaterPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_leq: // <=
-			returnNode = new ALessEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_leq: // <=
+				returnNode = new ALessEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_geq: // >=
-			returnNode = new AGreaterEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_geq: // >=
+				returnNode = new AGreaterEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_finite: // IsFiniteSet({1,2,3})
-		{
-			AMemberPredicate member = new AMemberPredicate();
-			member.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			member.setRight(new AFinSubsetExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0])));
-			returnNode = member;
-			break;
-		}
-		case B_OPCODE_true: // TRUE
-			returnNode = new AEqualPredicate(new ABooleanTrueExpression(), new ABooleanTrueExpression());
-			break;
-
-		case B_OPCODE_false: // FALSE
-			returnNode = new AEqualPredicate(new ABooleanFalseExpression(), new ABooleanTrueExpression());
-			break;
-
-		case B_OPCODE_assert: {
-			ADefinitionPredicate pred = new ADefinitionPredicate();
-			pred.setDefLiteral(new TDefLiteralPredicate("ASSERT_TRUE"));
-			ArrayList<PExpression> list = new ArrayList<>();
-			list.add(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			if (opApplNode.getArgs()[1] instanceof StringNode) {
-				StringNode stringNode = (StringNode) opApplNode.getArgs()[1];
-				list.add(new AStringExpression(new TStringLiteral(stringNode.getRep().toString())));
-			} else {
-				list.add(new AStringExpression(new TStringLiteral("Error")));
+			case B_OPCODE_finite: // IsFiniteSet({1,2,3})
+			{
+				AMemberPredicate member = new AMemberPredicate();
+				member.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				member.setRight(new AFinSubsetExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0])));
+				returnNode = member;
+				break;
+			}
+			case B_OPCODE_true: // TRUE
+				returnNode = new AEqualPredicate(new ABooleanTrueExpression(), new ABooleanTrueExpression());
+				break;
+
+			case B_OPCODE_false: // FALSE
+				returnNode = new AEqualPredicate(new ABooleanFalseExpression(), new ABooleanTrueExpression());
+				break;
+
+			case B_OPCODE_assert: {
+				ADefinitionPredicate pred = new ADefinitionPredicate();
+				pred.setDefLiteral(new TDefLiteralPredicate("ASSERT_TRUE"));
+				ArrayList<PExpression> list = new ArrayList<>();
+				list.add(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				if (opApplNode.getArgs()[1] instanceof StringNode) {
+					StringNode stringNode = (StringNode) opApplNode.getArgs()[1];
+					list.add(new AStringExpression(new TStringLiteral(stringNode.getRep().toString())));
+				} else {
+					list.add(new AStringExpression(new TStringLiteral("Error")));
+				}
+				pred.setParameters(list);
+				returnNode = pred;
+				break;
 			}
-			pred.setParameters(list);
-			returnNode = pred;
-			break;
-		}
 		}
 		if (returnNode != null) {
 			return createPositionedNode(returnNode, opApplNode);
 		} else {
 			throw new RuntimeException("Unexpected operator: " + opApplNode.getOperator().getName().toString() + "\n"
-					+ opApplNode.stn.getLocation());
+				+ opApplNode.stn.getLocation());
 		}
 	}
 
 	private PExpression visitBBuitInsExpression(OpApplNode opApplNode) {
 		PExpression returnNode = null;
 		switch (BBuiltInOPs.getOpcode(opApplNode.getOperator().getName())) {
-		case B_OPCODE_bool: // BOOLEAN
-			returnNode = new ABoolSetExpression();
-			break;
-		case B_OPCODE_true: // TRUE
-			returnNode = new ABooleanTrueExpression();
-			break;
-		case B_OPCODE_false: // FALSE
-			returnNode = new ABooleanFalseExpression();
-			break;
-
-		/*
-		 * Standard Module Naturals
-		 */
-		case B_OPCODE_nat: // Nat
-			returnNode = new ANaturalSetExpression();
-			break;
-
-		case B_OPCODE_plus: // +
-			returnNode = new AAddExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_bool: // BOOLEAN
+				returnNode = new ABoolSetExpression();
+				break;
+			case B_OPCODE_true: // TRUE
+				returnNode = new ABooleanTrueExpression();
+				break;
+			case B_OPCODE_false: // FALSE
+				returnNode = new ABooleanFalseExpression();
+				break;
+
+			/*
+			 * Standard Module Naturals
+			 */
+			case B_OPCODE_nat: // Nat
+				returnNode = new ANaturalSetExpression();
+				break;
+
+			case B_OPCODE_plus: // +
+				returnNode = new AAddExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_minus: // -
-			returnNode = new AMinusOrSetSubtractExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_minus: // -
+				returnNode = new AMinusOrSetSubtractExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_times: // *
-			returnNode = new AMultOrCartExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_times: // *
+				returnNode = new AMultOrCartExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_exp: // x^y
-			returnNode = new APowerOfExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_exp: // x^y
+				returnNode = new APowerOfExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_lt: // <
-			returnNode = new AConvertBoolExpression(
+			case B_OPCODE_lt: // <
+				returnNode = new AConvertBoolExpression(
 					new ALessPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
-							visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
-			break;
+						visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
+				break;
 
-		case B_OPCODE_gt: // >
-			returnNode = new AConvertBoolExpression(
+			case B_OPCODE_gt: // >
+				returnNode = new AConvertBoolExpression(
 					new AGreaterPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
-							visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
-			break;
-		case B_OPCODE_leq: // <=
-			returnNode = new AConvertBoolExpression(
+						visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
+				break;
+			case B_OPCODE_leq: // <=
+				returnNode = new AConvertBoolExpression(
 					new ALessEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
-							visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
-			break;
+						visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
+				break;
 
-		case B_OPCODE_geq: // >=
-			returnNode = new AConvertBoolExpression(
+			case B_OPCODE_geq: // >=
+				returnNode = new AConvertBoolExpression(
 					new AGreaterEqualPredicate(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
-							visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
-			break;
-
-		case B_OPCODE_mod: // modulo a % b = a - b* (a/b)
-		{
-			PExpression a = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]);
-			PExpression b = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]);
-			PExpression a2 = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]);
-			PExpression b2 = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]);
-
-			AFlooredDivExpression div = new AFlooredDivExpression(a, b);
-			AMultOrCartExpression mult = new AMultOrCartExpression(b2, div);
-			AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression(a2, mult);
-			returnNode = minus;
-			break;
-		}
+						visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1])));
+				break;
+
+			case B_OPCODE_mod: // modulo a % b = a - b* (a/b)
+			{
+				PExpression a = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]);
+				PExpression b = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]);
+				PExpression a2 = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]);
+				PExpression b2 = visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]);
+
+				AFlooredDivExpression div = new AFlooredDivExpression(a, b);
+				AMultOrCartExpression mult = new AMultOrCartExpression(b2, div);
+				returnNode = new AMinusOrSetSubtractExpression(a2, mult);
+				break;
+			}
 
-		case B_OPCODE_div: // \div
-			AFlooredDivExpression aFlooredDivExpression = new AFlooredDivExpression(
+			case B_OPCODE_div: // \div
+				AFlooredDivExpression aFlooredDivExpression = new AFlooredDivExpression(
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
 
-			setPosition(aFlooredDivExpression, opApplNode);
-			returnNode = aFlooredDivExpression;
-			break;
+				setPosition(aFlooredDivExpression, opApplNode);
+				returnNode = aFlooredDivExpression;
+				break;
 
-		case B_OPCODE_dotdot: // ..
-			returnNode = new AIntervalExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_dotdot: // ..
+				returnNode = new AIntervalExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_int: // Int
-			returnNode = new AIntegerSetExpression();
-			break;
+			case B_OPCODE_int: // Int
+				returnNode = new AIntegerSetExpression();
+				break;
 
-		case B_OPCODE_real: // Real
-			returnNode = new ARealSetExpression();
-			break;
+			case B_OPCODE_real: // Real
+				returnNode = new ARealSetExpression();
+				break;
 
-		case B_OPCODE_uminus: // -x
-			returnNode = new AUnaryMinusExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_uminus: // -x
+				returnNode = new AUnaryMinusExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_card: // Cardinality
-			returnNode = new ACardExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_card: // Cardinality
+				returnNode = new ACardExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_finite: // IsFiniteSet({1,2,3})
-		{
-			AMemberPredicate member = new AMemberPredicate();
-			member.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			member.setRight(new AFinSubsetExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0])));
-			returnNode = new AConvertBoolExpression(member);
-			break;
-		}
+			case B_OPCODE_finite: // IsFiniteSet({1,2,3})
+			{
+				AMemberPredicate member = new AMemberPredicate();
+				member.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				member.setRight(new AFinSubsetExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0])));
+				returnNode = new AConvertBoolExpression(member);
+				break;
+			}
 
-		case B_OPCODE_string: // STRING
-			returnNode = new AStringSetExpression();
-			break;
-		/*
-		 * Standard Module Sequences
-		 */
+			case B_OPCODE_string: // STRING
+				returnNode = new AStringSetExpression();
+				break;
+			/*
+			 * Standard Module Sequences
+			 */
 
-		case B_OPCODE_seq: // Seq(S) - set of sequences
-			returnNode = new ASeqExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_seq: // Seq(S) - set of sequences
+				returnNode = new ASeqExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_len: // length of the sequence
-			returnNode = new ASizeExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_len: // length of the sequence
+				returnNode = new ASizeExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_conc: // s \o s2 - concatenation of s and s2
-			returnNode = new AConcatExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_conc: // s \o s2 - concatenation of s and s2
+				returnNode = new AConcatExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_append: // Append(s,x)
-			returnNode = new AInsertTailExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
+			case B_OPCODE_append: // Append(s,x)
+				returnNode = new AInsertTailExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			break;
+				break;
 
-		case B_OPCODE_head: // Head(s)
-			returnNode = new AFirstExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_head: // Head(s)
+				returnNode = new AFirstExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_tail: // Tail(s)
-			returnNode = new ATailExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			break;
+			case B_OPCODE_tail: // Tail(s)
+				returnNode = new ATailExpression(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				break;
 
-		case B_OPCODE_subseq: { // SubSeq(s,a,b)
-			// %p.(p : 1..(b-a+1)| s(p+a-1))
-			ALambdaExpression lambda = new ALambdaExpression();
-			lambda.setIdentifiers(createIdentifierList("t_"));
-			AMemberPredicate member = new AMemberPredicate();
-			member.setLeft(createIdentifierNode("t_"));
-			AIntervalExpression interval = new AIntervalExpression();
-			interval.setLeftBorder(new AIntegerExpression(new TIntegerLiteral("1")));
-			AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression();
-			minus.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[2]));
-			minus.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			AAddExpression add = new AAddExpression();
-			add.setLeft(minus);
-			add.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
-			interval.setRightBorder(add);
-			member.setRight(interval);
-			lambda.setPredicate(member);
-			AAddExpression add2 = new AAddExpression();
-			add2.setLeft(createIdentifierNode("t_"));
-			add2.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
-			AMinusOrSetSubtractExpression minus2 = new AMinusOrSetSubtractExpression();
-			minus2.setLeft(add2);
-			minus2.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
-			ArrayList<PExpression> params = new ArrayList<PExpression>();
-			params.add(minus2);
-			AFunctionExpression func = new AFunctionExpression();
-			func.setIdentifier(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			func.setParameters(params);
-			lambda.setExpression(func);
-			returnNode = lambda;
-			break;
-		}
-
-		case B_OPCODE_assert: {
-			ADefinitionPredicate pred = new ADefinitionPredicate();
-			pred.setDefLiteral(new TDefLiteralPredicate("ASSERT_TRUE"));
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
-			list.add(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			list.add(new AStringExpression(new TStringLiteral("Error")));
-			pred.setParameters(list);
-			returnNode = new AConvertBoolExpression(pred);
-			break;
-		}
-
-		case B_OPCODE_setsum: {
-			AGeneralSumExpression sum = new AGeneralSumExpression();
-			String variableName = "t_"; // TODO unused identifier name
-			List<PExpression> exprList = createPexpressionList(createIdentifierNode(variableName));
-			sum.setIdentifiers(exprList);
-			AMemberPredicate memberPredicate = new AMemberPredicate();
-			memberPredicate.setLeft(createIdentifierNode(variableName));
-			memberPredicate.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
-			sum.setPredicates(memberPredicate);
-			sum.setExpression(createIdentifierNode(variableName));
-			returnNode = sum;
-			break;
-		}
+			case B_OPCODE_subseq: { // SubSeq(s,a,b)
+				// %p.(p : 1..(b-a+1)| s(p+a-1))
+				ALambdaExpression lambda = new ALambdaExpression();
+				lambda.setIdentifiers(createIdentifierList("t_"));
+				AMemberPredicate member = new AMemberPredicate();
+				member.setLeft(createIdentifierNode("t_"));
+				AIntervalExpression interval = new AIntervalExpression();
+				interval.setLeftBorder(new AIntegerExpression(new TIntegerLiteral("1")));
+				AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression();
+				minus.setLeft(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[2]));
+				minus.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
+				AAddExpression add = new AAddExpression();
+				add.setLeft(minus);
+				add.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
+				interval.setRightBorder(add);
+				member.setRight(interval);
+				lambda.setPredicate(member);
+				AAddExpression add2 = new AAddExpression();
+				add2.setLeft(createIdentifierNode("t_"));
+				add2.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[1]));
+				AMinusOrSetSubtractExpression minus2 = new AMinusOrSetSubtractExpression();
+				minus2.setLeft(add2);
+				minus2.setRight(new AIntegerExpression(new TIntegerLiteral("1")));
+				ArrayList<PExpression> params = new ArrayList<PExpression>();
+				params.add(minus2);
+				AFunctionExpression func = new AFunctionExpression();
+				func.setIdentifier(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				func.setParameters(params);
+				lambda.setExpression(func);
+				returnNode = lambda;
+				break;
+			}
+
+			case B_OPCODE_assert: {
+				ADefinitionPredicate pred = new ADefinitionPredicate();
+				pred.setDefLiteral(new TDefLiteralPredicate("ASSERT_TRUE"));
+				ArrayList<PExpression> list = new ArrayList<PExpression>();
+				list.add(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				list.add(new AStringExpression(new TStringLiteral("Error")));
+				pred.setParameters(list);
+				returnNode = new AConvertBoolExpression(pred);
+				break;
+			}
+
+			case B_OPCODE_setsum: {
+				AGeneralSumExpression sum = new AGeneralSumExpression();
+				String variableName = "t_"; // TODO unused identifier name
+				List<PExpression> exprList = createPexpressionList(createIdentifierNode(variableName));
+				sum.setIdentifiers(exprList);
+				AMemberPredicate memberPredicate = new AMemberPredicate();
+				memberPredicate.setLeft(createIdentifierNode(variableName));
+				memberPredicate.setRight(visitExprOrOpArgNodeExpression(opApplNode.getArgs()[0]));
+				sum.setPredicates(memberPredicate);
+				sum.setExpression(createIdentifierNode(variableName));
+				returnNode = sum;
+				break;
+			}
 		}
 		if (returnNode != null) {
 			return createPositionedNode(returnNode, opApplNode);
 		} else {
 			throw new RuntimeException("Unexpected operator: " + opApplNode.getOperator().getName().toString() + "\n"
-					+ opApplNode.stn.getLocation());
+				+ opApplNode.stn.getLocation());
 		}
 
 	}
@@ -1193,590 +1172,590 @@ public class BAstCreator extends BuiltInOPs
 	private PExpression visitBuiltInKindExpression(OpApplNode n) {
 		switch (getOpCode(n.getOperator().getName())) {
 
-		case OPCODE_land: // \land
-		{
-			AConjunctPredicate conjunction = new AConjunctPredicate();
-			conjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			return new AConvertBoolExpression(conjunction);
-		}
+			case OPCODE_land: // \land
+			{
+				AConjunctPredicate conjunction = new AConjunctPredicate();
+				conjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
+				return new AConvertBoolExpression(conjunction);
+			}
 
-		case OPCODE_equiv: // \equiv
-			AEquivalencePredicate equiv = new AEquivalencePredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
+			case OPCODE_equiv: // \equiv
+				AEquivalencePredicate equiv = new AEquivalencePredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
 					visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			return new AConvertBoolExpression(equiv);
+				return new AConvertBoolExpression(equiv);
 
-		case OPCODE_implies: // =>
-			AImplicationPredicate impl = new AImplicationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
+			case OPCODE_implies: // =>
+				AImplicationPredicate impl = new AImplicationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
 					visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			new AConvertBoolExpression(impl);
+				new AConvertBoolExpression(impl);
 
-		case OPCODE_cl: // $ConjList
-		{
-			List<PPredicate> list = new ArrayList<PPredicate>();
-			for (int i = 0; i < n.getArgs().length; i++) {
-				list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+			case OPCODE_cl: // $ConjList
+			{
+				List<PPredicate> list = new ArrayList<PPredicate>();
+				for (int i = 0; i < n.getArgs().length; i++) {
+					list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+				}
+				return new AConvertBoolExpression(createConjunction(list));
 			}
-			return new AConvertBoolExpression(createConjunction(list));
-		}
 
-		case OPCODE_dl: // $DisjList
-		{
-			List<PPredicate> list = new ArrayList<PPredicate>();
-			for (int i = 0; i < n.getArgs().length; i++) {
-				list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+			case OPCODE_dl: // $DisjList
+			{
+				List<PPredicate> list = new ArrayList<PPredicate>();
+				for (int i = 0; i < n.getArgs().length; i++) {
+					list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+				}
+				return new AConvertBoolExpression(createDisjunction(list));
 			}
-			return new AConvertBoolExpression(createDisjunction(list));
-		}
 
-		case OPCODE_lor: // \/
-		{
-			ADisjunctPredicate disjunction = new ADisjunctPredicate();
-			disjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			disjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			return new AConvertBoolExpression(disjunction);
-		}
+			case OPCODE_lor: // \/
+			{
+				ADisjunctPredicate disjunction = new ADisjunctPredicate();
+				disjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				disjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
+				return new AConvertBoolExpression(disjunction);
+			}
 
-		case OPCODE_lnot: // \lnot
-			return new AConvertBoolExpression(new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0])));
+			case OPCODE_lnot: // \lnot
+				return new AConvertBoolExpression(new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0])));
 
-		case OPCODE_in: // \in
-		{
-			AMemberPredicate memberPredicate = new AMemberPredicate();
-			memberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			memberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return new AConvertBoolExpression(memberPredicate);
-		}
+			case OPCODE_in: // \in
+			{
+				AMemberPredicate memberPredicate = new AMemberPredicate();
+				memberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				memberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return new AConvertBoolExpression(memberPredicate);
+			}
 
-		case OPCODE_notin: // \notin
-		{
-			ANotMemberPredicate notMemberPredicate = new ANotMemberPredicate();
-			notMemberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			notMemberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return new AConvertBoolExpression(notMemberPredicate);
-		}
+			case OPCODE_notin: // \notin
+			{
+				ANotMemberPredicate notMemberPredicate = new ANotMemberPredicate();
+				notMemberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				notMemberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return new AConvertBoolExpression(notMemberPredicate);
+			}
 
-		case OPCODE_eq: { // =
-			AEqualPredicate equal = new AEqualPredicate();
-			equal.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			equal.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return new AConvertBoolExpression(equal);
-		}
+			case OPCODE_eq: { // =
+				AEqualPredicate equal = new AEqualPredicate();
+				equal.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				equal.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return new AConvertBoolExpression(equal);
+			}
 
-		case OPCODE_noteq: // /=
-		{
-			ANotEqualPredicate notEqual = new ANotEqualPredicate();
-			notEqual.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			notEqual.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return new AConvertBoolExpression(notEqual);
-		}
+			case OPCODE_noteq: // /=
+			{
+				ANotEqualPredicate notEqual = new ANotEqualPredicate();
+				notEqual.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				notEqual.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return new AConvertBoolExpression(notEqual);
+			}
 
-		/*
-		 * Set Operators
-		 */
+			/*
+			 * Set Operators
+			 */
 
-		case OPCODE_se: // SetEnumeration {..}
-		{
-			if (n.getArgs().length == 0) {
-				return new AEmptySetExpression();
-			} else {
-				List<PExpression> list = new ArrayList<PExpression>();
+			case OPCODE_se: // SetEnumeration {..}
+			{
+				if (n.getArgs().length == 0) {
+					return new AEmptySetExpression();
+				} else {
+					List<PExpression> list = new ArrayList<PExpression>();
 
-				for (int i = 0; i < n.getArgs().length; i++) {
-					list.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
+					for (int i = 0; i < n.getArgs().length; i++) {
+						list.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
+					}
+					return new ASetExtensionExpression(list);
 				}
-				return new ASetExtensionExpression(list);
 			}
-		}
-
-		case 0: {
-			return visitBBuitInsExpression(n);
-		}
-
-		case OPCODE_setdiff: // set difference
-		{
-			AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression();
-			minus.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			minus.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return minus;
-		}
 
-		case OPCODE_cup: // set union
-		{
-			AUnionExpression union = new AUnionExpression();
-			union.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			union.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return union;
-		}
+			case 0: {
+				return visitBBuitInsExpression(n);
+			}
 
-		case OPCODE_cap: // set intersection
-		{
-			AIntersectionExpression inter = new AIntersectionExpression();
-			inter.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			inter.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return inter;
-		}
+			case OPCODE_setdiff: // set difference
+			{
+				AMinusOrSetSubtractExpression minus = new AMinusOrSetSubtractExpression();
+				minus.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				minus.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return minus;
+			}
 
-		case OPCODE_subset: // SUBSET
-		{
-			APowSubsetExpression pow = new APowSubsetExpression();
-			pow.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			return pow;
-		}
+			case OPCODE_cup: // set union
+			{
+				AUnionExpression union = new AUnionExpression();
+				union.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				union.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return union;
+			}
 
-		case OPCODE_union: // Union - Union{{1},{2}}
-		{
-			AGeneralUnionExpression union = new AGeneralUnionExpression();
-			union.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			return union;
-		}
+			case OPCODE_cap: // set intersection
+			{
+				AIntersectionExpression inter = new AIntersectionExpression();
+				inter.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				inter.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return inter;
+			}
 
-		case OPCODE_subseteq: // \subseteq {1,2} <: {1,2,3}
-		{
-			ASubsetPredicate subset = new ASubsetPredicate();
-			subset.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			subset.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			return new AConvertBoolExpression(subset);
-		}
+			case OPCODE_subset: // SUBSET
+			{
+				APowSubsetExpression pow = new APowSubsetExpression();
+				pow.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				return pow;
+			}
 
-		case OPCODE_sso: { // $SubsetOf Represents {x \in S : P}
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			List<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < params[0].length; i++) {
-				FormalParamNode p = params[0][i];
-				list.add(createIdentifierNode(p));
+			case OPCODE_union: // Union - Union{{1},{2}}
+			{
+				AGeneralUnionExpression union = new AGeneralUnionExpression();
+				union.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				return union;
 			}
-			AComprehensionSetExpression compre = new AComprehensionSetExpression();
-			compre.setIdentifiers(list);
-			PPredicate typing = visitBoundsOfFunctionsVariables(n);
-			AConjunctPredicate conj = new AConjunctPredicate(typing, visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			compre.setPredicates(conj);
-			return compre;
-		}
 
-		case OPCODE_soa: { // $SetOfAll Represents {e : p1 \in S, p2,p3 \in S2}
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			List<PExpression> idList = createListOfIdentifier(params);
-			List<PPredicate> predList = new ArrayList<PPredicate>();
+			case OPCODE_subseteq: // \subseteq {1,2} <: {1,2,3}
+			{
+				ASubsetPredicate subset = new ASubsetPredicate();
+				subset.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				subset.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				return new AConvertBoolExpression(subset);
+			}
 
-			predList.add(visitBoundsOfLocalVariables(n));
-			final String nameOfTempVariable = "t_";
-			AEqualPredicate equals = new AEqualPredicate();
-			equals.setLeft(createIdentifierNode(nameOfTempVariable));
-			equals.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			// predList.add(equals);
-			AExistsPredicate exist = new AExistsPredicate();
-			exist.setIdentifiers(idList);
-			exist.setPredicate(createConjunction(predList));
-
-			AComprehensionSetExpression compre = new AComprehensionSetExpression();
-			List<PExpression> tList = new ArrayList<PExpression>();
-			tList.add(createIdentifierNode(nameOfTempVariable));
-			compre.setIdentifiers(tList);
-			compre.setPredicates(exist);
-
-			// UNION(p1,p2,p3).(P | {e})
-			AQuantifiedUnionExpression union = new AQuantifiedUnionExpression();
-			union.setIdentifiers(idList);
-			union.setPredicates(createConjunction(predList));
-			ASetExtensionExpression set = new ASetExtensionExpression();
-			List<PExpression> list = new ArrayList<PExpression>();
-			list.add(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			set.setExpressions(list);
-			union.setExpression(set);
+			case OPCODE_sso: { // $SubsetOf Represents {x \in S : P}
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				List<PExpression> list = new ArrayList<PExpression>();
+				for (int i = 0; i < params[0].length; i++) {
+					FormalParamNode p = params[0][i];
+					list.add(createIdentifierNode(p));
+				}
+				AComprehensionSetExpression compre = new AComprehensionSetExpression();
+				compre.setIdentifiers(list);
+				PPredicate typing = visitBoundsOfFunctionsVariables(n);
+				AConjunctPredicate conj = new AConjunctPredicate(typing, visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				compre.setPredicates(conj);
+				return compre;
+			}
 
-			return union;
-		}
+			case OPCODE_soa: { // $SetOfAll Represents {e : p1 \in S, p2,p3 \in S2}
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				List<PExpression> idList = createListOfIdentifier(params);
+				List<PPredicate> predList = new ArrayList<PPredicate>();
+
+				predList.add(visitBoundsOfLocalVariables(n));
+				final String nameOfTempVariable = "t_";
+				AEqualPredicate equals = new AEqualPredicate();
+				equals.setLeft(createIdentifierNode(nameOfTempVariable));
+				equals.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				// predList.add(equals);
+				AExistsPredicate exist = new AExistsPredicate();
+				exist.setIdentifiers(idList);
+				exist.setPredicate(createConjunction(predList));
+
+				AComprehensionSetExpression compre = new AComprehensionSetExpression();
+				List<PExpression> tList = new ArrayList<PExpression>();
+				tList.add(createIdentifierNode(nameOfTempVariable));
+				compre.setIdentifiers(tList);
+				compre.setPredicates(exist);
+
+				// UNION(p1,p2,p3).(P | {e})
+				AQuantifiedUnionExpression union = new AQuantifiedUnionExpression();
+				union.setIdentifiers(idList);
+				union.setPredicates(createConjunction(predList));
+				ASetExtensionExpression set = new ASetExtensionExpression();
+				List<PExpression> list = new ArrayList<PExpression>();
+				list.add(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				set.setExpressions(list);
+				union.setExpression(set);
 
-		case OPCODE_nrfs:
-		case OPCODE_fc: // Represents [x \in S |-> e].
-		case OPCODE_rfs: {
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			List<PExpression> idList = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				for (int j = 0; j < params[i].length; j++) {
-					FormalParamNode p = params[i][j];
-					idList.add(createIdentifierNode(p));
-				}
+				return union;
 			}
-			boolean[] isTuple = n.isBdedQuantATuple();
-			ALambdaExpression lambda = new ALambdaExpression();
-			List<PExpression> idList2 = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				if (isTuple[i] && i > 0) {
-					StringBuilder sb = new StringBuilder();
-					for (int j = 0; j < params[i].length; j++) {
-						FormalParamNode p = params[i][j];
-						sb.append(p.getName().toString());
 
-					}
-					idList2.add(createIdentifierNode(sb.toString()));
-				} else {
+			case OPCODE_nrfs:
+			case OPCODE_fc: // Represents [x \in S |-> e].
+			case OPCODE_rfs: {
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				List<PExpression> idList = new ArrayList<PExpression>();
+				for (int i = 0; i < params.length; i++) {
 					for (int j = 0; j < params[i].length; j++) {
 						FormalParamNode p = params[i][j];
-						idList2.add(createIdentifierNode(p.getName().toString()));
+						idList.add(createIdentifierNode(p));
 					}
 				}
-			}
-
-			lambda.setIdentifiers(idList2);
-			lambda.setPredicate(visitBoundsOfFunctionsVariables(n));
-			lambda.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-
-			if (recursiveFunctionHandler.isRecursiveFunction(n)) {
+				boolean[] isTuple = n.isBdedQuantATuple();
+				ALambdaExpression lambda = new ALambdaExpression();
+				List<PExpression> idList2 = new ArrayList<PExpression>();
+				for (int i = 0; i < params.length; i++) {
+					if (isTuple[i] && i > 0) {
+						StringBuilder sb = new StringBuilder();
+						for (int j = 0; j < params[i].length; j++) {
+							FormalParamNode p = params[i][j];
+							sb.append(p.getName().toString());
 
-				ArrayList<SymbolNode> externParams = recursiveFunctionHandler.getAdditionalParams(n);
-				if (externParams.size() > 0) {
-					ALambdaExpression lambda2 = new ALambdaExpression();
-					ArrayList<PExpression> shiftedParams = new ArrayList<PExpression>();
-					List<PPredicate> predList2 = new ArrayList<PPredicate>();
-					for (SymbolNode p : externParams) {
-						shiftedParams.add(createIdentifierNode(p));
-
-						AMemberPredicate member = new AMemberPredicate();
-						member.setLeft(createIdentifierNode(p));
-						TLAType t = (TLAType) p.getToolObject(TYPE_ID);
-						member.setRight(t.getBNode());
-						predList2.add(member);
+						}
+						idList2.add(createIdentifierNode(sb.toString()));
+					} else {
+						for (int j = 0; j < params[i].length; j++) {
+							FormalParamNode p = params[i][j];
+							idList2.add(createIdentifierNode(p.getName().toString()));
+						}
 					}
-					lambda2.setIdentifiers(shiftedParams);
-					lambda2.setPredicate(createConjunction(predList2));
-					lambda2.setExpression(lambda);
-					return lambda2;
 				}
-			}
-			return lambda;
-		}
-
-		case OPCODE_fa: { // f[1]
-			TLAType t = (TLAType) n.getArgs()[0].getToolObject(TYPE_ID);
-			if (t instanceof TupleType) {
-				NumeralNode num = (NumeralNode) n.getArgs()[1];
-				int field = num.val();
-				PExpression pair = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
-				return createProjectionFunction(pair, field, t);
-			} else {
-				AFunctionExpression func = new AFunctionExpression();
-				func.setIdentifier(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-				List<PExpression> paramList = new ArrayList<PExpression>();
 
-				ExprOrOpArgNode dom = n.getArgs()[1];
-				if (dom instanceof OpApplNode
-						&& ((OpApplNode) dom).getOperator().getName().toString().equals("$Tuple")) {
-					OpApplNode domOpAppl = (OpApplNode) dom;
-					if (domOpAppl.getArgs().length == 1) {
-						List<PExpression> list = new ArrayList<PExpression>();
-						list.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[0]));
-						ASequenceExtensionExpression seq = new ASequenceExtensionExpression(list);
-						paramList.add(seq);
-					} else {
-						for (int i = 0; i < domOpAppl.getArgs().length; i++) {
-							paramList.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[i]));
+				lambda.setIdentifiers(idList2);
+				lambda.setPredicate(visitBoundsOfFunctionsVariables(n));
+				lambda.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+
+				if (recursiveFunctionHandler.isRecursiveFunction(n)) {
+
+					ArrayList<SymbolNode> externParams = recursiveFunctionHandler.getAdditionalParams(n);
+					if (externParams.size() > 0) {
+						ALambdaExpression lambda2 = new ALambdaExpression();
+						ArrayList<PExpression> shiftedParams = new ArrayList<PExpression>();
+						List<PPredicate> predList2 = new ArrayList<PPredicate>();
+						for (SymbolNode p : externParams) {
+							shiftedParams.add(createIdentifierNode(p));
+
+							AMemberPredicate member = new AMemberPredicate();
+							member.setLeft(createIdentifierNode(p));
+							TLAType t = (TLAType) p.getToolObject(TYPE_ID);
+							member.setRight(t.getBNode());
+							predList2.add(member);
 						}
+						lambda2.setIdentifiers(shiftedParams);
+						lambda2.setPredicate(createConjunction(predList2));
+						lambda2.setExpression(lambda);
+						return lambda2;
 					}
-
-				} else {
-					paramList.add(visitExprOrOpArgNodeExpression(dom));
 				}
-				func.setParameters(paramList);
-				return func;
+				return lambda;
 			}
 
-		}
-
-		case OPCODE_domain:
-			return new ADomainExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+			case OPCODE_fa: { // f[1]
+				TLAType t = (TLAType) n.getArgs()[0].getToolObject(TYPE_ID);
+				if (t instanceof TupleType) {
+					NumeralNode num = (NumeralNode) n.getArgs()[1];
+					int field = num.val();
+					PExpression pair = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
+					return createProjectionFunction(pair, field, t);
+				} else {
+					AFunctionExpression func = new AFunctionExpression();
+					func.setIdentifier(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+					List<PExpression> paramList = new ArrayList<PExpression>();
 
-		case OPCODE_sof: // [ A -> B]
-			return new ATotalFunctionExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]),
-					visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+					ExprOrOpArgNode dom = n.getArgs()[1];
+					if (dom instanceof OpApplNode
+						&& ((OpApplNode) dom).getOperator().getName().toString().equals("$Tuple")) {
+						OpApplNode domOpAppl = (OpApplNode) dom;
+						if (domOpAppl.getArgs().length == 1) {
+							List<PExpression> list = new ArrayList<PExpression>();
+							list.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[0]));
+							ASequenceExtensionExpression seq = new ASequenceExtensionExpression(list);
+							paramList.add(seq);
+						} else {
+							for (int i = 0; i < domOpAppl.getArgs().length; i++) {
+								paramList.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[i]));
+							}
+						}
 
-		case OPCODE_tup: { // $Tuple
-			List<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < n.getArgs().length; i++) {
-				list.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
-			}
-			TLAType t = (TLAType) n.getToolObject(TYPE_ID);
-			if (t instanceof TupleType) {
-				return new ACoupleExpression(list);
-			} else {
-				if (list.size() == 0) {
-					return new AEmptySequenceExpression();
-				} else {
-					return new ASequenceExtensionExpression(list);
+					} else {
+						paramList.add(visitExprOrOpArgNodeExpression(dom));
+					}
+					func.setParameters(paramList);
+					return func;
 				}
-			}
-		}
 
-		case OPCODE_cp: // $CartesianProd A \X B \X C
-		{
-			PExpression first = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
-			for (int i = 1; i < n.getArgs().length; i++) {
-				PExpression second = visitExprOrOpArgNodeExpression(n.getArgs()[i]);
-				first = new AMultOrCartExpression(first, second);
 			}
-			return first;
-		}
 
-		case OPCODE_sor: { // $SetOfRcds [L1 : e1, L2 : e2]
-			SetType pow = (SetType) n.getToolObject(TYPE_ID);
-			StructType struct = (StructType) pow.getSubType();
-			ExprOrOpArgNode[] args = n.getArgs();
-			Hashtable<String, PExpression> pairTable = new Hashtable<String, PExpression>();
-			for (int i = 0; i < args.length; i++) {
-				OpApplNode pair = (OpApplNode) args[i];
-				StringNode stringNode = (StringNode) pair.getArgs()[0];
-				pairTable.put(stringNode.getRep().toString(), visitExprOrOpArgNodeExpression(pair.getArgs()[1]));
+			case OPCODE_domain:
+				return new ADomainExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
 
-			}
-			List<PRecEntry> recList = new ArrayList<PRecEntry>();
-			if (struct.isExtensible()) {
-				for (int i = 0; i < struct.getFields().size(); i++) {
-					String fieldName = struct.getFields().get(i); // name
-					AIdentifierExpression field = createIdentifierNode(fieldName);
-					ARecEntry rec = new ARecEntry();
-					rec.setIdentifier(field);
-					AMultOrCartExpression cart = new AMultOrCartExpression();
-					cart.setLeft(new ABoolSetExpression());
-					if (pairTable.containsKey(fieldName)) {
-						cart.setRight(pairTable.get(fieldName));
-					} else {
-						cart.setRight(struct.getType(fieldName).getBNode());
-					}
-					rec.setValue(new APowSubsetExpression(cart));
-					recList.add(rec);
+			case OPCODE_sof: // [ A -> B]
+				return new ATotalFunctionExpression(visitExprOrOpArgNodeExpression(n.getArgs()[0]),
+					visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+
+			case OPCODE_tup: { // $Tuple
+				List<PExpression> list = new ArrayList<PExpression>();
+				for (int i = 0; i < n.getArgs().length; i++) {
+					list.add(visitExprOrOpArgNodeExpression(n.getArgs()[i]));
 				}
-			} else {
-				for (int i = 0; i < struct.getFields().size(); i++) {
-					String fieldName = struct.getFields().get(i);
-					AIdentifierExpression field = createIdentifierNode(fieldName);
-					ARecEntry rec = new ARecEntry();
-					rec.setIdentifier(field);
-					if (pairTable.containsKey(fieldName)) {
-						rec.setValue(pairTable.get(fieldName));
+				TLAType t = (TLAType) n.getToolObject(TYPE_ID);
+				if (t instanceof TupleType) {
+					return new ACoupleExpression(list);
+				} else {
+					if (list.isEmpty()) {
+						return new AEmptySequenceExpression();
 					} else {
-						rec.setValue(struct.getType(fieldName).getBNode());
+						return new ASequenceExtensionExpression(list);
 					}
-					recList.add(rec);
 				}
+			}
 
+			case OPCODE_cp: // $CartesianProd A \X B \X C
+			{
+				PExpression first = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
+				for (int i = 1; i < n.getArgs().length; i++) {
+					PExpression second = visitExprOrOpArgNodeExpression(n.getArgs()[i]);
+					first = new AMultOrCartExpression(first, second);
+				}
+				return first;
 			}
-			return new AStructExpression(recList);
-		}
 
-		case OPCODE_rc: { // [h_1 |-> 1, h_2 |-> 2]
-			StructType struct = (StructType) n.getToolObject(TYPE_ID);
-			if (struct.isExtensible()) {
-				Hashtable<String, PExpression> pairTable = new Hashtable<String, PExpression>();
+			case OPCODE_sor: { // $SetOfRcds [L1 : e1, L2 : e2]
+				SetType pow = (SetType) n.getToolObject(TYPE_ID);
+				StructType struct = (StructType) pow.getSubType();
 				ExprOrOpArgNode[] args = n.getArgs();
-				for (int i = 0; i < args.length; i++) {
-					OpApplNode pair = (OpApplNode) args[i];
+				Hashtable<String, PExpression> pairTable = new Hashtable<>();
+				for (ExprOrOpArgNode arg : args) {
+					OpApplNode pair = (OpApplNode) arg;
 					StringNode stringNode = (StringNode) pair.getArgs()[0];
 					pairTable.put(stringNode.getRep().toString(), visitExprOrOpArgNodeExpression(pair.getArgs()[1]));
+
 				}
-				List<PRecEntry> recList = new ArrayList<PRecEntry>();
-				for (int i = 0; i < struct.getFields().size(); i++) {
-					String fieldName = struct.getFields().get(i);
-					AIdentifierExpression field = createIdentifierNode(fieldName);
-					ARecEntry rec = new ARecEntry();
-					rec.setIdentifier(field);
-					if (pairTable.containsKey(fieldName)) {
-
-						ACoupleExpression couple = new ACoupleExpression();
-						List<PExpression> coupleList = new ArrayList<PExpression>();
-						coupleList.add(new ABooleanTrueExpression());
-						coupleList.add(pairTable.get(fieldName));
-						couple.setList(coupleList);
-						ASetExtensionExpression set = new ASetExtensionExpression(createPexpressionList(couple));
-						rec.setValue(set);
-					} else {
-						AEmptySetExpression emptySet = new AEmptySetExpression();
-						rec.setValue(emptySet);
+				List<PRecEntry> recList = new ArrayList<>();
+				if (struct.isExtensible()) {
+					for (int i = 0; i < struct.getFields().size(); i++) {
+						String fieldName = struct.getFields().get(i); // name
+						AIdentifierExpression field = createIdentifierNode(fieldName);
+						ARecEntry rec = new ARecEntry();
+						rec.setIdentifier(field);
+						AMultOrCartExpression cart = new AMultOrCartExpression();
+						cart.setLeft(new ABoolSetExpression());
+						if (pairTable.containsKey(fieldName)) {
+							cart.setRight(pairTable.get(fieldName));
+						} else {
+							cart.setRight(struct.getType(fieldName).getBNode());
+						}
+						rec.setValue(new APowSubsetExpression(cart));
+						recList.add(rec);
+					}
+				} else {
+					for (int i = 0; i < struct.getFields().size(); i++) {
+						String fieldName = struct.getFields().get(i);
+						AIdentifierExpression field = createIdentifierNode(fieldName);
+						ARecEntry rec = new ARecEntry();
+						rec.setIdentifier(field);
+						if (pairTable.containsKey(fieldName)) {
+							rec.setValue(pairTable.get(fieldName));
+						} else {
+							rec.setValue(struct.getType(fieldName).getBNode());
+						}
+						recList.add(rec);
 					}
-					recList.add(rec);
-				}
-				return new ARecExpression(recList);
 
-			} else {
-				Hashtable<String, PExpression> pairTable = new Hashtable<String, PExpression>();
-				ExprOrOpArgNode[] args = n.getArgs();
-				for (int i = 0; i < args.length; i++) {
-					OpApplNode pair = (OpApplNode) args[i];
-					StringNode stringNode = (StringNode) pair.getArgs()[0];
-					pairTable.put(stringNode.getRep().toString(), visitExprOrOpArgNodeExpression(pair.getArgs()[1]));
 				}
-				List<PRecEntry> recList = new ArrayList<PRecEntry>();
-				for (int i = 0; i < struct.getFields().size(); i++) {
-					String fieldName = struct.getFields().get(i);
-					AIdentifierExpression field = createIdentifierNode(fieldName);
-					ARecEntry rec = new ARecEntry();
-					rec.setIdentifier(field);
-					if (pairTable.containsKey(fieldName)) {
-						rec.setValue(pairTable.get(fieldName));
-					} else {
-						// this struct is extensible
-						throw new NotImplementedException("Missing case handling extensible structs.");
+				return new AStructExpression(recList);
+			}
+
+			case OPCODE_rc: { // [h_1 |-> 1, h_2 |-> 2]
+				StructType struct = (StructType) n.getToolObject(TYPE_ID);
+				if (struct.isExtensible()) {
+					Hashtable<String, PExpression> pairTable = new Hashtable<>();
+					ExprOrOpArgNode[] args = n.getArgs();
+					for (ExprOrOpArgNode arg : args) {
+						OpApplNode pair = (OpApplNode) arg;
+						StringNode stringNode = (StringNode) pair.getArgs()[0];
+						pairTable.put(stringNode.getRep().toString(), visitExprOrOpArgNodeExpression(pair.getArgs()[1]));
 					}
-					recList.add(rec);
+					List<PRecEntry> recList = new ArrayList<>();
+					for (int i = 0; i < struct.getFields().size(); i++) {
+						String fieldName = struct.getFields().get(i);
+						AIdentifierExpression field = createIdentifierNode(fieldName);
+						ARecEntry rec = new ARecEntry();
+						rec.setIdentifier(field);
+						if (pairTable.containsKey(fieldName)) {
+
+							ACoupleExpression couple = new ACoupleExpression();
+							List<PExpression> coupleList = new ArrayList<>();
+							coupleList.add(new ABooleanTrueExpression());
+							coupleList.add(pairTable.get(fieldName));
+							couple.setList(coupleList);
+							ASetExtensionExpression set = new ASetExtensionExpression(createPexpressionList(couple));
+							rec.setValue(set);
+						} else {
+							AEmptySetExpression emptySet = new AEmptySetExpression();
+							rec.setValue(emptySet);
+						}
+						recList.add(rec);
+					}
+					return new ARecExpression(recList);
+
+				} else {
+					Hashtable<String, PExpression> pairTable = new Hashtable<>();
+					ExprOrOpArgNode[] args = n.getArgs();
+					for (ExprOrOpArgNode arg : args) {
+						OpApplNode pair = (OpApplNode) arg;
+						StringNode stringNode = (StringNode) pair.getArgs()[0];
+						pairTable.put(stringNode.getRep().toString(), visitExprOrOpArgNodeExpression(pair.getArgs()[1]));
+					}
+					List<PRecEntry> recList = new ArrayList<>();
+					for (int i = 0; i < struct.getFields().size(); i++) {
+						String fieldName = struct.getFields().get(i);
+						AIdentifierExpression field = createIdentifierNode(fieldName);
+						ARecEntry rec = new ARecEntry();
+						rec.setIdentifier(field);
+						if (pairTable.containsKey(fieldName)) {
+							rec.setValue(pairTable.get(fieldName));
+						} else {
+							// this struct is extensible
+							throw new NotImplementedException("Missing case handling extensible structs.");
+						}
+						recList.add(rec);
+					}
+					return new ARecExpression(recList);
 				}
-				return new ARecExpression(recList);
-			}
 
-		}
+			}
 
-		case OPCODE_rs: { // $RcdSelect r.c
-			StructType struct = (StructType) n.getArgs()[0].getToolObject(TYPE_ID);
-			if (struct.isExtensible()) {
-				ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
-				rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-				StringNode stringNode = (StringNode) n.getArgs()[1];
-				rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
-				AFunctionExpression funcCall = new AFunctionExpression();
-				funcCall.setIdentifier(rcdSelect);
-				funcCall.setParameters(createPexpressionList(new ABooleanTrueExpression()));
-				return funcCall;
-			} else {
-				ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
-				rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-				StringNode stringNode = (StringNode) n.getArgs()[1];
-				rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
-				return rcdSelect;
+			case OPCODE_rs: { // $RcdSelect r.c
+				StructType struct = (StructType) n.getArgs()[0].getToolObject(TYPE_ID);
+				if (struct.isExtensible()) {
+					ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
+					rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+					StringNode stringNode = (StringNode) n.getArgs()[1];
+					rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
+					AFunctionExpression funcCall = new AFunctionExpression();
+					funcCall.setIdentifier(rcdSelect);
+					funcCall.setParameters(createPexpressionList(new ABooleanTrueExpression()));
+					return funcCall;
+				} else {
+					ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
+					rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+					StringNode stringNode = (StringNode) n.getArgs()[1];
+					rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
+					return rcdSelect;
+				}
 			}
-		}
 
-		case OPCODE_prime: // prime
-		{
-			OpApplNode node = (OpApplNode) n.getArgs()[0];
-			return createIdentifierNode(node.getOperator().getName().toString() + "_n");
-		}
+			case OPCODE_prime: // prime
+			{
+				OpApplNode node = (OpApplNode) n.getArgs()[0];
+				return createIdentifierNode(node.getOperator().getName().toString() + "_n");
+			}
 
-		case OPCODE_ite: { // IF THEN ELSE
-			List<PExpression> Elsifs = new ArrayList<>();
-			AIfThenElseExpression ifthenElse = new AIfThenElseExpression(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
+			case OPCODE_ite: { // IF THEN ELSE
+				List<PExpression> Elsifs = new ArrayList<>();
+				AIfThenElseExpression ifthenElse = new AIfThenElseExpression(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
 					visitExprOrOpArgNodeExpression(n.getArgs()[1]), Elsifs,
 					visitExprOrOpArgNodeExpression(n.getArgs()[2]));
-			return ifthenElse;
-
-			// ALambdaExpression lambda1 = new ALambdaExpression();
-			// lambda1.setIdentifiers(createIdentifierList("t_"));
-			// AEqualPredicate eq1 = new AEqualPredicate(
-			// createIdentifierNode("t_"), new AIntegerExpression(
-			// new TIntegerLiteral("0")));
-			// AConjunctPredicate c1 = new AConjunctPredicate();
-			// c1.setLeft(eq1);
-			// c1.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			// lambda1.setPredicate(c1);
-			// lambda1.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			//
-			// ALambdaExpression lambda2 = new ALambdaExpression();
-			// lambda2.setIdentifiers(createIdentifierList("t_"));
-			// AEqualPredicate eq2 = new AEqualPredicate(
-			// createIdentifierNode("t_"), new AIntegerExpression(
-			// new TIntegerLiteral("0")));
-			// AConjunctPredicate c2 = new AConjunctPredicate();
-			// c2.setLeft(eq2);
-			// ANegationPredicate not = new ANegationPredicate(
-			// visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			// c2.setRight(not);
-			// lambda2.setPredicate(c2);
-			// lambda2.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[2]));
-			//
-			// AUnionExpression union = new AUnionExpression(lambda1, lambda2);
-			// AFunctionExpression funCall = new AFunctionExpression();
-			// funCall.setIdentifier(union);
-			// List<PExpression> list = new ArrayList<PExpression>();
-			// list.add(new AIntegerExpression(new TIntegerLiteral("0")));
-			// funCall.setParameters(list);
-			// return funCall;
-		}
+				return ifthenElse;
+
+				// ALambdaExpression lambda1 = new ALambdaExpression();
+				// lambda1.setIdentifiers(createIdentifierList("t_"));
+				// AEqualPredicate eq1 = new AEqualPredicate(
+				// createIdentifierNode("t_"), new AIntegerExpression(
+				// new TIntegerLiteral("0")));
+				// AConjunctPredicate c1 = new AConjunctPredicate();
+				// c1.setLeft(eq1);
+				// c1.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				// lambda1.setPredicate(c1);
+				// lambda1.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				//
+				// ALambdaExpression lambda2 = new ALambdaExpression();
+				// lambda2.setIdentifiers(createIdentifierList("t_"));
+				// AEqualPredicate eq2 = new AEqualPredicate(
+				// createIdentifierNode("t_"), new AIntegerExpression(
+				// new TIntegerLiteral("0")));
+				// AConjunctPredicate c2 = new AConjunctPredicate();
+				// c2.setLeft(eq2);
+				// ANegationPredicate not = new ANegationPredicate(
+				// visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				// c2.setRight(not);
+				// lambda2.setPredicate(c2);
+				// lambda2.setExpression(visitExprOrOpArgNodeExpression(n.getArgs()[2]));
+				//
+				// AUnionExpression union = new AUnionExpression(lambda1, lambda2);
+				// AFunctionExpression funCall = new AFunctionExpression();
+				// funCall.setIdentifier(union);
+				// List<PExpression> list = new ArrayList<PExpression>();
+				// list.add(new AIntegerExpression(new TIntegerLiteral("0")));
+				// funCall.setParameters(list);
+				// return funCall;
+			}
 
-		case OPCODE_case: {
-			return createCaseNode(n);
-		}
+			case OPCODE_case: {
+				return createCaseNode(n);
+			}
 
-		case OPCODE_exc: // $Except
-		{
-			TLAType type = (TLAType) n.getToolObject(TYPE_ID);
+			case OPCODE_exc: // $Except
+			{
+				TLAType type = (TLAType) n.getToolObject(TYPE_ID);
 
-			if (type.getKind() == IType.STRUCT) {
-				StructType structType = (StructType) type;
-				PExpression res = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
-				for (int i = 1; i < n.getArgs().length; i++) {
-					OpApplNode pair = (OpApplNode) n.getArgs()[i];
-					ExprOrOpArgNode first = pair.getArgs()[0];
-					ExprOrOpArgNode val = pair.getArgs()[1];
-					OpApplNode seq = (OpApplNode) first;
+				if (type.getKind() == IType.STRUCT) {
+					StructType structType = (StructType) type;
+					PExpression res = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
+					for (int i = 1; i < n.getArgs().length; i++) {
+						OpApplNode pair = (OpApplNode) n.getArgs()[i];
+						ExprOrOpArgNode first = pair.getArgs()[0];
+						ExprOrOpArgNode val = pair.getArgs()[1];
+						OpApplNode seq = (OpApplNode) first;
 
-					LinkedList<ExprOrOpArgNode> seqList = new LinkedList<ExprOrOpArgNode>();
-					Collections.addAll(seqList, seq.getArgs());
+						LinkedList<ExprOrOpArgNode> seqList = new LinkedList<>();
+						Collections.addAll(seqList, seq.getArgs());
 
-					pair.setToolObject(EXCEPT_BASE, res.clone());
-					res = evalExceptValue(res.clone(), seqList, structType, val);
-				}
-				return res;
+						pair.setToolObject(EXCEPT_BASE, res.clone());
+						res = evalExceptValue(res.clone(), seqList, structType, val);
+					}
+					return res;
 
-			} else {
-				FunctionType func = (FunctionType) type;
+				} else {
+					FunctionType func = (FunctionType) type;
 
-				PExpression res = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
-				for (int i = 1; i < n.getArgs().length; i++) {
-					OpApplNode pair = (OpApplNode) n.getArgs()[i];
+					PExpression res = visitExprOrOpArgNodeExpression(n.getArgs()[0]);
+					for (int i = 1; i < n.getArgs().length; i++) {
+						OpApplNode pair = (OpApplNode) n.getArgs()[i];
 
-					ExprOrOpArgNode first = pair.getArgs()[0];
-					ExprOrOpArgNode val = pair.getArgs()[1];
-					OpApplNode seq = (OpApplNode) first;
+						ExprOrOpArgNode first = pair.getArgs()[0];
+						ExprOrOpArgNode val = pair.getArgs()[1];
+						OpApplNode seq = (OpApplNode) first;
 
-					LinkedList<ExprOrOpArgNode> seqList = new LinkedList<ExprOrOpArgNode>();
-					Collections.addAll(seqList, seq.getArgs());
+						LinkedList<ExprOrOpArgNode> seqList = new LinkedList<>();
+						Collections.addAll(seqList, seq.getArgs());
 
-					pair.setToolObject(EXCEPT_BASE, res.clone());
-					res = evalExceptValue(res.clone(), seqList, func, val);
+						pair.setToolObject(EXCEPT_BASE, res.clone());
+						res = evalExceptValue(res.clone(), seqList, func, val);
+					}
+					return res;
 				}
-				return res;
 			}
-		}
 
-		case OPCODE_seq: // !
-		{
-			return visitExprOrOpArgNodeExpression(n.getArgs()[0]);
-		}
+			case OPCODE_seq: // !
+			{
+				return visitExprOrOpArgNodeExpression(n.getArgs()[0]);
+			}
 
-		case OPCODE_uc: { // CHOOSE x : P
-			return createUnboundedChoose(n);
-		}
+			case OPCODE_uc: { // CHOOSE x : P
+				return createUnboundedChoose(n);
+			}
 
-		case OPCODE_bc: { // CHOOSE x \in S: P
-			return createBoundedChoose(n);
-		}
+			case OPCODE_bc: { // CHOOSE x \in S: P
+				return createBoundedChoose(n);
+			}
 
-		case OPCODE_bf: { // \A x \in S : P
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				for (int j = 0; j < params[i].length; j++) {
-					list.add(createIdentifierNode(params[i][j]));
+			case OPCODE_bf: { // \A x \in S : P
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				ArrayList<PExpression> list = new ArrayList<>();
+				for (FormalParamNode[] param : params) {
+					for (FormalParamNode formalParamNode : param) {
+						list.add(createIdentifierNode(formalParamNode));
+					}
 				}
+				AImplicationPredicate implication = new AImplicationPredicate();
+				implication.setLeft(visitBoundsOfLocalVariables(n));
+				implication.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				return new AConvertBoolExpression(new AForallPredicate(list, implication));
 			}
-			AImplicationPredicate implication = new AImplicationPredicate();
-			implication.setLeft(visitBoundsOfLocalVariables(n));
-			implication.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			return new AConvertBoolExpression(new AForallPredicate(list, implication));
-		}
 
-		case OPCODE_be: { // \E x \in S : P
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				for (int j = 0; j < params[i].length; j++) {
-					list.add(createIdentifierNode(params[i][j]));
+			case OPCODE_be: { // \E x \in S : P
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				ArrayList<PExpression> list = new ArrayList<>();
+				for (FormalParamNode[] param : params) {
+					for (FormalParamNode formalParamNode : param) {
+						list.add(createIdentifierNode(formalParamNode));
+					}
 				}
+				AConjunctPredicate conjunction = new AConjunctPredicate();
+				conjunction.setLeft(visitBoundsOfLocalVariables(n));
+				conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				AExistsPredicate exists = new AExistsPredicate(list, conjunction);
+				return new AConvertBoolExpression(exists);
 			}
-			AConjunctPredicate conjunction = new AConjunctPredicate();
-			conjunction.setLeft(visitBoundsOfLocalVariables(n));
-			conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			AExistsPredicate exists = new AExistsPredicate(list, conjunction);
-			return new AConvertBoolExpression(exists);
-		}
 
 		}
 
@@ -1784,10 +1763,9 @@ public class BAstCreator extends BuiltInOPs
 	}
 
 	private List<PExpression> createListOfIdentifier(FormalParamNode[][] params) {
-		List<PExpression> list = new ArrayList<PExpression>();
-		for (int i = 0; i < params.length; i++) {
-			for (int j = 0; j < params[i].length; j++) {
-				FormalParamNode param = params[i][j];
+		List<PExpression> list = new ArrayList<>();
+		for (FormalParamNode[] formalParamNodes : params) {
+			for (FormalParamNode param : formalParamNodes) {
 				list.add(createIdentifierNode(param));
 			}
 		}
@@ -1795,7 +1773,7 @@ public class BAstCreator extends BuiltInOPs
 	}
 
 	private PExpression evalExceptValue(PExpression prefix, LinkedList<ExprOrOpArgNode> seqList, TLAType tlaType,
-			ExprOrOpArgNode val) {
+	                                    ExprOrOpArgNode val) {
 
 		ExprOrOpArgNode head = seqList.poll();
 		if (head == null) {
@@ -1806,13 +1784,13 @@ public class BAstCreator extends BuiltInOPs
 			StructType structType = (StructType) tlaType;
 			String field = ((StringNode) head).getRep().toString();
 
-			List<PRecEntry> list = new ArrayList<PRecEntry>();
+			List<PRecEntry> list = new ArrayList<>();
 			for (int i = 0; i < structType.getFields().size(); i++) {
 				ARecEntry entry = new ARecEntry();
 				String fieldName = structType.getFields().get(i);
 				entry.setIdentifier(createIdentifierNode(fieldName));
 
-				PExpression value = null;
+				PExpression value;
 				ARecordFieldExpression select = new ARecordFieldExpression();
 				select.setRecord(prefix.clone());
 				select.setIdentifier(createIdentifierNode(fieldName));
@@ -1826,24 +1804,23 @@ public class BAstCreator extends BuiltInOPs
 
 			}
 
-			ARecExpression rec = new ARecExpression(list);
-			return rec;
+			return new ARecExpression(list);
 
 		} else {
 			FunctionType func = (FunctionType) tlaType;
 
 			ACoupleExpression couple = new ACoupleExpression();
-			List<PExpression> coupleList = new ArrayList<PExpression>();
+			List<PExpression> coupleList = new ArrayList<>();
 			coupleList.add(visitExprOrOpArgNodeExpression(head));
 
 			AFunctionExpression funcCall = new AFunctionExpression();
 			funcCall.setIdentifier(prefix);
-			List<PExpression> argList = new ArrayList<PExpression>();
+			List<PExpression> argList = new ArrayList<>();
 			argList.add(visitExprOrOpArgNodeExpression(head));
 			funcCall.setParameters(argList);
 			coupleList.add(evalExceptValue(funcCall, seqList, func.getRange(), val));
 			couple.setList(coupleList);
-			List<PExpression> setList = new ArrayList<PExpression>();
+			List<PExpression> setList = new ArrayList<>();
 			setList.add(couple);
 			ASetExtensionExpression setExtension = new ASetExtensionExpression(setList);
 			AOverwriteExpression overwrite = new AOverwriteExpression();
@@ -1868,7 +1845,7 @@ public class BAstCreator extends BuiltInOPs
 		} else {
 			index = field;
 			ASecondProjectionExpression second = new ASecondProjectionExpression();
-			ArrayList<TLAType> typeList = new ArrayList<TLAType>();
+			ArrayList<TLAType> typeList = new ArrayList<>();
 			for (int i = 0; i < field - 1; i++) {
 				typeList.add(tuple.getTypes().get(i));
 			}
@@ -1880,7 +1857,7 @@ public class BAstCreator extends BuiltInOPs
 		for (int i = index; i < size; i++) {
 			AFunctionExpression newfunc = new AFunctionExpression();
 			AFirstProjectionExpression first = new AFirstProjectionExpression();
-			ArrayList<TLAType> typeList = new ArrayList<TLAType>();
+			ArrayList<TLAType> typeList = new ArrayList<>();
 			for (int j = 0; j < i; j++) {
 				typeList.add(tuple.getTypes().get(j));
 			}
@@ -1888,12 +1865,12 @@ public class BAstCreator extends BuiltInOPs
 			first.setExp2(tuple.getTypes().get(i).getBNode());
 			newfunc.setIdentifier(first);
 
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
+			ArrayList<PExpression> list = new ArrayList<>();
 			list.add(newfunc);
 			func.setParameters(list);
 			func = newfunc;
 		}
-		ArrayList<PExpression> list = new ArrayList<PExpression>();
+		ArrayList<PExpression> list = new ArrayList<>();
 		list.add(pair);
 		func.setParameters(list);
 		return returnFunc;
@@ -1903,7 +1880,7 @@ public class BAstCreator extends BuiltInOPs
 		if (typeList.size() == 1) {
 			return typeList.get(0).getBNode();
 		}
-		List<PExpression> list = new ArrayList<PExpression>();
+		List<PExpression> list = new ArrayList<>();
 		for (TLAType t : typeList) {
 			list.add(t.getBNode());
 		}
@@ -1926,13 +1903,13 @@ public class BAstCreator extends BuiltInOPs
 		ADefinitionExpression defCall = new ADefinitionExpression();
 		defCall.setDefLiteral(new TIdentifierLiteral("CHOOSE"));
 		AComprehensionSetExpression comprehension = new AComprehensionSetExpression();
-		List<PExpression> paramList = new ArrayList<PExpression>();
+		List<PExpression> paramList = new ArrayList<>();
 		for (FormalParamNode param : n.getUnbdedQuantSymbols()) {
 			paramList.add(createIdentifierNode(param));
 		}
 		comprehension.setIdentifiers(paramList);
 		comprehension.setPredicates(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-		List<PExpression> list = new ArrayList<PExpression>();
+		List<PExpression> list = new ArrayList<>();
 		list.add(comprehension);
 		defCall.setParameters(list);
 		return defCall;
@@ -1942,7 +1919,7 @@ public class BAstCreator extends BuiltInOPs
 		ADefinitionExpression defCall = new ADefinitionExpression();
 		defCall.setDefLiteral(new TIdentifierLiteral("CHOOSE"));
 		AComprehensionSetExpression comprehension = new AComprehensionSetExpression();
-		List<PExpression> paramList = new ArrayList<PExpression>();
+		List<PExpression> paramList = new ArrayList<>();
 		for (FormalParamNode param : n.getBdedQuantSymbolLists()[0]) {
 			paramList.add(createIdentifierNode(param));
 		}
@@ -1952,15 +1929,15 @@ public class BAstCreator extends BuiltInOPs
 		conj.setLeft(typingPredicate);
 		conj.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
 		comprehension.setPredicates(conj);
-		List<PExpression> list = new ArrayList<PExpression>();
+		List<PExpression> list = new ArrayList<>();
 		list.add(comprehension);
 		defCall.setParameters(list);
 		return defCall;
 	}
 
 	private PExpression createCaseNode(OpApplNode n) {
-		List<PPredicate> conditions = new ArrayList<PPredicate>();
-		List<PPredicate> disjunctionList = new ArrayList<PPredicate>();
+		List<PPredicate> conditions = new ArrayList<>();
+		List<PPredicate> disjunctionList = new ArrayList<>();
 		for (int i = 0; i < n.getArgs().length; i++) {
 			OpApplNode pair = (OpApplNode) n.getArgs()[i];
 
@@ -1984,253 +1961,252 @@ public class BAstCreator extends BuiltInOPs
 		comprehension.setPredicates(createDisjunction(disjunctionList));
 		ADefinitionExpression defCall = new ADefinitionExpression();
 		defCall.setDefLiteral(new TIdentifierLiteral("CHOOSE"));
-		List<PExpression> params = new ArrayList<PExpression>();
+		List<PExpression> params = new ArrayList<>();
 		params.add(comprehension);
 		defCall.setParameters(params);
 		return defCall;
 	}
 
 	private List<PExpression> createIdentifierList(String name) {
-		ArrayList<PExpression> list = new ArrayList<PExpression>();
+		ArrayList<PExpression> list = new ArrayList<>();
 		list.add(createIdentifierNode(name));
 		return list;
 	}
 
 	private PPredicate visitBuiltInKindPredicate(OpApplNode n) {
-		PPredicate returnNode = null;
+		PPredicate returnNode;
 		switch (getOpCode(n.getOperator().getName())) {
-		case OPCODE_land: // \land
-		{
-			AConjunctPredicate conjunction = new AConjunctPredicate();
-			conjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			returnNode = conjunction;
-			break;
-		}
-		case OPCODE_cl: // $ConjList
-		{
-			List<PPredicate> list = new ArrayList<PPredicate>();
-			for (int i = 0; i < n.getArgs().length; i++) {
-				list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
-			}
-			returnNode = createConjunction(list);
-			break;
-		}
-		case OPCODE_lor: // \/
-		{
-			ADisjunctPredicate disjunction = new ADisjunctPredicate();
-			disjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			disjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			returnNode = disjunction;
-			break;
-		}
-		case OPCODE_dl: // $DisjList
-		{
-			List<PPredicate> list = new ArrayList<PPredicate>();
-			for (int i = 0; i < n.getArgs().length; i++) {
-				list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+			case OPCODE_land: // \land
+			{
+				AConjunctPredicate conjunction = new AConjunctPredicate();
+				conjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
+				returnNode = conjunction;
+				break;
 			}
-			returnNode = createDisjunction(list);
-			break;
-		}
-		case OPCODE_lnot: // \lnot
-			returnNode = new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			break;
-		case OPCODE_equiv: // \equiv
-			returnNode = new AEquivalencePredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
+			case OPCODE_cl: // $ConjList
+			{
+				List<PPredicate> list = new ArrayList<>();
+				for (int i = 0; i < n.getArgs().length; i++) {
+					list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+				}
+				returnNode = createConjunction(list);
+				break;
+			}
+			case OPCODE_lor: // \/
+			{
+				ADisjunctPredicate disjunction = new ADisjunctPredicate();
+				disjunction.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				disjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
+				returnNode = disjunction;
+				break;
+			}
+			case OPCODE_dl: // $DisjList
+			{
+				List<PPredicate> list = new ArrayList<>();
+				for (int i = 0; i < n.getArgs().length; i++) {
+					list.add(visitExprOrOpArgNodePredicate(n.getArgs()[i]));
+				}
+				returnNode = createDisjunction(list);
+				break;
+			}
+			case OPCODE_lnot: // \lnot
+				returnNode = new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				break;
+			case OPCODE_equiv: // \equiv
+				returnNode = new AEquivalencePredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
 					visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			break;
+				break;
 
-		case OPCODE_implies: // =>
-			returnNode = new AImplicationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
+			case OPCODE_implies: // =>
+				returnNode = new AImplicationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]),
 					visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-			break;
-
-		case OPCODE_be: { // \E x \in S : P
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				for (int j = 0; j < params[i].length; j++) {
-					list.add(createIdentifierNode(params[i][j]));
+				break;
+
+			case OPCODE_be: { // \E x \in S : P
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				ArrayList<PExpression> list = new ArrayList<>();
+				for (FormalParamNode[] param : params) {
+					for (FormalParamNode formalParamNode : param) {
+						list.add(createIdentifierNode(formalParamNode));
+					}
 				}
+				AConjunctPredicate conjunction = new AConjunctPredicate();
+				conjunction.setLeft(visitBoundsOfLocalVariables(n));
+				conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				returnNode = new AExistsPredicate(list, conjunction);
+				break;
 			}
-			AConjunctPredicate conjunction = new AConjunctPredicate();
-			conjunction.setLeft(visitBoundsOfLocalVariables(n));
-			conjunction.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			returnNode = new AExistsPredicate(list, conjunction);
-			break;
-		}
 
-		case OPCODE_bf: { // \A x \in S : P
-			FormalParamNode[][] params = n.getBdedQuantSymbolLists();
-			ArrayList<PExpression> list = new ArrayList<PExpression>();
-			for (int i = 0; i < params.length; i++) {
-				for (int j = 0; j < params[i].length; j++) {
-					list.add(createIdentifierNode(params[i][j]));
+			case OPCODE_bf: { // \A x \in S : P
+				FormalParamNode[][] params = n.getBdedQuantSymbolLists();
+				ArrayList<PExpression> list = new ArrayList<>();
+				for (FormalParamNode[] param : params) {
+					for (FormalParamNode formalParamNode : param) {
+						list.add(createIdentifierNode(formalParamNode));
+					}
 				}
+				AImplicationPredicate implication = new AImplicationPredicate();
+				implication.setLeft(visitBoundsOfLocalVariables(n));
+				implication.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				returnNode = new AForallPredicate(list, implication);
+				break;
 			}
-			AImplicationPredicate implication = new AImplicationPredicate();
-			implication.setLeft(visitBoundsOfLocalVariables(n));
-			implication.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			returnNode = new AForallPredicate(list, implication);
-			break;
-		}
 
-		case OPCODE_eq: { // =
-			AEqualPredicate equal = new AEqualPredicate();
-			equal.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			equal.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			returnNode = equal;
-			break;
-		}
-		case OPCODE_noteq: // /=
-		{
-			ANotEqualPredicate notEqual = new ANotEqualPredicate();
-			notEqual.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			notEqual.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			returnNode = notEqual;
-			break;
-		}
-		case OPCODE_in: // \in
-		{
-			AMemberPredicate memberPredicate = new AMemberPredicate();
-			memberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			memberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			returnNode = memberPredicate;
-			break;
-		}
-
-		case OPCODE_notin: // \notin
-		{
-			ANotMemberPredicate notMemberPredicate = new ANotMemberPredicate();
-			notMemberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			notMemberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			returnNode = notMemberPredicate;
-			break;
-		}
-
-		case OPCODE_subseteq: // \subseteq {1,2} <: {1,2,3}
-		{
-			ASubsetPredicate subset = new ASubsetPredicate();
-			subset.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			subset.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
-			returnNode = subset;
-			break;
-		}
-
-		case OPCODE_fa: { // f[1]
-			AFunctionExpression func = new AFunctionExpression();
-			func.setIdentifier(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			List<PExpression> paramList = new ArrayList<PExpression>();
-
-			ExprOrOpArgNode dom = n.getArgs()[1];
-			if (dom instanceof OpApplNode && ((OpApplNode) dom).getOperator().getName().toString().equals("$Tuple")) {
-				OpApplNode domOpAppl = (OpApplNode) dom;
-				for (int i = 0; i < domOpAppl.getArgs().length; i++) {
-					paramList.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[i]));
+			case OPCODE_eq: { // =
+				AEqualPredicate equal = new AEqualPredicate();
+				equal.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				equal.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				returnNode = equal;
+				break;
+			}
+			case OPCODE_noteq: // /=
+			{
+				ANotEqualPredicate notEqual = new ANotEqualPredicate();
+				notEqual.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				notEqual.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				returnNode = notEqual;
+				break;
+			}
+			case OPCODE_in: // \in
+			{
+				AMemberPredicate memberPredicate = new AMemberPredicate();
+				memberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				memberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				returnNode = memberPredicate;
+				break;
+			}
+
+			case OPCODE_notin: // \notin
+			{
+				ANotMemberPredicate notMemberPredicate = new ANotMemberPredicate();
+				notMemberPredicate.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				notMemberPredicate.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				returnNode = notMemberPredicate;
+				break;
+			}
+
+			case OPCODE_subseteq: // \subseteq {1,2} <: {1,2,3}
+			{
+				ASubsetPredicate subset = new ASubsetPredicate();
+				subset.setLeft(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				subset.setRight(visitExprOrOpArgNodeExpression(n.getArgs()[1]));
+				returnNode = subset;
+				break;
+			}
+
+			case OPCODE_fa: { // f[1]
+				AFunctionExpression func = new AFunctionExpression();
+				func.setIdentifier(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				List<PExpression> paramList = new ArrayList<>();
+
+				ExprOrOpArgNode dom = n.getArgs()[1];
+				if (dom instanceof OpApplNode && ((OpApplNode) dom).getOperator().getName().toString().equals("$Tuple")) {
+					OpApplNode domOpAppl = (OpApplNode) dom;
+					for (int i = 0; i < domOpAppl.getArgs().length; i++) {
+						paramList.add(visitExprOrOpArgNodeExpression(domOpAppl.getArgs()[i]));
+					}
+				} else {
+					paramList.add(visitExprOrOpArgNodeExpression(dom));
 				}
-			} else {
-				paramList.add(visitExprOrOpArgNodeExpression(dom));
+				func.setParameters(paramList);
+				returnNode = new AEqualPredicate(func, new ABooleanTrueExpression());
+				break;
 			}
-			func.setParameters(paramList);
-			returnNode = new AEqualPredicate(func, new ABooleanTrueExpression());
-			break;
-		}
 
-		case OPCODE_rs: { // $RcdSelect r.c
-			ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
-			rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
-			StringNode stringNode = (StringNode) n.getArgs()[1];
-			rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
-			returnNode = new AEqualPredicate(rcdSelect, new ABooleanTrueExpression());
-			break;
-		}
+			case OPCODE_rs: { // $RcdSelect r.c
+				ARecordFieldExpression rcdSelect = new ARecordFieldExpression();
+				rcdSelect.setRecord(visitExprOrOpArgNodeExpression(n.getArgs()[0]));
+				StringNode stringNode = (StringNode) n.getArgs()[1];
+				rcdSelect.setIdentifier(createIdentifierNode(stringNode.getRep().toString()));
+				returnNode = new AEqualPredicate(rcdSelect, new ABooleanTrueExpression());
+				break;
+			}
 
-		case OPCODE_case: {
-			returnNode = new AEqualPredicate(createCaseNode(n), new ABooleanTrueExpression());
-			break;
-		}
-		case OPCODE_prime: // prime
-		{
-			OpApplNode node = (OpApplNode) n.getArgs()[0];
-			returnNode = new AEqualPredicate(createIdentifierNode(getName(node.getOperator()) + "_n"),
+			case OPCODE_case: {
+				returnNode = new AEqualPredicate(createCaseNode(n), new ABooleanTrueExpression());
+				break;
+			}
+			case OPCODE_prime: // prime
+			{
+				OpApplNode node = (OpApplNode) n.getArgs()[0];
+				returnNode = new AEqualPredicate(createIdentifierNode(getName(node.getOperator()) + "_n"),
 					new ABooleanTrueExpression());
-			break;
-		}
-		case OPCODE_unchanged: {
-			OpApplNode node = (OpApplNode) n.getArgs()[0];
-			// System.out.println(" Translating UNCHANGED : " + node.toString());
-			// System.out.println(" Top-level unchanged for this operation: " + this.toplevelUnchangedVariableNames);
-			if (node.getOperator().getKind() == VariableDeclKind) {
-				return CreateUnchangedPrimeEquality(node);
-
-			} else if (node.getOperator().getKind() == UserDefinedOpKind) {
-				OpDefNode operator = (OpDefNode) node.getOperator();
-				ExprNode e = operator.getBody();
-				OpApplNode opApplNode = (OpApplNode) e;
-				node = opApplNode;
-			}
-
-			ArrayList<PPredicate> list = new ArrayList<PPredicate>();
-			for (int i = 0; i < node.getArgs().length; i++) {
-				OpApplNode var = (OpApplNode) node.getArgs()[i];
-				list.add(CreateUnchangedPrimeEquality(var));
-			}
-			returnNode = createConjunction(list);
-			// returnNode = new AEqualPredicate(new ABooleanTrueExpression(),
-			// new ABooleanTrueExpression());
-			break;
-		}
-		case OPCODE_uc: { // CHOOSE x : P
-			returnNode = new AEqualPredicate(createUnboundedChoose(n), new ABooleanTrueExpression());
-			break;
-		}
-		case OPCODE_bc: { // CHOOSE x \in S: P
-			returnNode = new AEqualPredicate(createBoundedChoose(n), new ABooleanTrueExpression());
-			break;
-		}
-		case OPCODE_ite: // IF THEN ELSE
-		{
-			AImplicationPredicate impl1 = new AImplicationPredicate();
-			impl1.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			impl1.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
-
-			AImplicationPredicate impl2 = new AImplicationPredicate();
-			ANegationPredicate neg = new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
-			impl2.setLeft(neg);
-			impl2.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[2]));
-			returnNode = new AConjunctPredicate(impl1, impl2);
-			break;
-		}
-		case 0:
-			return visitBBuitInsPredicate(n);
-		default:
-			throw new NotImplementedException(n.getOperator().getName().toString());
+				break;
+			}
+			case OPCODE_unchanged: {
+				OpApplNode node = (OpApplNode) n.getArgs()[0];
+				// System.out.println(" Translating UNCHANGED : " + node.toString());
+				// System.out.println(" Top-level unchanged for this operation: " + this.toplevelUnchangedVariableNames);
+				if (node.getOperator().getKind() == VariableDeclKind) {
+					return CreateUnchangedPrimeEquality(node);
+
+				} else if (node.getOperator().getKind() == UserDefinedOpKind) {
+					OpDefNode operator = (OpDefNode) node.getOperator();
+					ExprNode e = operator.getBody();
+					node = (OpApplNode) e;
+				}
+
+				ArrayList<PPredicate> list = new ArrayList<>();
+				for (int i = 0; i < node.getArgs().length; i++) {
+					OpApplNode var = (OpApplNode) node.getArgs()[i];
+					list.add(CreateUnchangedPrimeEquality(var));
+				}
+				returnNode = createConjunction(list);
+				// returnNode = new AEqualPredicate(new ABooleanTrueExpression(),
+				// new ABooleanTrueExpression());
+				break;
+			}
+			case OPCODE_uc: { // CHOOSE x : P
+				returnNode = new AEqualPredicate(createUnboundedChoose(n), new ABooleanTrueExpression());
+				break;
+			}
+			case OPCODE_bc: { // CHOOSE x \in S: P
+				returnNode = new AEqualPredicate(createBoundedChoose(n), new ABooleanTrueExpression());
+				break;
+			}
+			case OPCODE_ite: // IF THEN ELSE
+			{
+				AImplicationPredicate impl1 = new AImplicationPredicate();
+				impl1.setLeft(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				impl1.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[1]));
+
+				AImplicationPredicate impl2 = new AImplicationPredicate();
+				ANegationPredicate neg = new ANegationPredicate(visitExprOrOpArgNodePredicate(n.getArgs()[0]));
+				impl2.setLeft(neg);
+				impl2.setRight(visitExprOrOpArgNodePredicate(n.getArgs()[2]));
+				returnNode = new AConjunctPredicate(impl1, impl2);
+				break;
+			}
+			case 0:
+				return visitBBuitInsPredicate(n);
+			default:
+				throw new NotImplementedException(n.getOperator().getName().toString());
 		}
 		return createPositionedNode(returnNode, n);
 	}
-	
+
 	// create an equality predicate var_n = var if required
-	private AEqualPredicate CreateUnchangedPrimeEquality (OpApplNode var) {
+	private AEqualPredicate CreateUnchangedPrimeEquality(OpApplNode var) {
 		if (!this.toplevelUnchangedVariableNames.contains(getName(var.getOperator()))) {
 			AEqualPredicate equal = new AEqualPredicate();
 			equal.setLeft(createIdentifierNode(getName(var.getOperator()) + "_n"));
 			equal.setRight(createIdentifierNode(var.getOperator()));
 			return equal;
 		} else {
-		    // the variable is marked UNCHANGED in a top-level UNCHANGED predicate
-		    // Hence it will not be added to the ANY variables and we do not need it
+			// the variable is marked UNCHANGED in a top-level UNCHANGED predicate
+			// Hence it will not be added to the ANY variables and we do not need it
 			return new AEqualPredicate(new ABooleanTrueExpression(), new ABooleanTrueExpression());
 		}
-	
+
 	}
-	
+
 	public PPredicate visitBoundsOfLocalVariables(OpApplNode n) {
 		FormalParamNode[][] params = n.getBdedQuantSymbolLists();
 		ExprNode[] in = n.getBdedQuantBounds();
 		boolean[] isTuple = n.isBdedQuantATuple();
 
-		List<PPredicate> predList = new ArrayList<PPredicate>();
+		List<PPredicate> predList = new ArrayList<>();
 		for (int i = 0; i < params.length; i++) {
 			if (isTuple[i]) {
 				if (params[i].length == 1) {
@@ -2238,7 +2214,7 @@ public class BAstCreator extends BuiltInOPs
 					FormalParamNode param = params[i][0];
 					AMemberPredicate member = new AMemberPredicate();
 					ASequenceExtensionExpression seq = new ASequenceExtensionExpression();
-					List<PExpression> list = new ArrayList<PExpression>();
+					List<PExpression> list = new ArrayList<>();
 					list.add(createIdentifierNode(param));
 					seq.setExpression(list);
 					member.setLeft(seq);
@@ -2246,7 +2222,7 @@ public class BAstCreator extends BuiltInOPs
 					predList.add(member);
 
 				} else {
-					ArrayList<PExpression> list = new ArrayList<PExpression>();
+					ArrayList<PExpression> list = new ArrayList<>();
 					for (int j = 0; j < params[i].length; j++) {
 						FormalParamNode param = params[i][j];
 						list.add(createIdentifierNode(param));
@@ -2273,11 +2249,11 @@ public class BAstCreator extends BuiltInOPs
 		ExprNode[] in = n.getBdedQuantBounds();
 		boolean[] isTuple = n.isBdedQuantATuple();
 
-		List<PPredicate> predList = new ArrayList<PPredicate>();
+		List<PPredicate> predList = new ArrayList<>();
 		for (int i = 0; i < params.length; i++) {
 			if (isTuple[i]) {
 				if (params[i].length == 1) { // one-tuple is handled as a
-												// sequence
+					// sequence
 					FormalParamNode param = params[i][0];
 					param.setToolObject(TUPLE, params[i]);
 
@@ -2287,7 +2263,7 @@ public class BAstCreator extends BuiltInOPs
 					predList.add(member);
 
 				} else if (i == 0) {
-					ArrayList<PExpression> list = new ArrayList<PExpression>();
+					ArrayList<PExpression> list = new ArrayList<>();
 					for (int j = 0; j < params[i].length; j++) {
 						FormalParamNode param = params[i][j];
 						list.add(createIdentifierNode(param));
@@ -2297,12 +2273,12 @@ public class BAstCreator extends BuiltInOPs
 					member.setRight(visitExprNodeExpression(in[i]));
 					predList.add(member);
 				} else {
-					ArrayList<PExpression> list = new ArrayList<PExpression>();
+					ArrayList<PExpression> list = new ArrayList<>();
 					StringBuilder sb = new StringBuilder();
 					for (int j = 0; j < params[i].length; j++) {
 						FormalParamNode param = params[i][j];
 						if (i > 0) { // do not use prj1 & prj2 if it is the
-										// first tuple
+							// first tuple
 							param.setToolObject(TUPLE, params[i]);
 						}
 						sb.append(param.getName().toString());
@@ -2381,14 +2357,14 @@ public class BAstCreator extends BuiltInOPs
 	}
 
 	public static List<TIdentifierLiteral> createTIdentifierLiteral(String name) {
-		List<TIdentifierLiteral> list = new ArrayList<TIdentifierLiteral>();
+		List<TIdentifierLiteral> list = new ArrayList<>();
 		TIdentifierLiteral tid = new TIdentifierLiteral(name);
 		list.add(tid);
 		return list;
 	}
 
 	public static List<PExpression> createPexpressionList(PExpression expr) {
-		ArrayList<PExpression> list = new ArrayList<PExpression>();
+		ArrayList<PExpression> list = new ArrayList<>();
 		list.add(expr);
 		return list;
 	}
diff --git a/src/main/java/de/tla2bAst/Translator.java b/src/main/java/de/tla2bAst/Translator.java
index 0677795fa451dbf448aaa68b0d137e0823079268..bd0efaf09b201e87043bc35572f96a1d3891c82c 100644
--- a/src/main/java/de/tla2bAst/Translator.java
+++ b/src/main/java/de/tla2bAst/Translator.java
@@ -11,6 +11,7 @@ import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.Hashtable;
 
 import de.be4.classicalb.core.parser.BParser;
@@ -130,12 +131,9 @@ public class Translator implements TranslationGlobals {
 			configFile = new File("temp/" + moduleName + ".cfg");
 			try {
 				configFile.createNewFile();
-				BufferedWriter out = new BufferedWriter(
-						new OutputStreamWriter(new FileOutputStream(configFile), StandardCharsets.UTF_8));
-				try {
+				try (BufferedWriter out = new BufferedWriter(
+					new OutputStreamWriter(Files.newOutputStream(configFile.toPath()), StandardCharsets.UTF_8))) {
 					out.write(configString);
-				} finally {
-					out.close();
 				}
 			} catch (IOException e) {
 				e.printStackTrace();
@@ -151,11 +149,8 @@ public class Translator implements TranslationGlobals {
 		try {
 			moduleFile = new File("temp/" + moduleName + ".tla");
 			moduleFile.createNewFile();
-			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(moduleFile), StandardCharsets.UTF_8));
-			try {
+			try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(moduleFile.toPath()), StandardCharsets.UTF_8))) {
 				out.write(moduleString);
-			} finally {
-				out.close();
 			}
 			moduleFileName = moduleFile.getAbsolutePath();
 		} catch (IOException e) {
@@ -204,7 +199,7 @@ public class Translator implements TranslationGlobals {
 	public static String allMessagesToString(String[] allMessages) {
 		StringBuilder sb = new StringBuilder();
 		for (int i = 0; i < allMessages.length - 1; i++) {
-			sb.append(allMessages[i] + "\n");
+			sb.append(allMessages[i]).append("\n");
 		}
 		return sb.toString();
 	}
@@ -326,11 +321,8 @@ public class Translator implements TranslationGlobals {
 		String result = "/*@ generated by TLA2B " + VERSION_NUMBER + " */\n" + pp.getPrettyPrint();
 
 		try {
-			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(machineFile), StandardCharsets.UTF_8));
-			try {
+			try (BufferedWriter out = new BufferedWriter(new OutputStreamWriter(Files.newOutputStream(machineFile.toPath()), StandardCharsets.UTF_8))) {
 				out.write(result);
-			} finally {
-				out.close();
 			}
 			System.out.println("B-Machine " + machineFile.getAbsolutePath() + " created.");
 		} catch (IOException e) {
@@ -350,8 +342,7 @@ public class Translator implements TranslationGlobals {
 	public Start translateExpression(String tlaExpression) throws TLA2BException {
 		ExpressionTranslator expressionTranslator = new ExpressionTranslator(tlaExpression, this);
 		expressionTranslator.parse();
-		Start start = expressionTranslator.translateIncludingModel();
-		return start;
+		return expressionTranslator.translateIncludingModel();
 	}
 
 	public static Start translateTlaExpression(String tlaExpression) {