# normalForms -- chooses orbit representatives from a list of monomial ideals, under a group of permutations

## Synopsis

• Usage:
L' = normalForms(L,G)
• Inputs:
• L, a list, list of monomial ideals in a ring R
• G, a list, list of permutations, written as automorphisms of R
• Outputs:
• L', a list, list of representatives of the G-orbits in L

## Description

To test a conjecture on monomial ideals of a certain type, one typically makes a computation on each one. If the computation is costly, and the result is invariant under a group G of permutations of the variables, it may be more efficient to choose orbit representatives first.

Applying the ring automorphisms and then comparing the ideals can be slow. In the routine orbitRepresentatives, the monomial ideals are first turned into lists of exponent vector, and the normalForms operations are done on these using "normalFormsLis" instead of on the original ideals. The conversions to and from monomialIdeals and lists of lists are done with toLis and fromLis.

 i1 : R = ZZ/101[w,x,y,z] o1 = R o1 : PolynomialRing i2 : monlist = flatten entries basis(4,R) 4 3 3 3 2 2 2 2 2 2 2 2 2 3 2 o2 = {w , w x, w y, w z, w x , w x*y, w x*z, w y , w y*z, w z , w*x , w*x y, ------------------------------------------------------------------------ 2 2 2 3 2 2 3 4 3 3 w*x z, w*x*y , w*x*y*z, w*x*z , w*y , w*y z, w*y*z , w*z , x , x y, x z, ------------------------------------------------------------------------ 2 2 2 2 2 3 2 2 3 4 3 2 2 3 4 x y , x y*z, x z , x*y , x*y z, x*y*z , x*z , y , y z, y z , y*z , z } o2 : List i3 : idlist = subsets(monlist, 3)/monomialIdeal; i4 : #oo o4 = 6545

There are 6545 ideals in 4 variables generated by 3 monomials of degree 4

 i5 : G0 = permutations numgens R o5 = {{0, 1, 2, 3}, {0, 1, 3, 2}, {0, 2, 1, 3}, {0, 2, 3, 1}, {0, 3, 1, 2}, ------------------------------------------------------------------------ {0, 3, 2, 1}, {1, 0, 2, 3}, {1, 0, 3, 2}, {1, 2, 0, 3}, {1, 2, 3, 0}, ------------------------------------------------------------------------ {1, 3, 0, 2}, {1, 3, 2, 0}, {2, 0, 1, 3}, {2, 0, 3, 1}, {2, 1, 0, 3}, ------------------------------------------------------------------------ {2, 1, 3, 0}, {2, 3, 0, 1}, {2, 3, 1, 0}, {3, 0, 1, 2}, {3, 0, 2, 1}, ------------------------------------------------------------------------ {3, 1, 0, 2}, {3, 1, 2, 0}, {3, 2, 0, 1}, {3, 2, 1, 0}} o5 : List i6 : G = apply(G0, g -> map(R,R,(vars R)_g)) o6 = {map (R, R, {w, x, y, z}), map (R, R, {w, x, z, y}), map (R, R, {w, y, ------------------------------------------------------------------------ x, z}), map (R, R, {w, y, z, x}), map (R, R, {w, z, x, y}), map (R, R, ------------------------------------------------------------------------ {w, z, y, x}), map (R, R, {x, w, y, z}), map (R, R, {x, w, z, y}), map ------------------------------------------------------------------------ (R, R, {x, y, w, z}), map (R, R, {x, y, z, w}), map (R, R, {x, z, w, ------------------------------------------------------------------------ y}), map (R, R, {x, z, y, w}), map (R, R, {y, w, x, z}), map (R, R, {y, ------------------------------------------------------------------------ w, z, x}), map (R, R, {y, x, w, z}), map (R, R, {y, x, z, w}), map (R, ------------------------------------------------------------------------ R, {y, z, w, x}), map (R, R, {y, z, x, w}), map (R, R, {z, w, x, y}), ------------------------------------------------------------------------ map (R, R, {z, w, y, x}), map (R, R, {z, x, w, y}), map (R, R, {z, x, y, ------------------------------------------------------------------------ w}), map (R, R, {z, y, w, x}), map (R, R, {z, y, x, w})} o6 : List i7 : normalForms(idlist,G); --there are 244 ---6545 i8 : #oo o8 = 333

But only 333 orbits, a 19-fold reduction.