# restricting a NumberField to the reals for the calculation of a Galois group

I am trying to calculate a Galois Group. I have the following code

x=QQbar(7**(1/8))
L.<x>=NumberField(x.minpoly())
G=L.galois_group(names='x')
print(G)


The output is

Galois group of Galois closure in x of Number Field in x with defining polynomial x^8 - 7


I would like to restrict the number field L to the reals. My number field should be non-complex and contain the real root of the minimum polynomial only. How do I acchieve that in my code?

Thanks

edit retag close merge delete

Sort by ยป oldest newest most voted

We can ask sage for all subfields, take then those that are totally real among them. This first try gives:

sage: var('x');
sage: L.<a> = NumberField(x^8-7)
sage: [F_data for F_data in L.subfields() if F_data[0].is_totally_real()]
[(Number Field in a0 with defining polynomial x,
Ring morphism:
From: Number Field in a0 with defining polynomial x
To:   Number Field in a with defining polynomial x^8 - 7
Defn: 0 |--> 0,
None),
(Number Field in a1 with defining polynomial x^2 - 7,
Ring morphism:
From: Number Field in a1 with defining polynomial x^2 - 7
To:   Number Field in a with defining polynomial x^8 - 7
Defn: a1 |--> -a^4,
None)]


So the totally real subfields in the list come with their embeddings. I.e. the F_data is a tuple with three components, the pythonically 0.th component is the field.

The first field listed above is $\Bbb Q=\Bbb Q(0)$, where $0$ is the root of $x$, the second field is the field $\Bbb Q(\sqrt 7)$, where $\sqrt 7$ (considered algebraically) is the root of $x^2-7$. We want the maximal degree, so an idea is to sort w.r.t. the degrees and take the maximal degree. The code doing this is:

sage: var('x');
sage: L.<a> = NumberField(x^8-7)
sage: L_totally_real_subfields = [(F, emb) for (F, emb, _) in L.subfields() if F.is_totally_real()]
sage: L_totally_real_subfields.sort(key=lambda data: data[0].degree())
sage: L_totally_real_subfields[-1]
(Number Field in a1 with defining polynomial x^2 - 7,
Ring morphism:
From: Number Field in a1 with defining polynomial x^2 - 7
To:   Number Field in a with defining polynomial x^8 - 7
Defn: a1 |--> -a^4)


Let's "do the same" with some nice cyclotomic field...

sage: K.<z> = CyclotomicField(17)
sage: K_totally_real_subfields = [F for (F, emb, _) in K.subfields() if F.is_totally_real()]
sage: len(K_totally_real_subfields)
4
sage: K_totally_real_subfields.sort(key=lambda F: F.degree())
sage: K_totally_real_subfields[-1]
Number Field in z3 with defining polynomial x^8 + x^7 - 7*x^6 - 6*x^5 + 15*x^4 + 10*x^3 - 10*x^2 - 4*x + 1 with z3 = 1.864944458808712?
sage: _.defining_polynomial().roots(ring=QQbar, multiplicities=False)
[-1.965946199367804?,
-1.700434271459229?,
-1.205269272758513?,
-0.5473259801441657?,
0.1845367189266040?,
0.8914767115530766?,
1.478017834441319?,
1.864944458808712?]

more

The question might be addressed by considering a specific subfield:

 x=QQbar(7**(1/8))
L.<x>=NumberField(x.minpoly())
Ls=L.subfields(degree=2)
print(Ls)
G=Ls[0][0].galois_group(names='x')
print(G.list())


In this case, the subfield which is real is of degree 2, seen as a vector space. The number field can be restricted to the reals by considering the appropriate subfield which is a proper subset of the reals. The output of the above code is

[
(Number Field in x0 with defining polynomial x^2 - 7, Ring morphism:
From: Number Field in x0 with defining polynomial x^2 - 7
To:   Number Field in x with defining polynomial x^8 - 7
Defn: x0 |--> -x^4, None)
]
[(), (1,2)]

more