https://github.com/metaindu/MetaphysicsIndustries.Solus/
as distinct from vectors, matrices, and other tensors
vectors can often be represented as a finite array of numbers, but they are actually more than that. they are defined according to a set of axioms (e.g. vector addition and scalar multiplication). The components of vectors don't have to be numbers, so long as the components within a vector satisfy the axioms. For example, functions (e.g. from ℝ to ℝ) can be modeled as infinite-dimension vectors, because they can be added and scaled. Infinite-dimension vectors cannot be represented by finite arrays of numbers. Indeed, functions could even be used as the components of a vector, as in [sin, cos, tan]
. The needs that math and solus have for vectors exceeds what can be represented with mere arrays of numbers.
Sometimes arrays can be used for something that would make no sense for vectors. A good example of this would be encoding strings of characters: "Hello, world" would be [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100]
, but that would make no sense as a vector, since it can't be meaningfully added to anything. Adding another string of the same length wouldn't represent anything meaningful, and might actually overflow. (A counterpoint: a vector space over a finite field of integers from 0 to 255, with certain properties of the operations on that field (e.g. addition roll-over) could probably be useful for doing things like encryption.)
All the foregoing to say that vectors and arrays are not identical concepts and sometimes have mutually-exclusive use cases. Ditto for matrices and higher-roder tensors. Solus should have N-dimensional arrays as a separate concept from tensors.
https://en.wikipedia.org/wiki/Vector_%28mathematics_and_physics%29
https://en.wikipedia.org/wiki/Vector_space
notation will probably borrow from the existing tensor notations, but with some tag or label or even just a conversion function:
[1,2,3]
produces a vector on ℝ^3array([1,2,3])
results in a 1-D array with three elements
The array
function would have to be pretty flexible, i.e. it should be able to take any tensor or array as input and produce an array as output. Alternately, because defining the domain and codomain of such a function would be complicated, we could define multiple functions, one for each dimension: array1d
, array2d
, etc. We'd probably still have to have some N-dimensional conversion function.
Using a conversion function would probably be simpler than trying to define new syntax and modifying the parser.