# hilbertRepresentatives -- find representatives of monomial ideals under permutations of the variables

## Synopsis

• Usage:
L = hilbertRepresentatives(R,s)
• Inputs:
• R, ,
• s, , of desired values of d->hilbertFunction(R/I,d) for d in (1..length s)
• Optional inputs:
• MonomialType => , default value "All", (either "All" or "SquareFree"). For "All", all monomials are considered, and for "SquareFree", only square free monomials are considered
• Outputs:
• L, a list, of monomial ideals

## Description

This method generates a list of representatives of the orbits of monomial ideals with given Hilbert function, under the group of permutations of the variables.

If the option MonomialType is set to "SquareFree", then only ideals of square-free monomials are considered.

Starting with orbit representatives of monomial ideals generated by all but s_0 linear forms, it successively adds to each monomial ideal already found as many forms of degree d in (2..1+length s) as necessary to achieve the desired Hilbert function, in all possible ways. After each addition it chooses representatives under the action of the group permuting the variables of the ring.

Note that the (partial) Hilbert function is specified as a VisibleList, which could be either a list or a sequence.

 i1 : S = ZZ/101[a..d]; i2 : netList(L = hilbertRepresentatives(S,{4,7,10})) ---10 ---17 ---34 ---11 ---11 +------------------------------------+ | 2 2 | o2 = |monomialIdeal (a , a*b, b ) | +------------------------------------+ | 2 3 | |monomialIdeal (a , a*b, b , a*c) | +------------------------------------+ | 2 2 | |monomialIdeal (a , a*b, a*c, b c) | +------------------------------------+ | 2 2 | |monomialIdeal (a , a*b, a*c, b d) | +------------------------------------+ | 2 | |monomialIdeal (a , a*b, a*c, b*c*d) | +------------------------------------+ | 2 2 | |monomialIdeal (a , a*b, a*c, a*d ) | +------------------------------------+ | 2 2 | |monomialIdeal (a , a*b, a*c, b*d ) | +------------------------------------+ | 2 3 | |monomialIdeal (a , a*b, a*c, d ) | +------------------------------------+ | 2 | |monomialIdeal (a , a*b, b*c) | +------------------------------------+ |monomialIdeal (a*b, a*c, b*c) | +------------------------------------+ | 3 | |monomialIdeal (a , a*b, a*c, a*d) | +------------------------------------+ | 3 | |monomialIdeal (a*b, b , a*c, a*d) | +------------------------------------+ | 2 | |monomialIdeal (a*b, a*c, b c, a*d) | +------------------------------------+ |monomialIdeal (a*b, a*c, a*d, b*c*d)| +------------------------------------+ |monomialIdeal (a*b, a*c, b*d) | +------------------------------------+ i3 : #L o3 = 15 i4 : tally apply(L, m-> hilbertPolynomial(m,Projective => false)) o4 = Tally{3i + 1 => 12 } 3i => 1 1 2 3 -i + -i + 1 => 2 2 2 o4 : Tally i5 : tally apply(L, m->betti res m) 0 1 2 o5 = Tally{total: 1 3 2 => 4 } 0: 1 . . 1: . 3 2 0 1 2 3 total: 1 4 4 1 => 8 0: 1 . . . 1: . 3 3 1 2: . 1 1 . 0 1 2 3 4 total: 1 4 6 4 1 => 1 0: 1 . . . . 1: . 3 3 1 . 2: . 1 . . . 3: . . 3 3 1 0 1 2 3 4 total: 1 4 6 4 1 => 2 0: 1 . . . . 1: . 3 3 1 . 2: . 1 3 3 1 o5 : Tally i6 : tally apply(L, m->primaryDecomposition m) o6 = Tally{{monomialIdeal (a, b), monomialIdeal (a, c), monomialIdeal (a, d), {monomialIdeal (a, b), monomialIdeal (a, c), monomialIdeal (b, c)} {monomialIdeal (a, b), monomialIdeal (a, d), monomialIdeal (b, c)} {monomialIdeal (a, b), monomialIdeal (a, c), monomialIdeal (a, d), 2 2 {monomialIdeal (a, b), monomialIdeal (a, d ), monomialIdeal (a , b 2 2 {monomialIdeal a, monomialIdeal (a , b, c, d )} => 1 3 {monomialIdeal a, monomialIdeal (a , b, c, d)} => 1 2 {monomialIdeal (a, b ), monomialIdeal (a, c), monomialIdeal (b, c, 2 2 {monomialIdeal (a, b ), monomialIdeal (a, c), monomialIdeal (a , b 2 2 {monomialIdeal (a, b ), monomialIdeal (a, d), monomialIdeal (a , b 3 {monomialIdeal (a, b ), monomialIdeal (b, c, d)} => 1 3 2 {monomialIdeal (a, b ), monomialIdeal (a , b, c)} => 1 3 2 3 {monomialIdeal (a, d ), monomialIdeal (a , b, c, d )} => 1 2 {monomialIdeal (a , b), monomialIdeal (a, c)} => 1 2 2 {monomialIdeal (a , a*b, b )} => 1 ------------------------------------------------------------------------ monomialIdeal (b, c, d)} => 1 } => 1 => 1 2 monomialIdeal (a , b, c)} => 1 , c)} => 1 d)} => 1 , c)} => 1 , c)} => 1 o6 : Tally

If the option MonomialType is set to "SquareFree", then only ideals of square-free monomials are considered.

 i7 : netList hilbertRepresentatives(S,{4,7,10,13}, MonomialType => "SquareFree") ---6 ---5 ---7 ---1 +------------------------------------+ o7 = |monomialIdeal (a*b, a*c, b*c) | +------------------------------------+ |monomialIdeal (a*b, a*c, a*d, b*c*d)| +------------------------------------+ |monomialIdeal (a*b, a*c, b*d) | +------------------------------------+

It is possible to specify data which results in no ideals:

 i8 : S = ZZ/101[a,b]; i9 : hilbertRepresentatives(S,{1,4}) == {} o9 = true

## Ways to use hilbertRepresentatives :

• "hilbertRepresentatives(Ring,VisibleList)"

## For the programmer

The object hilbertRepresentatives is .