The Basic Situation


As OpenMath does not currently contain members who are familiar with the intricacies of communications in parallel computation we have not attempted to create a design specifically suitable for such use. Instead, we shall mostly assume that communication is point-to-point: i.e. just two processes are talking to one another. The term process is used loosely, and could mean two threads of the same process, for instance.

The basic situation we consider is that of two applications, and , where wants to request that perform some processing on a mathematical object currently residing inside . So that can do 's bidding, must send to two pieces of information: the object and a command saying what to do with it. The command is specified by a simple code, while the object generally contains a more complicated structure; so our interest is mostly directed toward the latter. In obeying the command is perfectly entitled to converse with other applications in a similar manner.

Note that OpenMath does not require that know the identity of (e.g. consider the scenario where the communications medium is email). The interprocess link itself may be either uni-directional (e.g. email) or bi-directional (e.g. socket); the design of OpenMath allows for either possibility. If the link is bi-directional then the command itself specifies whether should send back to a result of some sort, and, if so, what this result means.

While OpenMath is concerned with almost every aspect of communication needed between and , by far the hardest part has been finding a good way to allow the transmission of a mathematical object which preserves its meaning, and it is to this that most effort has been devoted. We observe that the internal representations in applications and of a particular mathematical object may be quite different from one another, and that this change of representation must occur automatically when sending data using OpenMath. Moreover, OpenMath has no control over what these internal representations might be.

We stress that the OpenMath encoding of a mathematical object captures the semantics of that object, unlike, for example, a representation which is more concerned with the visual appearance of the printed form. Whereas it is not too difficult to produce a representation given the OpenMath encoding of an object, the reverse is generally impossible without extra contextual information due to ambiguities in the usual printed form: for example, could be an open interval in the real line or a point on the plane, or various other things.

At the outset OpenMath was mostly concerned with handling the sort of data which computer algebra systems typically deal with, but it quickly became apparent that a much wider view was necessary. Currently the types of system which we anticipate will make use of OpenMath include: (in no special order)


up The OpenMath Project

next Design Goals