$M$ should be an ideal or a module over a $\ZZ^r$-graded ring and f a function so that f(d,M) is a Boolean value for d in $\ZZ^r$ and f(d,M) implies f(d+e,M) for e in $\NN^r$. Given a list {L1, L2}, this function will return the minimal multidegrees d between L1 and L2 satisfying f(d,M).
i1 : S = ZZ/101[x,y,Degrees=>{{1,0},{0,1}}] o1 = S o1 : PolynomialRing |
i2 : I = ideal(x*y^2,x^3*y) 2 3 o2 = ideal (x*y , x y) o2 : Ideal of S |
i3 : M = S^1/I o3 = cokernel | xy2 x3y | 1 o3 : S-module, quotient of S |
i4 : f = (d,M) -> truncate(d,M)==0 o4 = f o4 : FunctionClosure |
i5 : findRegion({{0,0},{4,4}},M,f) o5 = {{1, 2}, {3, 1}} o5 : List |
If some degrees d are known to satisfy f(d,M), then they can be specified using the option Inner in order to expedite the computation. Similarly, degrees not above those given in Outer will be assumed not to satisfy f(d,M). If f takes options these can also be given to findRegion.
i6 : elapsedTime findRegion({{0,0},{4,4}},M,f) -- 0.122351 seconds elapsed o6 = {{1, 2}, {3, 1}} o6 : List |
i7 : elapsedTime findRegion({{0,0},{4,4}},M,f,Inner=>{{1,2},{3,1}},Outer=>{{1,1}}) -- 0.0166923 seconds elapsed o7 = {{1, 2}, {3, 1}} o7 : List |
Mahrud Sayrafi contributed to the code for this function.
Use the option Outer with care if f is not invariant under positive translation.
The object findRegion is a method function with options.