1

I have a polynomial, and I would like to make a number field in Sage that would contain all roots of this polynomial. I have tried the following code but it throws an error:

R.<X>=QQ['X']
p=X^3+X^2+X-1

# extract the complex roots of `p`
pRoots=p.complex_roots();
for x in pRoots:
    if x.imag()>0.01:
        gamma = x
    if x.imag()<-0.01:
        gammabar = x

# mathematically: `K = Q(gamma)`
K.<g> = NumberField(p, embedding=gamma)
# mathematically: `L = K(gammabar) = Q(gamma,gammabar)`
L.<gg> = K.extension(p, embedding=gammabar)

The error says:

NotImplementedError: Embeddings not implemented for relative number fields

I obviously need embeddings since the minimal polynomial is the same for both gamma and gammabar

yo'
  • 4,506
  • You want the splitting field of the polynomial over $\mathbb{Q}$? – hardmath Nov 18 '13 at 18:22
  • I don't know what you mean by "splitting", but yes, I obviously need to work over $\mathbb Q$, since I basically want to express $\mathbb Q(\gamma, \overline\gamma)$ as $\mathbb Q(\alpha)$ for some $\alpha$. – yo' Nov 18 '13 at 19:10
  • The splitting field of a polynomial is precisely the smallest field extension that contains the roots of that polynomial, i.e. the smallest field in which the polynomial "splits" into linear factors. There's a discussion at Gmane of ways to do this in a slightly indirect way. – hardmath Nov 18 '13 at 19:15
  • Okay, I thought about it: we don't get $\overline{\gamma}$ just by adjoining $\gamma$ to the rationals $\mathbb{Q}$. If we did, then complex conjugation would be an automorphism of $\mathbb{Q}(\gamma)$ fixing $\mathbb{Q}$, but $\mathbb{Q}(\gamma)$ is dimension 3 over $\mathbb{Q}$, and 2 does not divide 3. – hardmath Nov 18 '13 at 21:30
  • @hardmath I asked a question exactly about it just before asking this one. However, your explanation doesn't seem to be enough, since I don't see why complex conjugation cannot fix a non-real field of degree $3$. – yo' Nov 18 '13 at 22:13
  • @hardmath btw, I posted a comment like 2 hours ago, but it seems to get lost on its way. I said that galois_closure() seems to be what I was looking for, so you can make it an answer, even though it's not completely general. I know only need to find out how things work further, but manuals should help with that. – yo' Nov 18 '13 at 22:15

1 Answers1

2

I adapted the Sage commands from that Gmane thread and got these results from an online Sage notebook:

sage: Zx.<x> = ZZ[]
sage: f = x^3 + x^2 + x - 1
sage: K.<a> = f.root_field()
sage: K
     Number Field in a with defining polynomial x^3 + x^2 + x - 1
sage: L.<b> = K.galois_closure()
sage: L
     Number Field in b with defining polynomial
          x^6 - 2*x^5 + 11*x^4 + 12*x^3 + 3*x^2 + 110*x + 517

I also verified the irreducibility of the polynomial:

sage: f.factor()
          x^3 + x^2 + x - 1

Note that the degree of the extension L over $\mathbb{Q}$ is six, and that since this is a splitting field for f, the Galois group of L over $\mathbb{Q}$ is order 6 as well.

While f has only root a in K (with multiplicity 1):

sage: f.roots(K)
     [(a, 1)]

we get three roots of f in L (each with multiplicity 1):

sage: f.roots(L)
     [(10/11103*b^5 - 311/22206*b^4 + 274/11103*b^3 
        - 334/3701*b^2 + 2134/11103*b - 9739/22206, 1),
      (5/11103*b^5 - 311/44412*b^4 + 137/11103*b^3
        - 167/3701*b^2 - 8969/22206*b - 9739/44412, 1),
      (-5/3701*b^5 + 311/14804*b^4 - 137/3701*b^3
        + 501/3701*b^2 + 1567/7402*b - 5065/14804, 1)]

I think there's freedom in identifying two of these with your $\gamma$ and $\overline{\gamma}$, but let me think about it more.

hardmath
  • 37,015
  • 1
    You can identify the roots in another way. You may do qRoot=L.polynomial().complex_roots()[0] and redefine L as L.<gg> = NumberField(q, embedding=qRoot). Then f.roots(L) give 3 roots, and when you .N() them, you see that they are gamma, gammabar and the real root in some order. They will permute depending on which qRoot you choose. – yo' Nov 18 '13 at 23:19