Tommy Hofmann

Results 702 comments of Tommy Hofmann

Or just write, that it returns whether `poly` is squarefree as a polynomial over the rationals.

There is a generic `howell_form`/`strong_echelon_form` in AbstractAlgebra. This is all one needs (see https://github.com/flintlib/flint/blob/main/src/fmpz_mat/hnf_modular_eldiv.c#L35-L46). Just call `strong_echelon_form` and then lift and adjust the missing diagonal. This will work for $\bf{Q}[X]$....

You compute the Howell form of a matrix over a quotient ring: ``` julia> Q, = quo(QQx, x); julia> AbstractAlgebra.howell_form(Q.(M)) [1 1] [0 0] ```

``` julia> R, = residue_ring(ZZ, 2^10) (Integers modulo 1024, Map: ZZ -> R) julia> Rx, (x, y) = R[:x, :y] (Multivariate polynomial ring in 2 variables over R, zzModMPolyRingElem[x, y])...

OK, this is just the usual error message thrown by flint. Another example would be ``` julia> try; @ccall Nemo.libflint.n_invmod(2::UInt, 4::UInt)::UInt; catch; end Flint exception (Impossible inverse): Cannot invert modulo...

Good point! What to do with the parent depends a bit on how the bottom layer looks like: Whether it is parent-less or parent-full. If we do the cheap version...

We (@fingolfin @fieker and myself) decided to try this with `ZZRingElem` and see how much fun this is to adjust the code downstream. I will do this.

I'll keep copy and deepcopy the way they are. Where the pointer points to (`fmpz`, `fmpz_mat` etc) is just an implementation detail.

I adjusted a lot of code, until I realized that this approach has a serious drawback. One cannot actually swap matrix elements! ``` julia> M = ZZ[1 2] [1 2]...

I don't think it will help: ``` julia> using WhereIsMyDocstring julia> @docmatch base_ring(::AbsAffineScheme{BRT, RT}) where {BRT, RT} 4-element Vector{WhereIsMyDocstring.DocStr}: ``` It will include the same four docstrings.