For ideals, if KnownDomain is false (default value is true), then the function will check whether it is a domain. If it is a domain (or assumed to be a domain), it will reflexify using a strategy which can speed up computation, if not it will compute using a sometimes slower method which is essentially reflexifying it as a module. See reflexify for an example of the speed difference for ideals compared to modules.
Consider the following example showing the importance of making the correct assumption about the ring being a domain.
i1 : R = QQ[x,y]/ideal(x*y); |
i2 : I = ideal(x,y); o2 : Ideal of R |
i3 : reflexify(I, KnownDomain=>false) o3 = ideal (y, x) o3 : Ideal of R |
i4 : reflexify(I, KnownDomain=>true) o4 = ideal 1 o4 : Ideal of R |
i5 : J = ideal(x-y, x+y); o5 : Ideal of R |
i6 : reflexify(J, KnownDomain=>false) o6 = ideal (y, x) o6 : Ideal of R |
i7 : reflexify(I, KnownDomain=>true) o7 = ideal 1 o7 : Ideal of R |
In the above, when KnownDomain=>true (an incorrect assumption), this function returns the incorrect answer for I.