An n-dimensional 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
fricas
(1) -> )library DEXPR
DistributedExpression is now explicitly exposed in frame initial
DistributedExpression will be automatically loaded when needed from
/var/aw/var/LatexWiki/DEXPR.NRLIB/DEXPR
n:=2
fricas
T:=CartesianTensor(1,n,FRAC POLY INT)
Type: Type
fricas
--T:=CartesianTensor(1,n,HDMP(concat[concat concat
-- [[[script(y,[[k],[j,i]])
-- for i in 1..n]
-- for j in 1..n]
-- for k in 1..n],
-- [script(u,[[i]]) for i in 1..n],
-- [script(v,[[i]]) for i in 1..n] ],FRAC INT))
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
fricas
U:T := unravel([script(u,[[i]]) for i in 1..n])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
fricas
V:T := unravel([script(v,[[i]]) for i in 1..n])
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
the tensor Y operates on their tensor product to
yield a vector
fricas
W:=contract(contract(Y,3,product(U,V),1),2,3)
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
Diagram:
U V
2i 3j
\ /
|
1k
W
or in a more convenient notation:
fricas
W:=(Y*U)*V
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
The algebra Y is commutative if the following tensor
(the commutator) is zero
fricas
K:=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:
fricas
C:=groebner(ravel(K))
Type: List(Polynomial(Integer))
An algebra is associative if:
Y I = I 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.
fricas
test(Y*Y = contract(product(Y,Y),3,4))
Type: Boolean
fricas
test(Y*Y = contract(Y,3,Y,1))
Type: Boolean
fricas
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
fricas
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
fricas
AA := reindex(reindex(Y,[1,3,2])*reindex(Y,[1,3,2]),[1,4,3,2])-Y*Y; ravel(AA)
Type: List(Fraction(Polynomial(Integer)))
fricas
AB:=groebner(ravel(AA))
Type: List(Polynomial(Integer))
fricas
#AB
The Jacobi identity requires the following tensor to be zero:
2 3 6 2 5 6 2 6 3
\ / / \ \ / \ \/
\/ / \ \/ \/\
\/ - \/ - \/
\ / \
4 1 4
fricas
BA := AA - reindex(contract(Y,1,Y,2),[3,1,4,2]); ravel(BA)
Type: List(Fraction(Polynomial(Integer)))
fricas
BB:=groebner(ravel(BA));
Type: List(Polynomial(Integer))
fricas
#BB
A scalar product is denoted by
fricas
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 following
tensor equation holds:
Y I = I Y
U U
fricas
UA := 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.
fricas
)expose MCALCFN
MultiVariableCalculusFunctions is now explicitly exposed in frame
initial
K := jacobian(ravel(UA),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Fraction(Polynomial(Integer)))
fricas
YY := transpose matrix [concat(map(variables,ravel(Y)))::List Symbol];
Type: Matrix(Polynomial(Integer))
fricas
K::OutputForm * YY::OutputForm = 0
Type: Equation(OutputForm
?)
The matrix K transforms the coefficients of the tensor Y
into coefficients of the tensor UA. We are looking for
coefficients of the tensor U such that K transforms Y
into UA=0 for any Y.
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.
fricas
Kd:DMP(concat map(variables,ravel(U)),FRAC INT) := factor determinant(K)
Type: DistributedMultivariatePolynomial
?([u[;1,
1],
u[;1,
2],
u[;2,
1],
u[;2,
2]],
Fraction(Integer))
The scalar product must also be non-degenerate
fricas
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
?([u[;1,
1],
u[;1,
2],
u[;2,
1],
u[;2,
2]],
Fraction(Integer))
therefore U must be symmetric.
fricas
nthFactor(Kd,1)
There are no exposed library operations named nthFactor but there
are 3 unexposed operations with that name. Use HyperDoc Browse or
issue
)display op nthFactor
to learn more about the available operations.
Cannot find a definition or applicable library operation named
nthFactor with argument type(s)
DistributedMultivariatePolynomial([u[;1,1],u[;1,2],u[;2,1],u[;2,2]],Fraction(Integer))
PositiveInteger
Perhaps you should use "@" to indicate the required return type,
or "$" to specify which version of the function you need.
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
fricas
UAS:T := unravel(map(x+->subst(x,U[2,1]=U[1,2]),ravel UA))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))
fricas
--solve(ravel(UAS),removeDuplicates concat map(variables,ravel(US)))
KS := jacobian(ravel(UAS),concat(map(variables,ravel(Y)))::List Symbol);
Type: Matrix(Fraction(Polynomial(Integer)))
fricas
NS:=nullSpace(KS)
Type: List(Vector(Fraction(Polynomial(Integer))))
fricas
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))))
fricas
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.
fricas
UASS:T := unravel(map(x+->subst(x,SS),ravel UAS))
Type: CartesianTensor
?(1,
2,
Fraction(Polynomial(Integer)))