next up previous contents
Next: Intervals Up: Differences in Structure Previous: Selector functions and Matrices   Contents


Bound Variables

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

Figure 3.2: Use of bound variables
\begin{figure}
\begin{tabular}{ l l }
\par {\bf OpenMath} & {\bf MathML}\\
& ...
...ert & \\
\verb*\vert</OMOBJ>\vert & \\
\par\end{tabular}
\par\par\end{figure}

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.


next up previous contents
Next: Intervals Up: Differences in Structure Previous: Selector functions and Matrices   Contents
root
2000-05-01