<monet:definitions xmlns:monet="http://monet.nag.co.uk/monet/ns"
                   xmlns:om="http://www.openmath.org/OpenMath"
                   targetNamespace="http://monet.nag.co.uk/problems/" >

 <monet:problem name ="constrained_minimisation">
  <monet:header>
    <monet:taxonomy taxonomy="http://gams.nist.gov" code="GamsG" />
  </monet:header>

  <monet:body>

    <monet:input name="objective">
      <monet:documentation>
        The objective function.
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts"  name="mapsto" />
            <om:OMA>
              <om:OMS cd="sts2"  name="vector_n" />
              <om:OMV name="n"/>
              <om:OMV name="R"/>
            </om:OMA>
            <om:OMV name="R"/>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:input name="simple_bounds">
      <monet:documentation>
        The bounds on the variables.  
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2" name="list" />
            <om:OMA>
              <om:OMS cd="sts2" name="interval" />
              <om:OMV name="R"/>
            </om:OMA>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:input name="linear_constraint_functions">
      <monet:documentation>
        The set of linear constraint functions
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2" name="list" />
            <om:OMA>
              <om:OMS cd="sts"  name="mapsto" />
              <om:OMA>
                <om:OMS cd="sts2"  name="vector_n" />
                <om:OMV name="n"/>
                <om:OMV name="R"/>
              </om:OMA>
              <om:OMV name="R"/>
            </om:OMA>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:input name="linear_constraint_bounds">
      <monet:documentation>
        The bounds on the linear constraint functions
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2" name="list" />
            <om:OMA>
              <om:OMS cd="sts2" name="interval" />
              <om:OMV name="R"/>
            </om:OMA>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:input name="non_linear_constraint_functions">
      <monet:documentation>
        The set of non-linear constraint functions
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2" name="list" />
            <om:OMA>
              <om:OMS cd="sts"  name="mapsto" />
              <om:OMA>
                <om:OMS cd="sts2"  name="vector_n" />
                <om:OMV name="n"/>
                <om:OMV name="R"/>
              </om:OMA>
              <om:OMV name="R"/>
            </om:OMA>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:input name="non_linear_constraint_bounds">
      <monet:documentation>
        The bounds on the non-linear constraint functions
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2" name="list" />
            <om:OMA>
              <om:OMS cd="sts2" name="interval" />
              <om:OMV name="R"/>
            </om:OMA>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:input>

    <monet:output name="minimum">
      <monet:documentation>
        The point at which the minimum occurs
      </monet:documentation>
      <monet:signature>
        <om:OMOBJ>
          <om:OMA>
            <om:OMS cd="sts2"  name="vector_n" />
            <om:OMV name="n"/>
            <om:OMV name="R"/>
          </om:OMA>
        </om:OMOBJ>
      </monet:signature>
    </monet:output>

    <monet:pre-condition>
      <om:OMOBJ>
        <om:OMA>
          <om:OMS cd="relation1" name="eq"/>
          <om:OMA>
            <om:OMS name="size" cd="list2"/>
            <om:OMV name="simple_bounds"/>
          </om:OMA>
          <om:OMV name="n"/>
        </om:OMA>
      </om:OMOBJ>
    </monet:pre-condition>

    <monet:pre-condition>
      <om:OMOBJ>
        <om:OMA>
          <om:OMS cd="relation1" name="eq"/>
          <om:OMA>
            <om:OMS name="size" cd="list2"/>
            <om:OMV name="linear_constraint_functions"/>
          </om:OMA>
          <om:OMA>
            <om:OMS name="size" cd="list2"/>
            <om:OMV name="linear_constraint_bounds"/>
          </om:OMA>
        </om:OMA>
      </om:OMOBJ>
    </monet:pre-condition>

    <monet:pre-condition>
      <om:OMOBJ>
        <om:OMA>
          <om:OMS cd="relation1" name="eq"/>
          <om:OMA>
            <om:OMS name="size" cd="list2"/>
            <om:OMV name="non_linear_constraint_functions"/>
          </om:OMA>
          <om:OMA>
            <om:OMS name="size" cd="list2"/>
            <om:OMV name="non_linear_constraint_bounds"/>
          </om:OMA>
        </om:OMA>
      </om:OMOBJ>
    </monet:pre-condition>

    <monet:pre-condition>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="f"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS name="in" cd="list2"/>
              <om:OMV name="f"/>
              <om:OMV name="linear_constraint_functions"/>
            </om:OMA>
            <om:OMA>
              <om:OMS cd="equations1" name="linear"/>
              <om:OMV name="f"/>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:pre-condition>

    <monet:pre-condition>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="f"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS name="in" cd="list2"/>
              <om:OMV name="f"/>
              <om:OMV name="non_linear_constraint_functions"/>
            </om:OMA>
            <om:OMA>
              <om:OMS cd="equations1" name="non_linear"/>
              <om:OMV name="f"/>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:pre-condition>

    <monet:post-condition>
      <monet:documentation>
        This states that the simple bounds are satisfied at the
        minimum.
      </monet:documentation>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="i"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMV name="i"/>
              <om:OMA>
                <om:OMS name="integer_interval" cd="interval1"/>
                <om:OMI>1</om:OMI>
                <om:OMV name="n"/>
	      </om:OMA>
            </om:OMA>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMA>
                <om:OMS name="vector_selector" cd="linalg1"/>
                <om:OMV name="i"/>
                <om:OMV name="minimum"/>
	      </om:OMA>
              <om:OMA>
                <om:OMS name="list_selector" cd="list2"/>
                <om:OMV name="i"/>
                <om:OMV name="simple_bounds"/>
              </om:OMA>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:post-condition>

    <monet:post-condition>
      <monet:documentation>
        This states that the linear constraints are satisfied at the
        minimum.
      </monet:documentation>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="i"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMV name="i"/>
              <om:OMA>
                <om:OMS name="integer_interval" cd="interval1"/>
                <om:OMI>1</om:OMI>
                <om:OMA>
                  <om:OMS name="size" cd="list2"/>
                  <om:OMV name="linear_constraint_functions"/>
                </om:OMA>
	      </om:OMA>
            </om:OMA>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMA>
                <om:OMA>
                  <om:OMS name="list_selector" cd="list2"/>
                  <om:OMV name="i"/>
                  <om:OMV name="linear_constraint_functions"/>
                </om:OMA>
                <om:OMV name="minimum"/>
	      </om:OMA>
              <om:OMA>
                <om:OMS name="list_selector" cd="list2"/>
                <om:OMV name="i"/>
                <om:OMV name="linear_constraint_bounds"/>
              </om:OMA>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:post-condition>

    <monet:post-condition>
      <monet:documentation>
        This states that the non-linear constraints are satisfied at the
        minimum.
      </monet:documentation>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="i"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMV name="i"/>
              <om:OMA>
                <om:OMS name="integer_interval" cd="interval1"/>
                <om:OMI>1</om:OMI>
                <om:OMA>
                  <om:OMS name="size" cd="list2"/>
                  <om:OMV name="non_linear_constraint_functions"/>
                </om:OMA>
	      </om:OMA>
            </om:OMA>
            <om:OMA>
              <om:OMS name="in" cd="set1"/>
              <om:OMA>
                <om:OMA>
                  <om:OMS name="list_selector" cd="list2"/>
                  <om:OMV name="i"/>
                  <om:OMV name="non_linear_constraint_functions"/>
                </om:OMA>
                <om:OMV name="minimum"/>
	      </om:OMA>
              <om:OMA>
                <om:OMS name="list_selector" cd="list2"/>
                <om:OMV name="i"/>
                <om:OMV name="non_linear_constraint_bounds"/>
              </om:OMA>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:post-condition>

    <monet:post-condition>
      <monet:documentation>
        This states that for all values x which satisfy all three sets
        of constraints, the value of objective evaluated at x is greater
        than or equal to the minimum.
      </monet:documentation>
      <om:OMOBJ>
        <om:OMBIND>
          <om:OMS cd="quant1" name="forall"/>
          <om:OMBVAR>
            <om:OMV name="x"/>
          </om:OMBVAR>
          <om:OMA>
            <om:OMS name="implies" cd="logic1"/>
            <om:OMA>
              <om:OMS cd="logic1" name="and"/>
              <om:OMA>
                <om:OMS name="in" cd="set1"/>
                <om:OMV name="x"/>
                <om:OMA>
                  <om:OMS cd="sts2"  name="vector_n" />
                  <om:OMV name="n"/>
                  <om:OMV name="R"/>
                </om:OMA>
	      </om:OMA>
              <om:OMBIND>
                <om:OMS cd="quant1" name="forall"/>
                <om:OMBVAR>
                  <om:OMV name="i"/>
                </om:OMBVAR>
                <om:OMA>
                  <om:OMS name="implies" cd="logic1"/>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMV name="i"/>
                    <om:OMA>
                      <om:OMS name="integer_interval" cd="interval1"/>
                      <om:OMI>1</om:OMI>
                      <om:OMV name="n"/>
	            </om:OMA>
                  </om:OMA>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMA>
                      <om:OMS name="vector_selector" cd="linalg1"/>
                      <om:OMV name="i"/>
                      <om:OMV name="x"/>
	            </om:OMA>
                    <om:OMA>
                      <om:OMS name="list_selector" cd="list2"/>
                      <om:OMV name="i"/>
                      <om:OMV name="simple_bounds"/>
                    </om:OMA>
                  </om:OMA>
                </om:OMA>
              </om:OMBIND>
              <om:OMBIND>
                <om:OMS cd="quant1" name="forall"/>
                <om:OMBVAR>
                  <om:OMV name="i"/>
                </om:OMBVAR>
                <om:OMA>
                  <om:OMS name="implies" cd="logic1"/>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMV name="i"/>
                    <om:OMA>
                      <om:OMS name="integer_interval" cd="interval1"/>
                      <om:OMI>1</om:OMI>
                      <om:OMA>
                        <om:OMS name="size" cd="list2"/>
                        <om:OMV name="linear_constraint_functions"/>
                      </om:OMA>
	            </om:OMA>
                  </om:OMA>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMA>
                      <om:OMA>
                        <om:OMS name="list_selector" cd="list2"/>
                        <om:OMV name="i"/>
                        <om:OMV name="linear_constraint_functions"/>
                      </om:OMA>
                      <om:OMV name="x"/>
	            </om:OMA>
                    <om:OMA>
                      <om:OMS name="list_selector" cd="list2"/>
                      <om:OMV name="i"/>
                      <om:OMV name="linear_constraint_bounds"/>
                    </om:OMA>
                  </om:OMA>
                </om:OMA>
              </om:OMBIND>
              <om:OMBIND>
                <om:OMS cd="quant1" name="forall"/>
                <om:OMBVAR>
                  <om:OMV name="i"/>
                </om:OMBVAR>
                <om:OMA>
                  <om:OMS name="implies" cd="logic1"/>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMV name="i"/>
                    <om:OMA>
                      <om:OMS name="integer_interval" cd="interval1"/>
                      <om:OMI>1</om:OMI>
                      <om:OMA>
                        <om:OMS name="size" cd="list2"/>
                        <om:OMV name="non_linear_constraint_functions"/>
                      </om:OMA>
	            </om:OMA>
                  </om:OMA>
                  <om:OMA>
                    <om:OMS name="in" cd="set1"/>
                    <om:OMA>
                      <om:OMA>
                        <om:OMS name="list_selector" cd="list2"/>
                        <om:OMV name="i"/>
                        <om:OMV name="non_linear_constraint_functions"/>
                      </om:OMA>
                      <om:OMV name="x"/>
	            </om:OMA>
                    <om:OMA>
                      <om:OMS name="list_selector" cd="list2"/>
                      <om:OMV name="i"/>
                      <om:OMV name="non_linear_constraint_bounds"/>
                    </om:OMA>
                  </om:OMA>
                </om:OMA>
              </om:OMBIND>
            </om:OMA>
            <om:OMA>
              <om:OMS cd="relation1" name="geq"/>
              <om:OMA>
                <om:OMV name="objective"/>
                <om:OMV name="x"/>
              </om:OMA>
              <om:OMA>
                <om:OMV name="objective"/>
                <om:OMV name="minimum"/>
              </om:OMA>
            </om:OMA>
          </om:OMA>
        </om:OMBIND>
      </om:OMOBJ>
    </monet:post-condition>

  </monet:body>

 </monet:problem>
</monet:definitions>
