private void updateRequiredConstraints(final DVConstraints dvConstraints,
			final Map<Variable, Expression> varAssignments)
	throws VerifyException {
		for (Variable[] constraint: dvConstraints) {
			assert (constraint.length == 2): "Invalid constraint length";
			final Expression exp1 = varAssignments.get(constraint[0]);
			final Expression exp2 = varAssignments.get(constraint[1]);
			final Set<Variable> varSet1 = (exp1 == null)? Collections.singleton(constraint[0])
				: exp1.variables();
			final Set<Variable> varSet2 = (exp2 == null)? Collections.singleton(constraint[1])
				: exp2.variables();
			try {
				requiredDVConstraints.addProduct(varSet1, varSet2);
			} catch (ConstraintException e) {
				try {
					feed.reject("Distinct variable constraint violation: " + e.getMessage());
				} catch (ScannerException ignored) {
					logger.error("Distinct variable constraint violation: " + e.getMessage());
				}
				logger.debug("First variable set:  " + varSet1);
				logger.debug("Second variable set: " + varSet2);
				logger.debug("Current required DV: " + requiredDVConstraints);
				throw new VerifyException("Distinct variable constraint violation", e);
			}
		}
	}