QEtaModularCategory¶
qetamod.spad line 161 [edit on github]
QEtaModularCategory provides functions to check modularity conditions.
- candidateLevelsCoEtaQuotient: (QEtaSpecification, PositiveInteger, NonNegativeInteger) -> List PositiveInteger
candidateLevelsCoEtaQuotient(rspec,m,t)
returns an ascendingly sorted list of thenn
up to 24*m*level(rspec
) such that conditionCoEtaQuotient?(nn
,rspec
,m
,t
) istrue
.
- conditionCoEtaQuotient?: (PositiveInteger, QEtaSpecification, PositiveInteger, NonNegativeInteger) -> Boolean
conditionCoEtaQuotient?(nn,rspec,m,t)
returnstrue
iff a cofactor eta-quotient can be found such that the product of the cofactor with the orbit product corresponding to the dissection (m
,t
) gives a modular function in levelnn
.
- cusps: PositiveInteger -> List Cusp
cusps(nn)
returns representatives for all the (inequivalent) cusps for the congruence subgroup that the respective package represents. They are sorted by their size as rational numbers with infinity being the biggest cusp. Note that cusps()=[cusp(x
(1,1),x
(2,1)) forx
in doubleCosetRepresentatives()] where doupleCosetRepresentatives() is from the respective congruence subgroup that is connected to the package.
- cuspToMatrix: (PositiveInteger, Cusp) -> Matrix Integer
For cusp=(a:c), cuspToMatrix(
nn
,cusp) returns a matrix gamma=[[a,b
],[c
,d
]] corresponding to the cusp (a:c) of this domain. We assume that a/c is a normalized cusp, i.e. cusp=normalizeCusp(cusp).
- etaCofactorSpace: (PositiveInteger, QEtaSpecification, PositiveInteger, NonNegativeInteger, List List Integer) -> Record(indices: List List Integer, particular: Union(Vector Integer, failed), basis: List Vector Integer)
etaCofactorSpace(nn,rspec,m,t,idxs)
returns a vectorv
and the basis of a space such that #v=#idxs and modular?(nn
,members(s
),rspec
,m
,t
) istrue
for anys
=v
+ reduce(_+
, [z
.i
* basis.i
fori
in 1..#basis]) and any sufficiently long listz
of integers. The function fails, if there is no such solution. The indices part of the result is equal toidxs
and corresponds to the entries of the solution vectors.
- etaCofactorSpaceSystem: (PositiveInteger, QEtaSpecification, PositiveInteger, NonNegativeInteger, List List Integer) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer)
etaCofactorSpaceSystem(nn,rspec,m,t,idxs)
returns a matrix mat and a vectorv
such that for the integer solutionss
of the equation mat*s=v it holds modular?(sspec,rspec
,m
,t
) where sspec results from the list of the first #idxs entries ofs
. Withidxs
one can specify what indexes should be allowed in the solution space.
- etaQuotientMonoidSystem: (PositiveInteger, List Cusp, List List Integer) -> Record(qmat: Matrix Fraction Integer, zrels: Vector Integer, qrhs: Vector Fraction Integer)
etaQuotientMonoidSystem(nn,polesat,idxs,rhs)
returns a record that can be given to zsolve$X4ti2
in order to find the generators of the monoid of (generalized) eta-quotients that are modularwrt
. QMOD and have poles at most at the cusps given bypolesat
. The indices of the eta-functions that may appear is given byidxs
.
- genus: PositiveInteger -> NonNegativeInteger
genus(nn)
returns the genus of the congruence subgroup connected to the package (eitherGamma_0
(nn
) orGamma_1
(nn
).
- matrixEtaOrder: (PositiveInteger, List Cusp, List List Integer) -> Matrix Fraction Integer
matrixEtaOrder(nn,spitzen,idxs)
returns the matrix given by [matrixEtaOrderRow(nn
,cusp,idxs
) for cusp inspitzen
] with duplicate rows removed.
- matrixEtaOrderElement: (PositiveInteger, Cusp, List Integer) -> Fraction Integer
z:=matrixEtaOrderElement(
nn
,cusp,idx). The parameter corresponds to the index of a (generalized) eta-quotient, i.e. it can be of the form idx=[delta,g
] or of the form idx=[delta] withg
in the range 0..delta. Thenz
is the coefficient ofr_
{delta,g
} in cite[Thm
.~4
]{Robins_GeneralizedDedekindEtaProducts_1994
}, except for the casenn=4
,gcd
(denom(cusp),nn
)=2
(orGamma1
(4)-equivalent) where we return half of this coefficient. If idx=[delta] then z=1/2*matrixEtaOrderElement(nn
,cusp,[delta,0])/2
. and thus corresponds to the coefficient of $r_
delta$ in eqref{eq:order-rbar-non-adjusted} in Theorem~ref{thm:matrixEtaOrderRobins}. Note that Robins refers to an expansion in the uniformizing variableq^
(gcd
(c
,nn
)/nn
) (where cusp=a/c). That is equal toq^
(1/width(c
)$CongruenceSubgroupGamma1
(nn
)) except for the casenn=4
andgcd
(nn
,c
)=2
. In that case the width of the cusp 1/2 is 1 and not 2=4/gcd(4.2). For this case, we deviate from Robins’ coefficients and adapt to an expansion inq
rather than an expansion inq^
(1/2).
- matrixEtaOrderFull: (PositiveInteger, List Cusp, List List Integer) -> Matrix Fraction Integer
matrixEtaOrder(
nn
,spitzen,idxs) returns a matrix given by [matrixEtaOrderRow(nn
,cusp,idxs) for cusp in spitzen].
- matrixEtaOrderRow: (PositiveInteger, Cusp, List List Integer) -> List Fraction Integer
matrixEtaOrderRow(nn, cusp, idxs)
returns [matrixEtaOrderElement(nn
,cusp
,idx) for idx in idxs].
- matrixModular: (PositiveInteger, List List Integer) -> Matrix Fraction Integer
matrixModular(nn, idxs)
returns a matrix matmat*v=0
for an (extended) exponent vector where the exponents correspond to idxs, i.e. #v=#idxs+k wherek
corresponds to additional (slack) variables due to the modularity conditions. The rows corresponding to slack variables have been normalized so that the entry of the slack variable (there is only one) is 1.
- minimalLevelCoEtaQuotient: (QEtaSpecification, PositiveInteger, NonNegativeInteger) -> PositiveInteger
minimalLevelCoEtaQuotient(rspec, m, t)
returns the smallestnn
of candidateLevalsCoEtaQuotient(rspec
,m
,t
).
- modular?: (QEtaSpecification, QEtaSpecification, PositiveInteger, NonNegativeInteger) -> Boolean
modular?(sspec,rspec,m,t)
returnstrue
iff (sspec
,rspec
,m
,t
) specifies a modular function in level(sspec
).
- modular?: QEtaSpecification -> Boolean
modular?(rspec)
returnstrue
iff spec specifies a modular function in level(rspec
).
- modularOrbit: (QEtaSpecification, PositiveInteger, NonNegativeInteger) -> List NonNegativeInteger
modularOrbit(rspec, m, t)
(for $Gamma_0(N
) whereN
is level(rspec
)) computes the elements of $modularOrbit{r
,m
,t
)$ as defined in qeta.tex, cite[Def.~42
]{Radu_RamanujanKolberg_2015
} and cite[Lemma 4.35]{Radu_PhD_2010
} werer
is pureExponents(rspec
) andrspec
is expected to specify a pure eta-quotient. For $Gamma_1(N
)$, modularOrbit(rspec
,m
,t
) returns [t
].
- width: (PositiveInteger, Cusp) -> PositiveInteger
width(nn, cusp)
returns the width of the cusp=(a:c) forG
(nn
) whereG
is the congruence subgroup ofSL_2
(ZZ
) connected to this package.
- width: (PositiveInteger, Matrix Integer) -> PositiveInteger
width(nn, gamma)
returns the width of the cusp=(a:c) forG
(nn
) whereG
is the congruence subgroup ofSL_2
(ZZ
) connected to this package and gamma = matrix [[a,b
],[c
,d
]].