-dimensional vector space representing Grassmann algebra with generators
An algebra is represented by a (2,1)-tensor
viewed as a linear operator with two inputs and one
output . For example:
axiom
n:=2
axiom
dim:=2^n
axiom
T:=CartesianTensor(1,dim,FRAC POLY INT)
Type: Type
axiom
Y:T := unravel(concat concat
[[[script(y,[[i,j],[k]])
for i in 1..dim]
for j in 1..dim]
for k in 1..dim]
)
Type: CartesianTensor
?(1,
4,
Fraction(Polynomial(Integer)))
Generate structure constants for Grassmann Algebra
axiom
-- Construct a basis for the Grassmann algebra
GA:=AntiSymm(INT,[subscript(g,[i]) for i in 1..n])
Type: Type
axiom
B:=[exp(reverse concat([0 for i in 1..n-length(x)],wholeRagits(x::RADIX(2))))$GA for x in 0..dim-1]
Type: List(AntiSymm
?(Integer,
[*01g1,
*01g2]))
axiom
-- Compute the multiplication table
M:=matrix [[B.i * B.j for j in 1..dim] for i in 1..dim]
Type: Matrix(AntiSymm
?(Integer,
[*01g1,
*01g2]))
axiom
-- The structure constants of the algebra are given by the coefficients
-- of the polynomials in the multiplication table with respect to the basis
S(y)==map(x+->coefficient(x,y),M)
Type: Void
axiom
Yg:T:=unravel concat concat(map(S,B)::List List List FRAC POLY INT)
axiom
Compiling function S with type AntiSymm(Integer,[*01g1,*01g2]) ->
Matrix(Integer)
Type: CartesianTensor
?(1,
4,
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..dim]
for j in 1..dim]
)
Type: CartesianTensor
?(1,
4,
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 (3,0)-tensor:
i j k i j k i j k
\ | / \/ / \ \/
\|/ = \ / - \ /
0 0 0
(three-point function) is zero.
axiom
YU := reindex(reindex(U,[2,1])*reindex(Yg,[1,3,2]),[3,2,1])-U*Yg
Type: CartesianTensor
?(1,
4,
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
This problem can be solved using linear algebra.
axiom
)expose MCALCFN
MultiVariableCalculusFunctions is now explicitly exposed in frame
initial
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
?)
axiom
nrows(J)
axiom
ncols(J)
The matrix J
transforms the coefficients of the tensor
into coefficients of the tensor . We are looking for
the general linear family of tensors such that
J
transforms into for any such .
If the null space of the J
matrix is not empty we can use
the basis to find all non-trivial solutions for U:
axiom
NJ:=nullSpace(J)
Type: List(Vector(Fraction(Polynomial(Integer))))
axiom
SS:=map((x,y)+->x=y,concat map(variables,ravel U),
entries reduce(+,[p[i]*NJ.i for i in 1..#NJ]))
Type: List(Equation(Fraction(Polynomial(Integer))))
axiom
Ug:T := unravel(map(x+->subst(x,SS),ravel U))
Type: CartesianTensor
?(1,
4,
Fraction(Polynomial(Integer)))
This defines a family of pre-Frobenius algebras:
axiom
test(unravel(map(x+->subst(x,SS),ravel YU))$T=0*YU)
Type: Boolean
The scalar product must be non-degenerate:
axiom
Ud := determinant [[Ug[i,j] for j in 1..dim] for i in 1..dim]
Type: Fraction(Polynomial(Integer))
Co-pairing
axiom
gU:T:=unravel concat(transpose(1/Ud*adjoint([[Ug[i,j] for j in 1..dim] for i in 1..dim]).adjMat)::List List FRAC POLY INT)
Type: CartesianTensor
?(1,
4,
Fraction(Polynomial(Integer)))
axiom
-- dimension
contract(contract(gU,1,Ug,1),1,2)
Type: CartesianTensor
?(1,
4,
Fraction(Polynomial(Integer)))