Macaulay2 / Macaulay2/M2

kernel(RingMap) cannot use a Hilbert function hint unless the map preserves degrees

Open
#4,590 2 comments 0 reactions 0 assignees View on GitHub
bugs directory Core Gröbner bases
Dominant language
Macaulay2
Stars
435
Forks
297
Avg merge
4d 20h
Merged PRs (30d)
11

Description

This issue was triaged from [`bugs/dan/1-kernel-ringmap`](https://github.com/Macaulay2/M2/blob/388c1ff0ce30d83751dea7bc7eac77fdc1305dd7/bugs/dan/1-kernel-ringmap), one of the 857 files removed from the pre-GitHub `bugs/` tree by [`d2c8d27826`](https://github.com/Macaulay2/M2/commit/d2c8d27826) and catalogued in [#36](https://github.com/Macaulay2/M2/issues/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

```text
fix kernel(RingMap):

From: Michael Stillman
To: dan@math.uiuc.edu
In-Reply-To: <200804101301.m3AD1Iot006150@u123.math.uiuc.edu>
Subject: Re: another interesting example
Date: Thu, 10 Apr 2008 09:48:24 -0400

...

The other strategy that might be good is this: To compute the kernel
of a ringmap R/J <--- S, given by f1,...,fr, in the case when J,
f1, ..., fr are not homogeneous, do the following:
a. homogenize a GB of J, and f1, ..., fr, and create the ideal(Jh,
f1h-y1, ..., frh-yr). Compute the HF of Jh, and then set the HF hint
of this new ideal to: (poincare Jh) * product(1..r, i -> (1-
t^(deg(fih)))). After doing the computation, dehomogenize, and do
'forceGB' on the answer.

...
```

### Where it stands today

Mike's 2008 recipe has three ingredients, and they have landed unevenly.

### The Hilbert-function hint: implemented, for degree-preserving maps

`ringmap.m2:320-332` sets `poincare cokernel graph` to `poincare module target f` times
`product(degrees source graph, d -> 1 - T_d)`, and asserts at `:332` that `gb` used it. Verified live
with `R = QQ[a,b,c,d, Degrees => {4,4,4,4}]` mapping to `QQ[s,t]` by `{s^4, s^3*t, s*t^3, t^4}`:
`isHomogeneous graph` is true, `canUseHilbertHint` is true, and `gb` records the
`rawGBSetHilbertFunction log` key.

### The inhomogeneous case — the one the email was written for — is unmet

`canUseHilbertHint` requires `isHomogeneous m` (`gb.m2:271`). With standard degrees the graph ideal is
inhomogeneous, because `a - s^4` mixes degrees in `QQ[p_0..p_5]`, so the block is skipped and there is no
homogenize/dehomogenize path. That is precisely Mike's recipe: homogenize a GB of `J` and the `f_i`,
form `(Jh, f1h - y1, …)`, set the hint to `(poincare Jh) * product(1 - t^deg(fih))`, then dehomogenize.

### The recipe's last step is tracked elsewhere

`forceGB` appears **0 times** in `ringmap.m2`, and **#686** asks for exactly it, quoting the same
reasoning.

### Live code

**PR #4485** (open) is adding another strategy to the same hook table, for skew-commutative targets via a
new `centerRing` — so `ringmap.m2`'s strategy block is being edited right now.

`open` · disposition `issue` · source of truth: [`bug-triage/catalog.tsv`](https://github.com/d-torrance/M2/blob/bug-triage/bug-triage/catalog.tsv)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the strategy block in ringmap.m2:320-332 and the isHomogeneous check in gb.m2:271, then compare the requested behavior with issue #686. The change should address inhomogeneous kernel maps using the recipe described in the issue, while accounting for the concurrent edits in PR #4485; verify the resulting computation on an inhomogeneous example.

Written by the indexing model from the issue text.

Assessment

Domain
backend
Issue type
Bug
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.