Let $f$ be a polynomial or an object of class Product representing a factorization of a polynomial $f$. The function isSimpleNormalCrossing returns true if the distinct factors of $f$ are in simple normal crossing, or in other words, if at each point those factors, locally analytically, form part of a regular system of parameters.
i1 : R = ZZ/7[x,y,z]; |
i2 : isSimpleNormalCrossing(x^3*y^2) o2 = true |
i3 : isSimpleNormalCrossing(x^2 - y^2) o3 = true |
i4 : isSimpleNormalCrossing(x*y*(x - y)) o4 = false |
i5 : isSimpleNormalCrossing(x^2 - y*z) o5 = false |
The option AtOrigin (default value true) is used to specify whether to work at the origin (when true) or globally (when false).
i6 : R = QQ[x,y,z]; |
i7 : f = (y - (x - 1)^2)*y^2; --SNC at the origin, but not globally |
i8 : isSimpleNormalCrossing(f) o8 = true |
i9 : isSimpleNormalCrossing(f, AtOrigin => false) o9 = false |
i10 : g = (y - 1)^2 + (x - 7)^2; --doesn't even pass through the origin |
i11 : isSimpleNormalCrossing(g) o11 = true |
i12 : isSimpleNormalCrossing(g, AtOrigin => false) o12 = false |
i13 : h = x*y^2*(x + 1)^3*(y - 1)^4; --SNC everywhere |
i14 : isSimpleNormalCrossing(h) o14 = true |
i15 : isSimpleNormalCrossing(h, AtOrigin => false) o15 = true |
Setting the option Verbose (default value false) to true produces verbose output.
The object isSimpleNormalCrossing is a method function with options.