Skip to content

Howell form #1735

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 2, 2024
Merged

Howell form #1735

merged 6 commits into from
Jul 2, 2024

Conversation

joschmitt
Copy link
Collaborator

I copied over the generic Howell form from Hecke.
This requires the operations 'ann', 'gcdex' and 'quo' as Storjohann calls them; I implemented these under the names annihilator, gcdex and _div for ResElem.jl. Better names are welcome.
I also added some lines that normalize the pivot elements with the canonical_unit to make the Howell form unique; is that correct?

Copy link

codecov bot commented Jun 25, 2024

Codecov Report

Attention: Patch coverage is 98.02632% with 3 lines in your changes missing coverage. Please review.

Project coverage is 87.39%. Comparing base (762eab1) to head (d39d3fc).

Files Patch % Lines
src/MatrixNormalForms.jl 98.57% 2 Missing ⚠️
src/Residue.jl 91.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1735      +/-   ##
==========================================
+ Coverage   87.33%   87.39%   +0.06%     
==========================================
  Files         117      117              
  Lines       29777    29929     +152     
==========================================
+ Hits        26006    26157     +151     
- Misses       3771     3772       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

src/Residue.jl Outdated
# g might not coincide with gcd(a, b) because gcd(a, b) is
# gcd(gcd(data(a), modulus(a)), data(b)) and g is just
# gcd(data(a), data(b)).
function gcdex(a::ResElem{T}, b::ResElem{T}) where {T <: RingElement}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

elsewhere this is done using the euclidean algo

@fieker
Copy link
Contributor

fieker commented Jun 25, 2024 via email

@joschmitt
Copy link
Collaborator Author

gcdex = xxgcd in Hecke? Giving the 2x2 matrix of cofactors? bad name - but then, Hecke's is also bad.... why _div? Is this an exact or an euc division? In which case, div should do? or divrem?

Yes, gcdex is what is called xxgcd in Hecke and gives the 2x2 matrix.

_div does not do an exact division. And I'm not sure I would call it "euclidean" in general? In the PhD thesis, Storjohann defines it for a principal ideal ring $R$ as

$\mathrm{Quo}(a, b)$: return a $q\in R$ such $a − qb \in \mathcal{R}(R, b)$

where $\mathcal{R}(R, b)$ is a "prescribed complete set of residues with respect to $b$".

@fieker
Copy link
Contributor

fieker commented Jun 25, 2024 via email

@joschmitt joschmitt marked this pull request as ready for review June 26, 2024 12:37
@joschmitt joschmitt closed this Jul 1, 2024
@joschmitt joschmitt reopened this Jul 1, 2024
@thofma thofma merged commit 72a7117 into Nemocas:master Jul 2, 2024
54 of 60 checks passed
@joschmitt joschmitt deleted the js/howell branch July 3, 2024 10:20
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.

3 participants