=============================== Types and Operators =============================== The careful definition of abstract types and the manipulation and handling of instances by operators is the heart of any computational algebra system (or indeed any data-driven symbolic system). The [R5R2] defines a simple "tower" of number subtypes (p.19): number complex real rational integer Each subtype is a subset of the subtype above it, so that each rational is a complex but not every real is an integer. Additionally, every Scheme number is either exact or inexact. The selection of the appropriate implementation of operations like addition, exponentiation, or rounding for arbitrary combinations of numbers and their return types is usually called *operator dispatch*. For an operator of N arguments of M possible types, one can imagine an M**N cell table defining the appropriate procedure (or built-in hardware instruction) and return type for each combination of types. Such a table would be come unmanagably large for systems with even a modest number of operators and types: for example each of the basic binary operators (*, /, -, +, exp) would require it's own 2**(2*5)=1024 element table for the basic types described above. Procedural operator dispatch and coersion allow for more natural handling of type heirarchies. More rigorously defined algebras do not necessarily follow the simple strict ordering of types like the Scheme number tower, or even a proper tree structure: [figure: geometrical spaces from Merseve Geometry] [figure: number types from Merseve Algebra] [figure: math object hierarchy from Tegmark?] Types and Operators for Differential Geometry and Field Theories ------------------------------------------------------------------------ [topics: disjointness, Implementation ------------------------------------------------------------------------