## ## The main test func, returns true if the algebra is a Majorana algebra and ## enters a break loop if not. ##
InstallGlobalFunction(MajoranaAlgebraTest,
function(rep)
if IsBound(rep.innerproducts) then if MAJORANA_TestFrobeniusForm(rep) = false then
return false; elif MAJORANA_TestInnerProduct(rep) = false then
return false; fi; fi;
if MAJORANA_TestPrimitivity(rep) = false then
return false; fi;
return true;
end );
## ## Tests that the vectors stored in rep.evecs are indeed eigenvectors ##
InstallGlobalFunction(MAJORANA_TestEvecs,
function(rep)
local u, v, i, ev, x, y;
# Loop over the representatives of the orbits of G on T for i in rep.setup.orbitreps do
u := SparseMatrix(1, Size(rep.setup.coords), [[i]], [[1]], Rationals);
# For each of the three eigenvalues 0, 1/4, 1/32, check that the eqn u*v = ev*v holds for ev in rep.eigenvalues do for v in Iterator( rep.evecs[i].(String(ev)) ) do
x := MAJORANA_AlgebraProduct(u, v, rep.algebraproducts, rep.setup);
if not x in [ev*v, false, fail] then
Error("evecs"); fi;
od;
od;
od;
return true;
end );
# Checks if algebra obeys the fusion rules, outputs list which is empty if it does obey fusion rules
InstallGlobalFunction(MAJORANA_TestFusion,
function(rep)
local dim, u, i, evals, new, a, b, ev, x;
dim := Size(rep.setup.coords);
# Loop over the representatives of the orbits of G on T for i in rep.setup.orbitreps do
u := SparseMatrix(1, dim, [[i]], [[1]], Rationals);
# Loop over all pairs of eigenvalues and perform fusion, storing new vecs in <new> for evals in UnorderedTuples( RecNames(rep.evecs[i]), 2 ) do
new := rec();
for ev in RecNames(rep.evecs[i]) do
new.(ev) := SparseMatrix(0, dim, [], [], Rationals);
od;
for a in Iterator( rep.evecs[i].(evals[1]) ) do for b in Iterator( rep.evecs[i].(evals[2]) ) do
MAJORANA_FuseEigenvectorsNoForm( a, b, u, evals, new, rep );
od;
od;
# Check whether the new eigenvectors found by fusion are indeed eigevectors for ev in rep.eigenvalues do
new.(String(ev)) := EchelonMatDestructive(new.(String(ev))).vectors;
for a in Iterator( new.(String(ev)) ) do
x := MAJORANA_AlgebraProduct(u, a, rep.algebraproducts, rep.setup); if not x in [ev*a, false, fail] then
Error("The algebra does not obey the fusion rules"); fi;
od;
od;
od;
od;
return true;
end );
# ## Checks if algebra obeys axiom M1 ##
InstallGlobalFunction(MAJORANA_TestFrobeniusForm,
function(rep)
local ErrorM1, # setup of indices which do not obey Fusion
j, # loop over algebra products
k, # loop over setup.coords
l,
p, # second product
dim, # size of setup.coords
x, # first inner product
y, # second inner product
u, # vectors
w, #
v; #
dim := Size(rep.setup.coords);
ErrorM1:=[];
for j in Filtered([1..Size(rep.algebraproducts)], i -> rep.algebraproducts[i] <> fail) do if not rep.algebraproducts[j] in [false, fail] then for k in Filtered([1..dim], i -> rep.setup.nullspace.heads[i] = 0) do for l in [rep.setup.pairreps[j], Reversed(rep.setup.pairreps[j])] do
u := SparseMatrix(1, dim, [[l[1]]], [[1]], Rationals);
v := SparseMatrix(1, dim, [[l[2]]], [[1]], Rationals);
w := SparseMatrix(1, dim, [[k]], [[1]], Rationals);
p := MAJORANA_AlgebraProduct(v,w,rep.algebraproducts,rep.setup);
if not p in [fail, false] then
x := MAJORANA_InnerProduct(u,p,rep.innerproducts, rep.setup);
y := MAJORANA_InnerProduct(rep.algebraproducts[j],w,rep.innerproducts, rep.setup);
if x <> false and y <> false and x <> y then
return false; # Error("Axiom M1");
Add(ErrorM1,[l[1], l[2] ,k]); fi;
fi;
od;
od; fi;
od;
# if Size(ErrorM1) > 0 then Error("Axiom M1"); fi;
return true;
end );
InstallGlobalFunction( MAJORANA_TestPrimitivity,
function(rep)
local i, dim, u, v, j, x, mat, espace, basis;
if false in rep.algebraproducts then return fail; fi;
if MAJORANA_Dimension(rep) = 0then return true; fi;
dim := Size(rep.setup.coords);
basis := Filtered([1..dim], i -> rep.setup.nullspace.heads[i] = 0);
for i in rep.setup.orbitreps do
u := SparseMatrix(1, dim, [[i]], [[1]], Rationals);
mat := SparseMatrix(0, Size(basis), [], [], Rationals);
for j in basis do
v := SparseMatrix(1, dim, [[j]], [[1]], Rationals);
x := MAJORANA_AlgebraProduct(u, v, rep.algebraproducts, rep.setup);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.