74 CHAPTER 3. OPERATIONS ON STABLE IDEALSSince we can proceed this way with any <strong>of</strong> the ideals computed in step 1, we get allsaturated stable ideals to the given Hilbert polynomial ∆ d−1 p(z).By the same arguments it follows that for each i ∈ {d − 1, d − 2, . . . , 0} that we can successivelycompute all saturated stable ideals to the given Hilbert polynomial ∆ i p(z). Finally,when we reach the case i = 0, we have found all saturated stable ideals to the given Hilbertpolynomial ∆ 0 p(z) = p(z) in R (0) = R and we are done.The algorithm terminates for any given Hilbert polynomial, since the number <strong>of</strong> steps performedin 2 is bounded by the degree <strong>of</strong> the Hilbert polynomial and the number <strong>of</strong> idealscomputed in each loop is finite.Remark 3.46. Algorithm 3.45 differs from the algorithm presented by Alyson Reeves in[16]: There, special matrices encoding the set <strong>of</strong> monomial generators <strong>of</strong> a stable idealare used. On these matrices, a certain kind <strong>of</strong> elementary row operations is performedto compute the saturated stable ideals with the same Hilbert polynomial as the uniquelexicographic ideal L p but a different double saturation from that <strong>of</strong> L p .One problem to be solved then is that the correspondence between such matrices encodingstable ideals and the set <strong>of</strong> stable ideals itself (in a fixed polynomial ring) is not a bijection.The elementary row operations used may produce matrices, which do not encode anysaturated stable ideal. Hence, one needs a special procedure within the algorithm to checkwhether a given matrix represents a saturated stable ideal or not. To avoid this trial anderror technique, we did not make use <strong>of</strong> such matrices here.The number <strong>of</strong> all saturated stable ideals to a given Hilbert polynomial or, in particular thenumber <strong>of</strong> different double saturations appearing among these ideals, play an importantrole, when considering upper bounds on the number <strong>of</strong> components <strong>of</strong> the Hilbert scheme:In [17], Theorem 6, pp. 22-24, Alyson Reeves proved such an upper bound on the number <strong>of</strong>components <strong>of</strong> the Hilbert scheme (in the projective space P n to a given Hilbert polynomialp(z)). She shows that to a given double-saturated stable ideal L ⊂ R, all ideals in R,whose generic initial ideal equals L, lie on the same component <strong>of</strong> the Hilbert scheme asthe ideal L. Thus, the number <strong>of</strong> components <strong>of</strong> the Hilbert scheme is bounded by thenumber <strong>of</strong> double-saturated stable ideals I ⊂ R with p R/I (z) = p(z). Hence, by the pro<strong>of</strong><strong>of</strong> Theorem 3.43, it follows:Corollary 3.47. Let p(z) be a Hilbert polynomial. Then the number <strong>of</strong> components <strong>of</strong>the Hilbert scheme in the n-dimensional projective space P n associated to p(z) is boundedby the number <strong>of</strong> saturated stable ideals Ī ⊂ ¯R := K[x 0 , . . . , x n−1 ] with p ¯R/ Ī(z) = ∆p(z),where ∆p(z) := p(z) − p(z − 1).The above results complete the theoretical basis for the algorithms, which are introducedin the next chapter. There we will consider a few examples, in which we compute allsaturated stable ideals to a given Hilbert polynomial.
Chapter 4Algorithms for stable idealsWithin this chapter, we will use the results <strong>of</strong> the preceding three chapters to present algorithmsfor stable ideals. In Chapter 2 and Chapter 3, we described, how we can computeHilbert series and Hilbert polynomials <strong>of</strong> stable ideals. The algorithms stated there havealways been presented in pseudo code rather than in real programming code.In the course <strong>of</strong> this chapter, the algorithms will additionally be presented in real programmingcode. As a basis, the computer algebra system MuPAD is used. Its programminglanguage in its simplest form is quite similar to the original Pascal programming language.Thus, the code presented here will be quite easy to understand for anyone who is usedto Pascal or the programming language <strong>of</strong> any other <strong>of</strong> the well-known computer algebrasystems used today. Additional information on the MuPAD programming language can befound in the Official MuPAD Tutorial by W. Oevel et al., chapters 16, 17 and 18 (see also[15]). These chapters demonstrate in short how to use loops and if-then-else-constructionsin MuPAD and how to write own procedures. Since we will have to make frequent use <strong>of</strong>univariate polynomials within the implementations when dealing with Hilbert polynomialsand the numerators respectively denominators <strong>of</strong> Hilbert series, we also refer to [15],subsection 4.16, pp. 130-143. There, a short introduction to polynomials and their representationin MuPAD is given. Nevertheless, within the source code presented here, the use<strong>of</strong> high-level MuPAD library functions has been avoided wherever possible. Hence, somelines <strong>of</strong> code might look a little complicated and could be shortened by some <strong>of</strong> MuPAD’shigher functionality – in order to minimize the difficulties when carrying the code presentedhere to any other programming environment we may accept this partial lack <strong>of</strong> elegance.For a quick reference <strong>of</strong> the MuPAD procedures introduced within this chapter we refer tothe Glossary <strong>of</strong> MuPAD procedures, see page 129.The basic terminology established within the preceding chapters will also be used here.4.1 Computing Hilbert series <strong>of</strong> stable idealsIn Theorem 2.17, we presented an explicit formula to compute the Hilbert series H R/I (t)<strong>of</strong> R/I for I ⊂ R a stable ideal. Let I be generated minimally by m 1 , . . . , m r ∈ M,75