An ndimensional algebra is represented by a (1,2)tensor
viewed as an operator with two inputs i,j
and one
output k
. For example in 2 dimensions
axiom
)library DEXPR
DistributedExpression is now explicitly exposed in frame initial
DistributedExpression will be automatically loaded when needed from
/var/zope2/var/LatexWiki/DEXPR.NRLIB/DEXPR
n:=2
axiom
T:=CartesianTensor(1,n,DEXPR INT)
Type: Domain
axiom
Y:=unravel(concat concat
[[[script(y,[[k],[j,i]])
for i in 1..n]
for j in 1..n]
for k in 1..n]
)$T
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
Given two vectors and
axiom
U:=unravel([script(u,[[i]]) for i in 1..n])$T
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
axiom
V:=unravel([script(v,[[i]]) for i in 1..n])$T
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
the tensor Y
operates on their tensor product to
yield a vector
axiom
W:=contract(contract(Y,3,product(U,V),1),2,3)
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
Diagram:
U V
2i 3j
\ /

1k
W
or in a more convenient notation:
axiom
W:=(Y*U)*V
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
The algebra Y
is commutative if the following tensor
(the commutator) is zero
axiom
K:=Yreindex(Y,[1,3,2])
Type: CartesianTensor
?(1,
2,DistributedExpression?(Integer))
A basis for the ideal defined by the coefficients of the
commutator is given by:
axiom
C:=groebner(ravel(K))
Type: List(Polynomial(Integer))
An algebra is associative if:
Y I = I Y
Y Y
2 3 5 6
\ / \ /
 
1 4
Note: right figure is mirror image of left!
2 3 6 2 5 6 2 3 4
\/ / \ \/ \  /
\/ = \/ = \/
\ / 
4 1 1
In other words an algebra is associative if and only
if the following (3,1)tensor
is zero.
axiom
test(Y*Y = contract(product(Y,Y),3,4))
Type: Boolean
axiom
test(Y*Y = contract(Y,3,Y,1))
Type: Boolean
axiom
test(reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2]) =
reindex(contract(product(Y,Y),1,5),[3,1,2,4]))
Type: Boolean
axiom
test(reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])=reindex(contract(Y,1,Y,2),[3,1,2,4]))
Type: Boolean
axiom
AA := reindex(contract(Y,1,Y,2),[3,1,2,4])Y*Y; ravel(A)
There are 1 exposed and 0 unexposed library operations named ravel
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op ravel
to learn more about the available operations. Perhaps
packagecalling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named ravel
with argument type(s)
Variable(A)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
A:=groebner(ravel(A))
There are 1 exposed and 0 unexposed library operations named ravel
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op ravel
to learn more about the available operations. Perhaps
packagecalling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named ravel
with argument type(s)
Variable(A)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
#A
There are 2 exposed and 1 unexposed library operations named #
having 1 argument(s) but none was determined to be applicable.
Use HyperDoc Browse, or issue
)display op #
to learn more about the available operations. Perhaps
packagecalling the operation or using coercions on the arguments
will allow you to apply the operation.
Cannot find a definition or applicable library operation named #
with argument type(s)
Variable(A)
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.