# randomCoordinateChange -- produce linear automorphism of the ring

## Synopsis

• Usage:
randomCoordinateChange R
• Inputs:
• R, a ring, a polynomial Ring
• Optional inputs:
• MaxCoordinatesToReplace => an integer, default value infinity, how many coordinates should be replaced by linear functions
• Replacement => , default value Full, whether coordinate replacements should be binomial (Binomial) or fully random (Full)
• Homogeneous => , default value true, whether coordinate replacements should be Homogeneous
• Verbose => , default value false, set to true for verbose output
• Outputs:
• , the coordinate change map.

## Description

Given a polynomial ring, this will produce a linear automorphism of the ring.

 i1 : R=ZZ/5[x,y,z] o1 = R o1 : PolynomialRing i2 : randomCoordinateChange(R) ZZ o2 = map (R, --[x..z], {- 2x - 2y, 2x - 2y - z, x - 2y}) 5 ZZ o2 : RingMap R <--- --[x..z] 5

In some applications, a full change of coordinates is not desired, as it might cause code to run slowly, and so a Binomialr change of coordinates might be preferred. These Binomial changes of coordinates can be accomplished with the options Replacement and MaxCoordinatesToReplace. Replacement can take either Binomial or Full. If Binomial is specified, then only binomial changes of coordinates will be produced.

 i3 : S = ZZ/11[a..e] o3 = S o3 : PolynomialRing i4 : randomCoordinateChange(S, Replacement=>Binomial) ZZ o4 = map (S, --[a..e], {a + 3b, 5c + e, - b + d, - 5a + b, c + 3d}) 11 ZZ o4 : RingMap S <--- --[a..e] 11

Finally, if Homogeneous is set to false, then our change of coordinates is not homogeneous (although it is still linear).

 i5 : randomCoordinateChange(R, Homogeneous=>false) ZZ o5 = map (R, --[x..z], {x + 2y + 2z + 1, - 2y - 2z + 1, 2x - y + 1}) 5 ZZ o5 : RingMap R <--- --[x..z] 5

Note, this function already checks whether the function is an isomorphism by computing the Jacobian.

## Ways to use randomCoordinateChange :

• "randomCoordinateChange(Ring)"

## For the programmer

The object randomCoordinateChange is .