The most important feature of this package is to determine the number N_d,r(q) for a given integer r and all d. Within the output the size of the field q is kept variable and is handled as an indeterminate. Hence, the PORC function N_d,r(q) is given as a multivariate polynomial where every mathrmgcd is treated as an indeterminate, too.
It is useful to introduce the codimension k := d-r as there are some symmetries that can be used.
Within the ClassTwoAlg PORC functions are considered as multivariate polynomials. To avoid problems with different indeterminates not coming from this package, an OFFSET_VARS
for the internal numbering of the indeterminates of this package was used. Its default value is 1000. All indeterminates of this package are polynomials over the rationals.
The function NameToIndet
(2.1-1) creates, depending on the given input, the indeterminates for the PORC functions. If the input is the string "q"
then the indeterminate q is created having the GAP internal number OFFSET_VAR
. If a list [n,k]
is given then the indeterminate is displayed as (q-k,n) and is used for the greatest common divisor of q-k and n.
‣ NameToIndet ( name ) | ( function ) |
Returns an indeterminate over the rationals which is displayed as desired. If name is given as string "q", the indeterminate will be displayed as q. Internally, this indeterminate has got number OFFSET_VARS
. If name is given as pair [n,k], the ineterminate will be displayed as (q-k,n). The internal number is OFFSET_VARS
+ n ⋅ (n - 1) / 2 + (k mod n)
gap> NameToIndet("q"); q gap> NameToIndet([5,3]); (q-3,5) gap> IndeterminateName(FamilyObj(NameToIndet("q")),1000); "q" gap> IndeterminateName(FamilyObj(NameToIndet("q")),1013); "(q-3,5)" gap> FieldOfPolynomial(NameToIndet("q")); FieldOfPolynomial(NameToIndet([3,2])); Rationals Rationals
‣ ValueOfPorcPoly ( f, q ) | ( function ) |
Given a PORC function f, this function evaluates f at q.
gap> f := 3*NameToIndet("q") + NameToIndet("q")*NameToIndet([5,2]) > - 3*NameToIndet([3,1]); q*(q-2,5)+3*q-3*(q-1,3) gap> ValueOfPorcPoly(f,7); 47
In case of a function being the quotient of two PORC functions an extension of the previous function is implemented.
‣ ValueOfPorcRatFun ( f, q ) | ( function ) |
Given a PORC function f, this function evaluates f at q.
gap> g := 3*NameToIndet("q") + 2*NameToIndet("q")*NameToIndet([5,3]) > - 4*NameToIndet([3,2]);; gap> h := f/g; (q*(q-2,5)+3*q-3*(q-1,3))/(2*q*(q-3,5)+3*q-4*(q-2,3)) gap> ValueOfPorcRatFun(h, 7); 47/31 gap> ValueOfPorcPoly(f,7)/ValueOfPorcPoly(g,7); 47/31
‣ NumberOfClassTwoAlgebras ( r, action[, k] ) | ( function ) |
Given a natural number r the function computes PORC functions in the indeterminate q whose values, evaluated at q, yield the number of isomorphism classes of certain algebras depending on the given action.
If k is not given, then all PORC functions will be computed simultaneously and the output is a list of PORC functions such that the i-th function belongs to the codimension i. Note that there is a symmetry between those functions, such that the latter half of functions is not printed (see section 3.1).
If the codimension k is given, only the PORC function giving the number of isomorphism classes of codimension k=d-r is computed.
So far the following actions are implemented:
Kronecker: Yields the number of isomorphism classes of nilpotent algebras of class two.
gap> NumberOfClassTwoAlgebras(2,Kronecker); [ q-(q-0,2)+5, 3*q-(q-0,2)+6 ] gap> gap> NumberOfClassTwoAlgebras(2,Kronecker,1); q-(q-0,2)+5 gap> gap> N := NumberOfClassTwoAlgebras(3,Kronecker,2);; gap> ValueOfPorcPoly(N, 91); 574319955425
It might be useful to save the computed PORC functions in a separate file that can be imported to another GAP sesscion. For this purpose the functions PorcToExt
(2.3-1) and PorcByExt
(2.3-2) can be used. The PORC function is then converted into the GAP external representation of polynomials.
As the main algorithm NumberOfClassTwoAlgebras
(2.2-1) produces (depending on the input) PORC functions or lists of PORC functions, the functions PorcToExt
(2.3-1) and PorcByExt
(2.3-2) are designed so that they can interpret both: a single function or a list of functions.
‣ PorcToExt ( porc[, file] ) | ( function ) |
Given a PORC function porc the external representation of porc is returned. If the second argument file is given and if it is a writable file then the output is directly printed into that file.
Instead of a single PORC function porc can also be a list of PORC function or even a matrix of PORC function. The nesting depth must not be greater than two.
gap> N := NumberOfClassTwoAlgebras(3,Kronecker,3);; gap> e := PorcToExt(N); [ [ [ ], 173/2, [ 1007, 1 ], 1, [ 1004, 1 ], 1, [ 1003, 1 ], -1/2, [ 1001, 1 ], -20, [ 1000, 1 ], 223/2, [ 1000, 1, 1007, 1 ], 2, [ 1000, 1, 1004, 1 ], 4, [ 1000, 1, 1003, 1 ], -1/2, [ 1000, 1, 1001, 1 ], -22, [ 1000, 2 ], 177/2, [ 1000, 2, 1007, 1 ], 1, [ 1000, 2, 1004, 1 ], 2, [ 1000, 2, 1003, 1 ], -1/2, [ 1000, 2, 1001, 1 ], -15, [ 1000, 3 ], 48, [ 1000, 3, 1001, 1 ], -6, [ 1000, 4 ], 29, [ 1000, 4, 1001, 1 ], -2, [ 1000, 5 ], 13, [ 1000, 6 ], 8, [ 1000, 7 ], 5, [ 1000, 8 ], 3, [ 1000, 9 ], 1, [ 1000, 10 ], 1 ], [ [ ], 1 ] ] gap> gap> M := NumberOfClassTwoAlgebras(2,Kronecker); [ q-(q-0,2)+5, 3*q-(q-0,2)+6 ] gap> f := PorcToExt(M); [ [ [ [ ], 5, [ 1001, 1 ], -1, [ 1000, 1 ], 1 ], [ [ ], 1 ] ], [ [ [ ], 6, [ 1001, 1 ], -1, [ 1000, 1 ], 3 ], [ [ ], 1 ] ] ]
‣ PorcByExt ( ext[, depth] ) | ( function ) |
Given a PORC function by an external GAP representation ext a multivariate polynomial is returned.
It is also possible to give a list ext of external representations or a matrix of such representations. The second argument depth stands for the nesting depth of the input. If only a single representation ext is given, it need not be given.
gap> N2 := PorcByExt(e);; gap> N = N2; true gap> gap> M2 := PorcByExt(f,1); [ q-(q-0,2)+5, 3*q-(q-0,2)+6 ] gap> M2=M; true
generated by GAPDoc2HTML