QEtaReductionCategory(C, F, AB)

qetasamba.spad line 318 [edit on github]

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 element v such that v is not reducible modulo ab and “u reduces modulo t and basis to v" where t = multiplier(ab) and basis is given by the lists of basis(ab, d) for all grades. These element lists of ab 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 of t. We require qetaGrade(multiplier ab)>0, one? leadingCoefficient multiplier ab, qetaGrade(b)>0 for all b in basis(ab), and not zero? positiveRemainder(qetaGrade(b), grade multiplier ab) for all b 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 element b from basis(ab) or b=1 such that grade u - grade b is divisible by grade(multiplier ab) or returns “failed” if no such b 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) returns true iff there exists f in F such that for v = u - f*b, c = qetaCoefficient(u, n), and d = qetaCoefficient(v, n) zero? d holds or euclideanSize c > euclideanSize d. Initially it is assumed that not zero?(c).

topReduce: (F, AB) -> F

topReduce == tracedTopReduce(noTraceEnter, noTrace, noTrace)

topReducible?: (F, F) -> Boolean

topReducible?(u, b) returns true iff there exists f in F such that for v = u - f*b, lc = qetaLeadingCoefficient, and grade = qetaGrade: (grade u > grade v or (grade u = grade v and euclideanSize lc u > euclideanSize lc 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 functions traceEnter(u, ab) and traceExit(w) are called where w is the value that will be returned. Inside the internal while loop the function traceLoop(v) is called with v being the intermediately reduced u. 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 of n returns more and more information. Where a higer version of n 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 of n returns more and more information. Where a higer version of n 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 of n returns more and more information. Where a higer version of n means more information. trace(0) is equivalent with noTraceElement.