@Override public Constraint getConstraint() { if (!isSatisfiable || !isSymbolic()) return null; Expression left = o1.getSymbolicValue(); Expression right = o2.getSymbolicValue(); assert left != null && right != null; if (left instanceof RealExpression && right instanceof RealExpression) constraint = new RealConstraint((RealExpression) left, cmp, (RealExpression) right); else if (left instanceof IntegerExpression && right instanceof IntegerExpression) { if (left instanceof LinearIntegerExpression && right instanceof LinearIntegerExpression) constraint = new LinearIntegerConstraint((IntegerExpression) left, cmp, (IntegerExpression) right); else constraint = new NonLinearIntegerConstraint( (IntegerExpression) left, cmp, (IntegerExpression) right); } else if (left instanceof RealExpression) constraint = new MixedConstraint((RealExpression) left, cmp, (IntegerExpression) right); else constraint = new MixedConstraint((RealExpression) right, cmp, (IntegerExpression) left); return constraint; }