public Goal execute() throws Failure {
    class ObserverEqualValue extends Observer {
      @Override
      public Object master() {
        return ConstraintExpEqualsValue.this;
      }

      @Override
      public int subscriberMask() {
        return EventOfInterest.VALUE | EventOfInterest.MIN | EventOfInterest.MAX;
      }

      @Override
      public String toString() {
        return "ObserverEqualValue";
      }

      @Override
      public void update(Subject exp, EventOfInterest interest) throws Failure {
        // Debug.on();Debug.print("ObserverEqualValue:
        // "+interest);Debug.off();
        IntEvent event = (IntEvent) interest;
        if ((event.isValueEvent() && event.min() != _value)
            || (event.isMaxEvent() && event.max() < _value)
            || (event.isMinEvent() && event.min() > _value)) {
          exp.constrainer().fail("from ObserverEqualValue");
        }
        _exp.setValue(_value);
      }
    } // ~ ObserverEqualValue

    _exp.setValue(_value); // may fail
    _exp.attachObserver(new ObserverEqualValue());
    return null;
  }