-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,EXPR INT)
Type: Type
axiom
--T:=CartesianTensor(1,dim,FRAC POLY INT)
X:List T := [unravel [(i=j => 1;0) for j in 1..dim] for i in 1..dim]
Type: List(CartesianTensor
?(1,
4,
Expression(Integer)))
axiom
X(1),X(2)
Type: Tuple(CartesianTensor
?(1,
4,
Expression(Integer)))
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,
Expression(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,
Expression(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,
Expression(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
ω := reindex(reindex(U,[2,1])*reindex(Yg,[1,3,2]),[3,2,1])-U*Yg
Type: CartesianTensor
?(1,
4,
Expression(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 ω,concat(map(variables,ravel U))::List Symbol);
Type: Matrix(Expression(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(Expression(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(Expression(Integer)))
axiom
Ug:T := unravel(map(x+->subst(x,SS),ravel U))
Type: CartesianTensor
?(1,
4,
Expression(Integer))
This defines a family of pre-Frobenius algebras:
axiom
test(unravel(map(x+->subst(x,SS),ravel ω))$T=0*ω)
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: Expression(Integer)
Definition 3
Co-pairing
axiom
Ωg: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,
Expression(Integer))
dimension
Ω
U
axiom
contract(contract(Ωg,1,Ug,1),1,2)
Type: CartesianTensor
?(1,
4,
Expression(Integer))
Definition 4
Co-multiplication
axiom
λg:=reindex(contract(contract(Ug*Yg,1,Ωg,1),1,Ωg,1),[2,3,1]);
Type: CartesianTensor
?(1,
4,
Expression(Integer))
axiom
-- just for display
reindex(λg,[3,1,2])
Type: CartesianTensor
?(1,
4,
Expression(Integer))
i
λ=Ω
axiom
test(λg*X(1)=Ωg)
Type: Boolean
Definition 5
Co-unit
i
U
axiom
ιg:=X(1)*Ug
Type: CartesianTensor
?(1,
4,
Expression(Integer))
Y=U
ι
axiom
test(ιg * Yg = Ug)
Type: Boolean
For example:
axiom
Ug0:T:=unravel eval(ravel Ug,[p[1]=1,p[2]=0,p[3]=0,p[4]=1])
Type: CartesianTensor
?(1,
4,
Expression(Integer))
axiom
Ωg0:T:=unravel eval(ravel Ωg,[p[1]=1,p[2]=0,p[3]=0,p[4]=1])
Type: CartesianTensor
?(1,
4,
Expression(Integer))
axiom
λg0:T:=unravel eval(ravel λg,[p[1]=1,p[2]=0,p[3]=0,p[4]=1]);
Type: CartesianTensor
?(1,
4,
Expression(Integer))
axiom
reindex(λg0,[3,1,2])
Type: CartesianTensor
?(1,
4,
Expression(Integer))