Skip to content

Identify abelian number fields in the jump box without polredabs (LMFDB#5471)#42

Open
roed-math wants to merge 1 commit into
mainfrom
ai/t43-nf-abelian-lookup
Open

Identify abelian number fields in the jump box without polredabs (LMFDB#5471)#42
roed-math wants to merge 1 commit into
mainfrom
ai/t43-nf-abelian-lookup

Conversation

@roed-math

Copy link
Copy Markdown
Owner

Looking up a number field by polynomial always ran polredbest+polredabs, which can hang — e.g. kernel polynomials of Dirichlet characters of large degree run for many minutes without producing an answer. This implements the abelian-case identification proposed by @jwj61: after polredbest, certify the field abelian with galoisinit on an order maximal at the small primes of the discriminant (the discriminant is never factored), read off the field discriminant from that order, query nf_fields by degree/signature/discriminant, and confirm candidates by exhibiting a root of their defining polynomial in the input field, so any label returned is provably correct; on any failure we fall back to the unchanged polredabs path. In addition, polynomials whose degree exceeds every field in nf_fields now return "not in the database" immediately: a degree-94 kernel polynomial of conductor 283 that previously ran polredabs for >300s now answers in 0.15s, and the degree-47 example from the issue is identified from a non-reduced defining polynomial in ~2s with a certificate. Tested on abelian fields of degree 8, 16 and 47 entered via deliberately non-reduced polynomials, plus non-Galois/non-abelian negatives; all 36 number_fields tests pass. Addresses LMFDB#5471.

🤖 Generated with Claude Code

…LMFDB#5471)

Add a fast path to WebNumberField.from_polynomial implementing jwj61's
abelian identification: after polredbest, certify the field abelian with
galoisinit over an order maximal at the small primes of the discriminant
(never factoring the discriminant), compute the field discriminant from
that order, query nf_fields by degree/signature/discriminant, and confirm
candidates by exhibiting a verified root of their defining polynomial, so
any label returned is provably correct; all failures fall back to the
unchanged polredabs path.  Inputs whose degree exceeds every field in
nf_fields now return "not in database" immediately instead of running
polredabs (a degree 94 kernel polynomial went from >300s to 0.15s; the
issue's degree 47 field is identified from a non-reduced polynomial in ~2s).

Verified: all 36 number_fields tests pass (3 new: identified jumps for the
issue's degree 47 field and Q(zeta_32) from non-reduced polynomials,
abelian_nf_label unit checks, fast large-degree jump); pyflakes clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants