Macaulay2 / Macaulay2/M2

A Hilbert function hint cannot be given to a resolution, and there is no first-degree homogeneity test

Open
#4,581 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bugs directory Core
Dominant language
Macaulay2
Stars
435
Forks
297
Avg merge
4d 20h
Merged PRs (30d)
11

Description

This issue was triaged from bugs/dan/1-front-end-tests, one of the 857 files removed from the pre-GitHub bugs/ tree by d2c8d27826 and catalogued in #36. The commentary below was written by Claude (Claude Opus 5, via Claude Code), not by @d-torrance, whose account posted it -- please weigh it accordingly.

The original file, verbatim (51 lines)
these tests have been installed, except:

	for res we have never provided a Hilbert function hint and I don't know how to do it
	IM2_GB_set_hilbert_function seems to be only for gb's, not for res's

	how do I tell whether a matrix is homogeneous with respect to just the first component of the degree?

=============================================================================

In-Reply-To: <200606281441.k5SEf4Y01872@u00.math.uiuc.edu>
From: Michael Stillman <mike@math.cornell.edu>
Subject: Re: good morning!
Date: Wed, 28 Jun 2006 11:05:05 -0400
To: dan@math.uiuc.edu

>
> It's correct (!), as the ^0 is a slick way of transforming the  
> string into a
> net.  The test is to take the value of the string and check for  
> equality with
> the original thing:
>

That's right, I remember that one!


If you get time, could you add the following tests to the front end?   
(for res, this might mean using a different algorithm instead, as in  
res.m2) (These will improve behavior for multigraded rings, and  
towers of rings).

Needed for using Hilbert functions to aid in Groebner basis computation:
   Ring is poly ring over a field (or skew commutative, or quotient  
ring of such, or both)
   Ring is singly graded, every variable is positive
   Ring is homogeneous in this grading
   Matrix is homogeneous in this grading

Needed to compute resolutions, (algorithms 0,1,2,3):
    Ring is poly ring over a field (or skew commutative, or quotient  
ring of such, or both)
   Ring is graded, first degree of every variable is positive
   Ring is homogeneous in this grading (actually, only need graded  
with respect to the first degree)
   Matrix is homogeneous in this grading (same note as previous line)
Additional requirements for resolution algorithm 3 (which uses  
hilbert function):
     Ring is singly graded

I might try to relax the singly graded constraint on these.  But the  
positivity for every variable will still be required...
Where it stands today

Mike's list of tests is met. Dan's two exceptions are not, and this issue covers both.

The predicates Mike wanted now exist

The June 2006 conditions for a Hilbert-aided Gröbner basis are canUseHilbertHint (gb.m2:260-271),
item for item: degreeLength R === 1, polynomial ring or quotient of one, over a field, commutative or
skew, every variable's first degree positive, matrix homogeneous. Landed in 6e72d40d14 (2025-07-29),
renamed in ef88222289 — nineteen years on.

Exception (a): no Hilbert hint for res

Still literally as Dan describes. options gb has Hilbert; options res does not. comp-res.hpp and
comp-res.cpp contain no hilbert at all, and set_hilbert_function exists only on GB classes.

Demonstrated by installing a deliberately wrong hint, poincare J = 1:

  • gens gb J becomes the zero map — so gb used it,
  • betti res J is unchanged from the correct resolution — so res ignored it.

res is now a synonym for Complexes' freeResolution, and the front-end store exists
(poincare M = p, hilbert.m2:110) with no resolution consumer.

Exception (b): no way to ask about one degree component

isHomogeneous has 12 methods and none takes more than one argument, so "homogeneous with respect to
just the first component of the degree" is not expressible. Complexes/FreeResolution.m2:215-380
substitutes heft R =!= null, which is weaker, plus full multigraded isHomogeneous, and does not
enforce Mike's "algorithm 3 additionally singly graded".

Related

#4487 is adjacent to (b); #3937 is why canUseHilbertHint was hardened.

open · disposition issue · source of truth: bug-triage/catalog.tsv

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with comp-res.hpp and comp-res.cpp, then inspect Complexes/FreeResolution.m2 and hilbert.m2 around the existing poincare store and resolution checks. Compare the current canUseHilbertHint and isHomogeneous APIs with the stated resolution requirements. Done means a resolution can consume a Hilbert hint and the frontend can test homogeneity using only the first degree component.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
backend-api-design
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.