# Polynomial Mod Ideal

I have a polynomial $R\in\mathbb{Z}[x]$. I then define $R' = \frac{d}{dx}R$, and look at the splitting field of $R'$, $K$, an algebraic number field. Now, I want to find a prime ideal $\mathfrak{p}$ of $L$ of absolute degree 1 such that $R\mod\mathfrak{p}$ is irreducible.

To do this, I've set up:

p0, n = 5, 7
L = PolynomialRing(ZZ,'x')
R = L(x^n-p0^(n-1)x+p0)
Rprime = L(n*x^(n-1)-p0^(n-1))
K = NumberField(Rprime, 'z')
for P in K.primes_of_degree_one_iter():
<stuff>


I'm now trying ti find the right thing to do for <stuff>. Namely, how can I reduce the polynomial R with respect to the ideal P?

edit retag close merge delete

Let us do the above, and further insert some print:

p0, n = 5, 7
L.<x> = PolynomialRing( ZZ )

R = L( x^n - p0^(n-1)*x + p0 )
Rprime = L( n*x^(n-1) - p0^(n-1) )

K.<z> = NumberField( Rprime )
for P in K.primes_of_degree_one_iter():
print P


The long list ends with:

Fractional ideal (44893, 26936/625*z^5 - 134679/5*z - 8174)
Fractional ideal (49697, -99393/3125*z^5 + 99394/5*z - 24271)
Fractional ideal (71429, -71428/3125*z^5 + 71429/5*z - 13020)


P is now the last entry, it is a fractional ideal. We can factor it like:

sage: P.factor()
(Fractional ideal (7, 7/3125*z^5))^-1 * (Fractional ideal (71429, 7/3125*z^5 - 19711))


Please explain what should be done in this situation. I need one more comment to paste some code...

( 2017-11-16 07:34:47 -0500 )edit

... continuation:

sage: P
Fractional ideal (71429, -71428/3125*z^5 + 71429/5*z - 13020)
sage: for f, pow in P.factor():
....:     print "pow=%s ideal is %s" % ( pow, f )

pow=-1 ideal is Fractional ideal (7, 7/3125*z^5)
pow=1 ideal is Fractional ideal (71429, 7/3125*z^5 - 19711)


Now f is the last fractional ideal. Its gens are algebraic integers:

sage: for g in f.gens():
....:     print g, 'with norm', ZZ(g.norm()).factor()

71429 with norm 71429^6
7/3125*z^5 - 19711 with norm 2 * 3 * 11311 * 71429 * 12098321599065661


and we may build K.quotient( f ), but this is maybe not wanted.

Passing to ZZ / 71429 first, then modulo ... is what you want?

Also, note that K(R) has degree one, -93750/7*z + 5, we need maybe a new R in K[]...

( 2017-11-16 07:55:17 -0500 )edit

I'm trying to implement Lemma 2.3 from Kedlaya's A construction of polynomials with squarefree discriminants (I don't believe I can post links, its identifier on Arxiv is 1103.5728). This lemma says "Let $p_0$ be a prime not dividing $n(n−1)$. Then there exist infinitely many primes $p_1$ modulo which the polynomial $R(x) = x^n − p_0^{n−1}x + p_0$ is irreducible and its derivative $R′(x) = nx^{n−1} − p_0^{n−1}$ splits into distinct linear factors.

( 2017-11-16 14:42:33 -0500 )edit

The proof is:

"The polynomial $R′$ has splitting field $L = \mathbb{Q}(\zeta_n−1, n^{1/(n−1)})$, in which $p_0$ does not ramify because $p_0$ does not divide $n(n−1)$. Thus $R$ is an Eisenstein polynomial with respect to any prime above $p_0$ in $L$; in particular, $R$ is irreducible over $L$. By the Chebotarev density theorem, there exist infinitely many prime ideals of $L$ of absolute degree 1 modulo which $R$ is irreducible; the norm of any such prime ideal is the prime we want."

I'm not entirely sure what "absolute degree 1" means for a prime ideal, and if K.primes_of_degree_one_iter() is giving me something else (namely, fractional ideals), this could be the issue. Do you know how I could find prime ideals of $L$ of absolute degree 1?

( 2017-11-16 14:45:28 -0500 )edit

Sort by » oldest newest most voted

The link to the article is (https://arxiv.org/abs/1103.5728)[http... .

    I think, the following code is relevant - for the comment, not for the posted question:

p0 = 5
n  = 7

S.<x> = ZZ[]

R  =   x^n     - p0^(n-1)*x + p0
Rx = n*x^(n-1) - p0^(n-1)

F.<u> = CyclotomicField( n-1 )
L.<a> = F.extension( x^(n-1) - n )

LPrimes = L.primes_of_degree_one_list( 100 )

for LP1 in LPrimes:
p1  = LP1.relative_norm().norm()
Fp1 = GF(p1)
Rp1 = PolynomialRing( Fp1, names='x' )
print "p1 = %s" % p1
print "R  mod p1 is %s :: %s" % ( Rp1(R ), 'IRRED' if Rp1(R).is_irreducible() else 'RED' )
print "Rx mod p1 is %s == %s" % ( Rp1(Rx), Rp1(Rx).factor() )


(Have to send, and catch that train, possibly be back again.)

more

This is exactly what I needed! A few questions: 1. Is there any particular reason that the field $F$ is constructed as an extension of a cyclotomic, instead of just specifying the two generators? 2. Similar to the above, is there any particular reason the norm of p1 is computed as the relative norm, and then the (what I'm assuming is) absolute norm?

( 2017-11-19 16:23:01 -0500 )edit