private boolean satisfyNEGATE(Variable v0, Variable v1, Trail trail) {
		IntDomain d0 = (IntDomain) v0.getDomain();
		IntDomain d1 = (IntDomain) v1.getDomain();

		if (d1.size() == 1) {
			// v0 = -v1
			int value = -d1.value();
			if (!d0.contains(value))
				return false;
			if (d0.size() > 1)
				v0.updateDomain(new IntDomain(value), trail);
			return true;
		} else if (d0.size() == 1) {
			// v1 = -v0
			int value = -d0.value();
			if (!d1.contains(value))
				return false;
			if (d1.size() > 1)
				v1.updateDomain(new IntDomain(value), trail);
			return true;
		}

		// v0 = -v1
		d0 = d0.capInterval(-d1.max(), -d1.min());
		if (d0.isEmpty())
			return false;
		v0.updateDomain(d0, trail);
		// v1 = -v0
		d1 = d1.capInterval(-d0.max(), -d0.min());
		if (d1.isEmpty())
			return false;
		v1.updateDomain(d1, trail);

		return true;
	}