The matrix (or ring element) f is interpreted as an element of the linear dual of the base polynomial ring, where the monomial in f are interpreted as monomials in the divided power basis (the dual basis of the monomial basis of ring f. Thus
fromDual f = gens inverseSystem (f, DividedPowers => true).
See the documentation nodes for InverseSystems for the theory, and inverseSystem for the function. Note that the operation of fromDual is not equivariant with respect to the general linear group, acting by change of basis. This not a bug, but follows because fromDual uses the divided power basis. If equivariant behavior is desired, use the option DividedPowers=>false (which is the default behavior of inverseSystem):
i1 : S = ZZ/101[x,y] o1 = S o1 : PolynomialRing |
i2 : f1 = x^2 2 o2 = x o2 : S |
i3 : f2 = (x+y)^2 2 2 o3 = x + 2x*y + y o3 : S |
i4 : betti res ideal fromDual f1 0 1 2 o4 = total: 1 2 1 0: 1 1 . 1: . . . 2: . 1 1 o4 : BettiTally |
i5 : betti res ideal fromDual f2 0 1 2 o5 = total: 1 2 1 0: 1 . . 1: . 2 . 2: . . 1 o5 : BettiTally |
i6 : betti res (I = ideal fromDual(f2, DividedPowers => false)) 0 1 2 o6 = total: 1 2 1 0: 1 1 . 1: . . . 2: . 1 1 o6 : BettiTally |
i7 : I == inverseSystem (f2, DividedPowers => false) o7 = true |
i8 : inverseSystem (f2, DividedPowers => true) 2 2 2 o8 = ideal (x*y - 2y , x - y ) o8 : Ideal of S |
i9 : ideal fromDual(f2, DividedPowers => false) 3 3 o9 = ideal (x - y, x , y ) o9 : Ideal of S |
i10 : ideal fromDual(f2, DividedPowers => true) 2 2 2 3 3 o10 = ideal (x*y - 2y , x - y , x , y ) o10 : Ideal of S |
The Base ring of the input must be a standard graded polynomial ring over a field.
Logically, the output of fromDual should be an ideal, not a matrix, but the original function was converted from the classic Macaulay, where this distinction was not made.