An implementation of operators for symbolic algebra systems

  • Authors:
  • G. H. Gonnet

  • Affiliations:
  • Univ. of Waterloo, Waterloo, Ont., Canada

  • Venue:
  • SYMSAC '86 Proceedings of the fifth ACM symposium on Symbolic and algebraic computation
  • Year:
  • 1986

Quantified Score

Hi-index 0.01

Visualization

Abstract

In this paper we propose a design and implementation of operators and their associated functionality for symbolic algebra systems. We believe that operators should blend harmoniously (syntactically and semantically) with the underlying language, in such a way that users will find them convenient and appealing to use. It is “vox populi” that operators are needed in a symbolic algebra system, although there is little consensus on what these should be, what the semantics should be, allowable operations, syntax, etc. All of these ideas, and examples, have been implemented and work as described in our current version of Maple Cha85.During the first Maple retreat83 we established a basic design for operators. The implementation of this design was delayed until some remaining crucial details were finally solved during the 1985 Maple retreat (Sept 1985). In this sense, this paper is the result of the collective work of all the participants of these two retreats.What is an operator? We would like to define an operator to be an abstract data type which describes (at various possible degrees: totally, partially or minimally) an operation to be performed on its arguments. This abstract data type is closely associated with the operations of application and composition, but will also allow most (or all) of the other algebraic operations.We it found useful to have some “witness” examples that we want to solve in an elegant and general form. The two main examples were:(a) How to represent the first derivative of ƒ(x) at 0, i.e. ƒ′(0) (the above really boils down to an effective representation of the differentiation operator)(b) How to represent and to operate with a non-communative multiplication operator, for example matrix multiplication.Of course many systems solve the above problems, but in some cases (in particular for the first example) as an ad-hoc solution. By an ad-hoc solution we mean that, for the differentiation example, this operator cannot be written in terms of the primitives given by the language.It is important to note that there are three issues to resolve:a purely representational/syntactic argument: how to input/output these operators.a purely functional argument: how to perform all the operations we want performed.an integrational argument: how to join operators harmoniously with a symbolic algebra system.