An n-dimensional algebra is represented by a (2,1)-tensor
viewed as an operator with two inputs i,j
and one
output k
. For example in 2 dimensions
axiom
n:=2
axiom
T:=CartesianTensor(1,n,FRAC POLY INT)
Type: Domain
axiom
Y:T := unravel(concat concat
[[[script(y,[[k],[j,i]])
for i in 1..n]
for j in 1..n]
for k in 1..n]
)
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Given two vectors and
axiom
P:T := unravel([script(p,[[i]]) for i in 1..n])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
axiom
Q:T := unravel([script(q,[[i]]) for i in 1..n])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
the tensor operates on their tensor product to
yield a vector
axiom
R:=contract(contract(Y,3,product(P,Q),1),2,3)
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Pictorially:
Q P
2j 3i
\ /
|
1k
R
In Axiom we may use the more convenient tensor inner
product denoted by *
that combines tensor product with
a contraction on the last index of the first tensor and
the first index of the second tensor.
axiom
R:=(Y*P)*Q
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
An algebra is commutative if the tensor
(the commutator) is zero:
Y - X
Y
axiom
XY:=Y-reindex(Y,[1,3,2])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
A basis for the ideal defined by the coefficients of the
commutator is given by:
axiom
groebner(ravel(XY))
Type: List(Polynomial(Integer))
The algebra Y
is anti-commutative if the tensor
(the anti-commutator) is zero:
Y + X
Y
axiom
XX:=Y+reindex(Y,[1,3,2])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
A basis for the ideal defined by the coefficients of the
anti-commutator is given by:
axiom
groebner(ravel(XX))
Type: List(Polynomial(Integer))
An algebra is associative if:
Y = Y
Y Y
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
YY := reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])-Y*Y; ravel(YY)
Type: List(Fraction(Polynomial(Integer)))
The Jacobi identity requires the following (3,1)-tensor
to be zero:
Y - Y - X
Y Y Y
Y
2 3 6 2 5 6 2 6 3
\ / / \ \ / \ \/
\/ / \ \/ \/\
\/ - \/ - \/
\ / \
4 1 4
axiom
YYX := YY - reindex(contract(Y,1,Y,2),[3,1,4,2]); ravel(YYX)
Type: List(Fraction(Polynomial(Integer)))
A scalar product is denoted by the (2,0)-tensor
axiom
U:T := unravel(concat
[[script(u,[[],[j,i]])
for i in 1..n]
for j in 1..n]
)
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Definition 1
We say that the scalar product is "associative" if the tensor
equation holds:
Y = Y
U U
In other words, if the following tensor is zero
axiom
YU := reindex(reindex(U,[2,1])*reindex(Y,[1,3,2]),[3,2,1])-U*Y
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Definition 2
An algebra with a non-degenerate associative scalar product is
called ''pre-Frobenius''.
We may consider the problem where multiplication Y is given,
and look for all associative scalar products U = U(Y)
or we
may consider an scalar product U as given, and look for all
algebras Y=Y(U) such that the scalar product is associative.
This problem can be solved using linear algebra.
axiom
)expose MCALCFN
MultiVariableCalculusFunctions is now explicitly exposed in frame
initial
K := jacobian(ravel(YU),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Fraction(Polynomial(Integer)))
axiom
yy := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol];
Type: Matrix(Polynomial(Integer))
axiom
K::OutputForm * yy::OutputForm = 0
Type: Equation(OutputForm
?)
The matrix K
transforms the coefficients of the tensor
into coefficients of the tensor . We are looking for
coefficients of the tensor such that K
transforms the
tensor into for any .
A necessary condition for the equation to have a non-trivial
solution is that the matrix K
be degenerate.
Theorem 1
The scalar product of all 2-dimensional pre-Frobenius
algebras is symmetric.
Proof: Consider the determinant of the matrix K
above.
axiom
Kd:DMP(concat map(variables,ravel(U)),FRAC INT) := factor determinant(K)
Type: DistributedMultivariatePolynomial
?([*002u11,
*002u12,
*002u21,
*002u22],
Fraction(Integer))
The scalar product must also be non-degenerate
axiom
Ud:DMP(concat map(variables,ravel(U)),FRAC INT) := determinant [[U[i,j] for j in 1..n] for i in 1..n]
Type: DistributedMultivariatePolynomial
?([*002u11,
*002u12,
*002u21,
*002u22],
Fraction(Integer))
therefore U must be symmetric.
axiom
nthFactor(Kd,1)
Type: DistributedMultivariatePolynomial
?([*002u11,
*002u12,
*002u21,
*002u22],
Fraction(Integer))
axiom
US:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel U))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Theorem 2
All 2-dimensional algebras with associative scalar product are symmetric.
Proof: The basis of the null space of the symmetric
K
matrix are all symmetric
axiom
YUS:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel YU))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
axiom
KS := jacobian(ravel(YUS),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Fraction(Polynomial(Integer)))
axiom
NS:=nullSpace(KS)
Type: List(Vector(Fraction(Polynomial(Integer))))
axiom
SS:=map((x,y)+->x=y,concat map(variables,ravel Y),
entries reduce(+,[p[i]*NS.i for i in 1..#NS]))
Type: List(Equation(Fraction(Polynomial(Integer))))
axiom
YS:T := unravel(map(x+->subst(x,SS),ravel Y))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
This is a 4-parameter family of 2-d pre-Frobenius algebras with
a given admissible (i.e. symmetric) scalar product.
axiom
UASS:T := unravel(map(x+->subst(x,SS),ravel YUS))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
axiom
J := jacobian(ravel(YU),concat(map(variables,ravel(U)))::List Symbol);
Type: Matrix(Fraction(Polynomial(Integer)))
axiom
uu := transpose matrix [concat(map(variables,ravel(U)))::List Symbol];
Type: Matrix(Polynomial(Integer))
axiom
J::OutputForm * uu::OutputForm = 0
Type: Equation(OutputForm
?)
The matrix J
transforms the coefficients of the tensor
into coefficients of the tensor . We are looking for
coefficients of the tensor such that J
transforms the
tensor into for any .
A necessary condition for the equation to have a non-trivial
solution is that all 70 of the 4x4 sub-matrices of J
are
degenerate. To this end we can form the polynomial ideal of
the determinants of these sub-matrices.
axiom
JP:=ideal concat concat concat
[[[[ determinant(
matrix([row(J,i1),row(J,i2),row(J,i3),row(J,i4)]))
for i4 in (i3+1)..maxRowIndex(J) ]
for i3 in (i2+1)..(maxRowIndex(J)-1) ]
for i2 in (i1+1)..(maxRowIndex(J)-2) ]
for i1 in minRowIndex(J)..(maxRowIndex(J)-3) ];
Type: PolynomialIdeals
?(Fraction(Integer),
IndexedExponents
?(Symbol),
Symbol,
Polynomial(Fraction(Integer)))
axiom
#generators(%)
Theorem 3
A 2-d algebra is pre-Frobenius if it is associative,
commutative, anti-commutative or if it satisfies the
Jacobi identity.
Proof
axiom
in?(JP,ideal ravel YY) -- associative
Type: Boolean
axiom
in?(JP,ideal ravel XY) -- commutative
Type: Boolean
axiom
in?(JP,ideal ravel XX) -- anti-commutative
Type: Boolean
axiom
in?(JP,ideal ravel YYX) -- Jacobi identity
Type: Boolean