Ask Your Question
2

fixed subfield of cyclotomic field

asked 2021-07-05 17:35:43 +0200

FrédéricC gravatar image

What would be a simple way, given a subgroup $G$ of $(\mathbf{Z}/m)^*$ (given as a list of integers coprime to $m$)

to define the corresponding (by Galois) subfield of the cyclotomic field $\mathbf{Q}(\zeta_m)$ ?

For example, $m=5$ and the subgroup is given by $L = [1, 4]$.

edit retag flag offensive close merge delete

3 Answers

Sort by » oldest newest most voted
2

answered 2021-07-05 21:04:42 +0200

FrédéricC gravatar image

Here is a variation on the answer of rburing. Does it still look correct ?

def subfield(m, L):
    K = CyclotomicField(m, 'z')
    z = K.zeta(m)
    G = K.galois_group()
    power_list = [z**k for k in range(m)]
    convert = ((sigma, power_list.index(sigma(z)))
               for sigma in G)
    G_gens = [g for g, i in convert if i in L]
    return G.subgroup(G_gens).fixed_field()
edit flag offensive delete link more
1

answered 2021-07-05 19:03:50 +0200

slelievre gravatar image

This is a long comment rather than an answer.

It provides some code to define the objects in the question, in the hope it can help answer it.

Galois subgroups and their fixed fields

Starting with Sage 9.4.beta1, in which the following ticket was merged:

one can get subgroups of the Galois group of a number field, and the associated fixed fields.

Define a cyclotomic field:

sage: K.<z> = CyclotomicField(5)

Get its Galois group:

sage: G = K.galois_group()
sage: G
Galois group 4T1 (4) with order 4 of x^4 + x^3 + x^2 + x + 1

Get that group's subgroups:

sage: G.subgroups()
[Subgroup generated by [()] of
   (Galois group 4T1 (4) with order 4 of x^4 + x^3 + x^2 + x + 1),
 Subgroup generated by [(1,3)(2,4)] of
   (Galois group 4T1 (4) with order 4 of x^4 + x^3 + x^2 + x + 1),
 Subgroup generated by [(1,2,3,4), (1,3)(2,4)] of
   (Galois group 4T1 (4) with order 4 of x^4 + x^3 + x^2 + x + 1)]

Get the associated fixed fields:

sage: H, I, J = G.subgroups()
sage: H.fixed_field()
(Cyclotomic Field of order 5 and degree 4,
 Identity endomorphism of Cyclotomic Field of order 5 and degree 4)
sage: I.fixed_field()
(Number Field in z0 with defining polynomial x^2 - x - 1 with z0 = -0.618033988749895?,
 Ring morphism:
   From: Number Field in z0 with defining polynomial x^2 - x - 1 with z0 = -0.618033988749895?
   To:   Cyclotomic Field of order 5 and degree 4
   Defn: z0 |--> z^3 + z^2 + 1)
sage: J.fixed_field()
(Rational Field,
 Coercion map:
   From: Rational Field
   To:   Cyclotomic Field of order 5 and degree 4)

The action of Galois group elements on field elements is as follows:

sage: G.gens()
[(1,2,3,4)]
sage: g = G.gen()
sage: g
(1,2,3,4)
sage: g.order()
4

sage: g(z)
z^2
sage: g(z^2)
-z^3 - z^2 - z - 1
sage: (g^2)(z)
-z^3 - z^2 - z - 1

Multiplicative subgroups of cyclic rings

Now let us consider the the cyclic ring on 5 elements:

sage: C = Zmod(5)
sage: C
Ring of integers modulo 5

There are two ways to get the subgroups of its group of units.

The method multiplicative_subgroups gives tuples of generators for these subgroups.

sage: C.multiplicative_subgroups()
((2,), (4,), ())

The other way is to construct the ring's unit group and get its subgroups.

sage: U = C.unit_group()
sage: U.subgroups()
[Multiplicative Abelian subgroup isomorphic to C4 generated by {f},
 Multiplicative Abelian subgroup isomorphic to C2 generated by {f^2},
 Trivial Abelian subgroup]

There was recently a discussion about working with these subgroups at:

Putting the pieces together

Hopefully someone sees how to put these pieces together to answer the question satisfactorily!

edit flag offensive delete link more
1

answered 2021-07-05 19:53:35 +0200

rburing gravatar image

updated 2021-07-05 19:57:05 +0200

Here you go:

m = 5
Zm = Zmod(m)
L = [Zm(1), Zm(-1)]
K.<z> = CyclotomicField(m)
power_list = [z^k for k in range(m)]
gens_powers = [Zm(power_list.index(sigma(z))) for sigma in K.galois_group().gens()]
gens_powers_logs = matrix(ZZ, [e.generalised_log() for e in gens_powers]).transpose()
L_logs = [vector(ZZ, t.generalised_log()) for t in L]
L_exponents = [list(gens_powers_logs.solve_right(s).change_ring(ZZ)) for s in L_logs]
G_gens = [prod(sigma^k for (sigma,k) in zip(K.galois_group().gens(), L_exponent)) for L_exponent in L_exponents]
G = K.galois_group().subgroup(G_gens)
G.fixed_field()

To check that the group G is correct, you can evaluate [power_list.index(g(z)) for g in G].

The part with solve_right should be improved, because we only want integer solutions.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2021-07-05 17:35:43 +0200

Seen: 126 times

Last updated: Jul 05 '21