Skip to content

Conversation

@Yashagarwal9798
Copy link

Summary

This PR fixes a correctness issue where Sage used PARI's qfbclassno() by default to compute class numbers of quadratic orders. PARI's documentation explicitly warns that qfbclassno() "may give incorrect results when the class group has many cyclic factors."

Changes

  • When proof=True (default): use quadclassunit() for reliable results (assuming GRH)
  • When proof=False: use qfbclassno() for speed (user explicitly opts out)

Files Modified

  • src/sage/rings/number_field/order.py - quadratic_order_class_number()
  • src/sage/quadratic_forms/bqf_class_group.py - BQFClassGroup.order() and cardinality()
  • src/sage/rings/integer.pyx - Integer.class_number()

References

  • PARI documentation for qfbclassno: states results may be incorrect for large discriminants
  • PARI documentation for quadclassunit: recommended for proven results (assuming GRH)

PARI documentation warns that qfbclassno may return incorrect results
for large discriminants when the class group has many cyclic factors.

This change ensures:
- proof=True (default): uses quadclassunit for reliable results (assuming GRH)
- proof=False: uses qfbclassno for speed (user explicitly opts out of proof)

Modified files:
- src/sage/rings/number_field/order.py: quadratic_order_class_number()
- src/sage/quadratic_forms/bqf_class_group.py: BQFClassGroup.order()
- src/sage/rings/integer.pyx: Integer.class_number()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant