1. Base Reference Document
OpenAxiom is a descendent of the AXIOM computer algebra system as described by Richard Jenks and Robert Sutor in AXIOM: The Scientific Computation System. That book is the base reference document for OpenAxiom.
2. Changes From The Base Document
2.1. OpenAxiom-1.3.0
This release introduces the following changes from the base document2.1.1 Interpreter
2.1.2. Compiler
- The compiler now treats
^as alias for**. Previously, it was an informal understanding that the operator^(which is not documented in the Axiom Book) acts like the exponentiation operator**(described documented in the Axiom Book). However, that was not mechanically enforced and library writers had to remember and offer duplicate definitions. Those ad hoc methods are no longer needed: The compiler systematically make them synonymous. - The compiler now rejects ambiguous left hand sides of definitions where parameter types are left out for inference. Previously, the compiler would pick the first signature from some mostly random order, with a warning.
- For categories with default implementations, the compiler can be directed to compile only the purely category part (exports), or only the default implementations (category packages).
- The compiler now supports a Foreign Function Interface. In particular, signatures for external entities may be declared at capsule level. Currently, only ISO C functions are supported, but future releases may support ISO C++ and other mainstream languages.
- The parsing of signature for operators has been improved.
Previously, operator names needed to be quoted in signature.
That is not longer needed. For instance, previously, one
had to write (at category level)
"*": (%,%) -> % _/_\: (%,%) -> % _not: % -> %With this release of OpenAxiom and onward, one can simply write*: (%,%) -> % /\: (%,%) -> % not: % -> %which is much simpler to read, write, and much more regular. - The compiler now supports is-case pattern matching.
See ??? for more discussions. The new pattern matching syntax
is useful for structuring retractions, and also for
ddomain recovery from expressions of type
Any. - The compiler now supports the loop control transfer operator
iterateinrepeatloops &mdash previously, the construct was accepted only in scripts (not libraries). That discrepency is now ended.
2.1.3. Interpreter
- Declared variable with no specified values are now handled as if symbolic value with a specified type.
- The interpreter now parses a disjunctive expression
involving the 'is' operator the obvious way. E.g. Now
T is Integer or T has Ringis now understood as(T is Integer) or (T has Ring) - The interpreter now handles existentially quantified or universally quantified expressions
2.1.3. Algebra
The following types have been added to OpenAxiom-1.3.0- The domain
Booleanand categoryBitAggregateno longer export the operation^for logical negation. Use the operatornotwhich is the canonical and documented operator. - The domain
InputFormnow has a new exported signatureparseString: String -> %for parsing expressions given as string. - The domain
Booleannow belongs to the categoryOrderedFinite. - The domain
KleeneTrivalentLogicis added. It implements Stephen Kleene's 3-valued propositional logic. - For file orinted I/O, new domains have been added:
IOMode: This domains defines three constants to indicate the direction of file I/O operations.InputBinaryFile: This domains implements the basic input operations on binary files.OutputBinaryFile: This domains implements the basic output operations on binary files.
- The domain
BinaryFilehas been replaced by three specific domains:InputBinaryFile: datatype for input file open in binary mode;OutputBinaryFile: datatype for output file open in binary mode;InputOutputBinaryFile: datatype for input and output file open in binary mode.
- Three new categories are introduced, related to conversions:
CoercibleFrom: This category is the mirror image of the standard categoryCoercibleTo.HomotopicTo: This category is the symmetrization of the categoryCoercibleTo.ConvertibleFrom: This category is the mirror image ofConvertibleTo.
- Previous releases defined instantiations of the domain
constructor
Expressionas satisfying the categoryOrderedSet. That was both confusing and incorrect in conjunction with other algebraic structures. From now on,Expression(T)no longer satisfiesOrderedSet. - Three new categories have been added:
LeftLinearSetRightLinearSetLinearSet
AbelianGroupextendsLeftLinearSet Integer. The parameterized category constructorLeftModuleextendsLeftLinearSet. Similarly, the categoryRightModuleextendsRightLinearSet. - The domain
Anyhas been reworked. In particular, the operationdomainOf,objectOf, andshowTypeInOutputhave been removed. Equality of two objects of domainAnyis equality according to the underlying domain, if that domain belongs to the categoryBasicType;; otherwise, it is equality of storage locations.