next | previous | forward | backward | up | top | index | toc | Macaulay2 website
MonomialOrbits > hilbertRepresentatives

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

Synopsis

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}))

     +------------------------------------+
     |                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")

     +------------------------------------+
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

See also

Ways to use hilbertRepresentatives :

For the programmer

The object hilbertRepresentatives is a method function with options.