If Strategy => IdealStrategy, then dualize assume the module is isomorphic to an ideal, embeds it as an ideal, and computes the dual by forming a colon. ModuleStrategy simply computes the Hom. The default Strategy for modules is ModuleStrategy, and the default Strategy for ideals is IdealStrategy. This is because there is overhead using the opposite strategy (involving embedding modules as ideals). Frequently IdealStrategy is faster, but not always. Consider first a D4 singularity in characteristic 2.
i1 : R = ZZ/2[x,y,z]/ideal(z^2-x*y*z-x^2*y-x*y^2); |
i2 : m = ideal(x,y,z); o2 : Ideal of R |
i3 : J = m^9; o3 : Ideal of R |
i4 : M = J*R^1; |
i5 : time dualize(J, Strategy=>IdealStrategy);
-- used 0.0865556 seconds
o5 : Ideal of R
|
i6 : time dualize(J, Strategy=>ModuleStrategy);
-- used 0.920914 seconds
o6 : Ideal of R
|
i7 : time dualize(M, Strategy=>IdealStrategy);
-- used 1.0731 seconds
|
i8 : time dualize(M, Strategy=>ModuleStrategy);
-- used 0.00413474 seconds
|
i9 : time embedAsIdeal dualize(M, Strategy=>ModuleStrategy);
-- used 0.00257649 seconds
o9 : Ideal of R
|
For monomial ideals in toric rings, frequently ModuleStrategy appears faster.
i10 : R = ZZ/7[x,y,u,v]/ideal(x*y-u*v); |
i11 : I = ideal(x,u); o11 : Ideal of R |
i12 : J = I^15; o12 : Ideal of R |
i13 : time dualize(J, Strategy=>IdealStrategy);
-- used 0.0402327 seconds
o13 : Ideal of R
|
i14 : time dualize(J, Strategy=>ModuleStrategy);
-- used 0.00663006 seconds
o14 : Ideal of R
|