Macaulay2 / Macaulay2/M2

Let a ring register a Groebner basis strategy for gb to find

Open
#4,518 1 comment 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/0-gb-strategies`](https://github.com/Macaulay2/M2/blob/388c1ff0ce30d83751dea7bc7eac77fdc1305dd7/bugs/dan/0-gb-strategies), 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
BooleanGB contains an optional strategy for doing all gb's over rings from a
certain class. This should be done by:

- at polynomial ring creation time, registering the strategy name
(symbol) in the ring where gb can find it and use it
- letting the strategy be inherited by quotient rings of the ring, but
not by polynomial rings over the ring
- letting gb accept the strategy name, too

Use Strategy or Algorithm ??
```

### Where it stands today

Not done, and both halves of the file's design are still visible in the current code.

### The state today

`gb.m2` keeps a fixed `RawStrategyCodes` table and errors on an unrecognized strategy name, so there
is no way for a ring to introduce one. And `BooleanGB` does exactly what the file was written to
avoid: it exports `gbBoolean` as a separate entry point, rather than registering a strategy that
ordinary `gb` would find.

### What the file proposes

1. At polynomial-ring creation, register a strategy name in the ring where `gb` can find it.
2. Let quotient rings of that ring inherit it — but not polynomial rings *over* it.
3. Let `gb` accept the strategy name too.

The second point is the subtle one and worth preserving in any implementation: a Boolean strategy is
valid for `R/I` because the elements are the same kind of thing, and invalid for `R[y]` because they
are not.

### Notes for whoever picks this up

`Strategy` versus `Algorithm` is left open in the file. The tree has since settled towards `Strategy`
with hook-based dispatch — `kernel RingMap` (`ringmap.m2:240`) and `intersect` both work that way now
— so the machinery this asks for partly exists in a different form, and the question is whether ring-
registered strategies should be expressed as hooks rather than as a name looked up in the ring.

`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 gb.m2's RawStrategyCodes table and the BooleanGB implementation that exports gbBoolean. Compare their dispatch with the hook-based approaches in ringmap.m2:240 and intersect. Done means a ring can register a strategy for gb, quotient rings inherit it, polynomial extensions do not, and gb accepts the strategy name.

Written by the indexing model from the issue text.

Assessment

Domain
backend
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.