The remaining elements limit, integrals, definite integrals, differentiation, partial differentiation, sums, and products have a similar structure and can be treated in a similar way when translating. Following the classification in section 3.2 these elements go in the operators group.
What characterises these elements is that in MathML they all specify
their bound variables explicitly using the <bvar>
construct.
However, in OpenMath, the bound variables are not explicitly stated.
OpenMath expressions are the result of applying the symbol on a lambda
expression. In order to determine the bound variable the parser must
retrieve it from the lambda expression. Let us illustrate this problem
by contrasting two equivalent expressions on figure 3.2
In MathML, the index variable is explicitly stated within the
<bvar>
tags. It is part of the <sum/>
syntax and is
obligatory. In OpenMath, the sum symbol takes as arguments an
interval giving the range of summation and a function. Specifying the
bound variable is not part of the syntax. It is contained inside the
lambda expression. This same difference in structure exists with the
other operators mentioned above.
When translating any of these elements, it is necessary to support automatic generation and decoding of lambda expressions. Thus when going from OpenMath to MathML, the bound variable and the function described by the lambda expression need to be extracted to generate valid MathML.
When passing from MathML to OpenMath, the variable contained inside the
<bvar>
tags and the function given as argument would have to be
encoded as a lambda expression. This is possible for all MathML
expressions of this type, and correct OpenMath is simple to produce.
Thus by retrieving bound variable information from OpenMath lambda
expressions, it is possible to translate to MathML. But OpenMath
grammar does not impose the use of lambda expressions to define bound
variables. Because of this flexibility, it is possible to construct
OpenMath expressions which cannot be translated to MathML by an
automatic translator. If one looks at the "calculus1"
CD, the
OpenMath examples of int and defint do not specify their
variable of integration. A parser would not determine the variables of
integration and an equivalent MathML expression would not be possible.
This is a problem for an OpenMath/MathML translator with no easy solution. A parser intelligent enough to extract the correct bound variables of an expression is very difficult to implement. We recommend that OpenMath expressions which do not specify all the necessary information for translation are ignored. The use of lambda expressions should be required.