@Override
  public Boolean isValid() {
    // ==> The objective must be minimization
    if (!this.objective.equals(Objective.MIN)) {
      return Boolean.FALSE;
    }
    Integer mandatorySize = null;
    if (this.constraints.size() > 0) {
      mandatorySize = this.constraints.get(0).getSize();
    }
    for (ImmutableLinearConstraint constraint : this.constraints) {
      // ==> All of the constraints must be equations
      if (!constraint.getSign().equals(ConstraintSign.Equal)) {
        return Boolean.FALSE;
      }
      // ==> All of the constant-terms must be positive
      if (BigDecimalUtil.compare(constraint.getConstantTerm(), BigDecimal.ZERO) == -1) {
        return Boolean.FALSE;
      }
      // ==> All of the constraints must have the same size
      if (!constraint.getSize().equals(mandatorySize)) {
        return Boolean.FALSE;
      }
    }

    return Boolean.TRUE;
  }