QEtaReductionCategory(C, F, AB)¶
qetasamba.spad line 318 [edit on github]
F: QEtaGradedAlgebra C
AB: Type
QEtaReductionCategory lists the functions used in the restricted reduction as described in “Dancing Samba with Ramanujan Partition Congruences” (Journal of Symbolic Computation). doi:10
.1016/j.jsc
.2017.02.001 http://www.risc.jku.at/publications/download/risc_5338/DancingSambaRamanujan.pdf
- greaterGrade?: (F, F) -> Boolean
greaterGrade?(x, y)
returns qetaGrade(x
)>qetaGrade(y
).
- noTrace: F -> Void
A function that does nothing.
- noTraceEnter: (F, AB) -> Void
A functions that does nothing.
- reduce: (F, AB) -> F
reduce(u, ab)
returns an elementv
such thatv
is not reducible modulo ab and “u reduces modulot
and basis tov"
wheret
= multiplier(ab) and basis is given by the lists of basis(ab,d
) for all grades. These element lists ofab
are assumed to be sorted by greaterGrade?. We assume that qetaLeadingCoefficient(t
)=1
and no element of the basis has a qetaGrade that is divisible by the qetaGrade oft
. We require qetaGrade(multiplier ab)>0
, one? leadingCoefficient multiplier ab, qetaGrade(b
)>0
for allb
in basis(ab), and not zero? positiveRemainder(qetaGrade(b
), grade multiplier ab) for allb
in basis(ab). Whether reduce performs only a top-reduction or an additional tail-reduction, is an implementation detail of the package.
- reducer: (F, AB) -> Union(F, failed)
reducer(u, ab)
returns an elementb
from basis(ab) orb=1
such that gradeu
- gradeb
is divisible by grade(multiplier ab) or returns “failed” if no suchb
exists. This functions corresponds to the function “select_{t
,basis}(u
)” as in Definition 2.6 of cite{Hemmecke_DancingSambaRamanujan_2018
}. That reducer yields the element with biggest possible grade is ensured by the requirement that “basis” is appropriately sorted by greaterGrade?.
- tailReduce: (F, AB) -> F
tailReduce
==
tracedTailReduce(noTraceEnter
,noTrace
,noTrace
)
- tailReducible?: (F, Integer, F) -> Boolean
tailReducible?(u, n, b)
returnstrue
iff there existsf
inF
such that forv
=u
-f*b
,c
= qetaCoefficient(u
,n
), andd
= qetaCoefficient(v
,n
) zero?d
holds or euclideanSizec
> euclideanSized
. Initially it is assumed that not zero?(c
).
- topReduce: (F, AB) -> F
topReduce
==
tracedTopReduce(noTraceEnter
,noTrace
,noTrace
)
- topReducible?: (F, F) -> Boolean
topReducible?(u, b)
returnstrue
iff there existsf
inF
such that forv
=u
-f*b
,lc
= qetaLeadingCoefficient, and grade = qetaGrade: (gradeu
> gradev
or (gradeu
= gradev
and euclideanSizelc
u
> euclideanSizelc
v
))
- tracedReduce: ((F, AB) -> Void, F -> Void, F -> Void) -> (F, AB) -> F
tracedReduce(traceEnter, traceLoop, traceReturn)
(u
, ab) behaves identical to reduce(u
, ab) except that at enter and exit time the functionstraceEnter
(u
, ab) and traceExit(w
) are called wherew
is the value that will be returned. Inside the internal while loop the functiontraceLoop
(v
) is called withv
being the intermediately reducedu
. These hooks are provided to print a trace of the reduction.
- tracedTailReduce: ((F, AB) -> Void, F -> Void, F -> Void) -> (F, AB) -> F
tracedTailReduce behaves
performs only tail-reductions, i.e. the qetaGrade of the result will be the same as the qetaGrade of the input element. Tail-reductions are reductions that are performed on the non-leading terms of the input up to (and including) the constant term of the series.
- tracedTopReduce: ((F, AB) -> Void, F -> Void, F -> Void) -> (F, AB) -> F
tracedTopReduce behaves
like tracedReduce, but performing only top-reductions.
- traceEnter: NonNegativeInteger -> (F, AB) -> Void
traceEnter(n)
(x
, a) returns void() and depending on the value ofn
returns more and more information. Where a higer version ofn
means more information. trace(0) is equivalent with noTraceEnter.
- traceLoop: NonNegativeInteger -> F -> Void
traceLoop(n)
(x
) just returns void() without any side effect and depending on the value ofn
returns more and more information. Where a higer version ofn
means more information. trace(0) is equivalent with noTraceElement.
- traceReturn: NonNegativeInteger -> F -> Void
traceReturn(n)
(x
) just returns void() without any side effect and depending on the value ofn
returns more and more information. Where a higer version ofn
means more information. trace(0) is equivalent with noTraceElement.