8 votos

Comandos MAGMA para los cálculos de la teoría de Galois

Tal vez esto sea pisar terreno viejo (o el lugar equivocado para preguntar esto), pero estoy buscando usar MAGMA para realizar ciertos cálculos en Galois Thoery. La motivación de esta pregunta es crear un archivo de comandos MAGMA "útiles" para cualquiera que quiera resolver problemas (elementales) en la Teoría de Galois.

Estoy utilizando la siguiente calculadora disponible en Internet: http://magma.maths.usyd.edu.au/calc/

Tengo en mente los siguientes comandos (no exhuastivos):

1. Factorización de un polinomio dado sobre un campo dado

es decir, una plantilla con entradas : polinomio (definido en $\mathbb{Z}[x]$ para estos fines) y cualquiera que sea el ámbito en el que trabajemos. La página web salida deben ser los factores irreducibles del polinomio de entrada sobre el campo.

2. Cálculo explícito de un campo de división

Así que aquí una plantilla con entradas : polinomio y campo sobre el que queremos dividirlo con salida El campo de división: el campo de división

3. Cálculo explícito de un grupo de Galois para un polinomio dado Entrada : polinomio, campo base Salida : Grupo de Galois

4. Encontrar las raíces de un polinomio dado Entrada : polinomio, campo base Salida : Raíces (y potencialmente el campo de división)

5. Resultados de la correspondencia, por ejemplo, la red de subcampos del campo de división y los subgrupos del grupo de Galois Entrada : polinomio, campo base Salida campo de división, subcampos intermedios, grupo de Galois, subgrupos ( y alguna forma de identificar qué subgrupos corresponden a qué subcampos fijos bajo la correspondencia de Galois)

Así que esta pregunta tiene un ejemplo de 3, pero sería útil tener todo en un solo lugar.

10voto

Geoff Bailey Puntos 31

Hay un sentido en el que estás tratando de hacer las cosas de una manera no magma, y eso puede causarte dificultades. En cada caso estás separando el polinomio del campo de interés. En Magma, uno generalmente definiría primero el polinomio sobre ese campo y luego aplicar la función obvia. Por ejemplo, empezaré con un par de polinomios y trabajaré con algunos de esos ejemplos. Observa que las líneas que empiezan con ">" representan la entrada (el ">" es el prompt de Magma) y las otras muestran la salida de Magma del comando anterior.

> Qx<x> := PolynomialRing(Rationals());
> Ky<y> := PolynomialRing(GF(11));
> f := x^3 + x + 1;
> g := y^3 + y + 1;

Puede ser tentador pensar en f y g como el "mismo" polinomio, pero no es así; f se define sobre el campo racional (y las operaciones sobre f utilizará este campo cuando sea necesario), mientras que g se define sobre el campo finito con 11 elementos (y las operaciones sobre g será en este contexto).

1. Factorización

> Factorization(f);
[
    <x^3 + x + 1, 1>
]
> Factorization(g);
[
    <y + 9, 1>,
    <y^2 + 2*y + 5, 1>
]

El resultado de la factorización es una secuencia de tuplas. Como se puede ver, no ha sido necesario especificar el anillo de interés para la factorización, ya que se ha deducido del anillo de definición del polinomio.

2. Campo divisorio

> SplittingField(f);
Number Field with defining polynomial x^6 + 6*x^4 + 9*x^2 + 31 over the
Rational Field
> SplittingField(g);
Finite field of size 11^2

(En realidad, he eludido algunas salidas aquí -- en el primer caso, hay un segundo valor de retorno, que es una secuencia de las raíces de f levantado en el campo de la división).

3. Grupo de Galois

> GaloisGroup(f);
Symmetric group acting on a set of cardinality 3
Order = 6 = 2 * 3

(De nuevo, he eludido algunas salidas, que consisten en p -adicas a las raíces y algunos datos de Galois asociados utilizados por el algoritmo).

4. Raíces

> Roots(f);
[]
> Roots(g);
[ <2, 1> ]

5. Correspondencias

Me temo que responder completamente a lo anterior excede mis conocimientos "de la cabeza". Pero ciertamente la red de subcampos es computable.

> L := SplittingField(f);
> Subfields(L);
[
    <Number Field with defining polynomial x^6 + 6*x^4 + 9*x^2 + 31 over the 
    Rational Field, Mapping from: FldNum: L to FldNum: L>,
    <Number Field with defining polynomial x^2 + 31 over the Rational Field, 
    Mapping from: Number Field with defining polynomial x^2 + 31 over the 
    Rational Field to FldNum: L>,
    <Number Field with defining polynomial x^3 + 3*x^2 - 31 over the Rational 
    Field, Mapping from: Number Field with defining polynomial x^3 + 3*x^2 - 31 
    over the Rational Field to FldNum: L>,
    <Number Field with defining polynomial x^3 + 3*x^2 - 31 over the Rational 
    Field, Mapping from: Number Field with defining polynomial x^3 + 3*x^2 - 31 
    over the Rational Field to FldNum: L>,
    <Number Field with defining polynomial x^3 - 6*x^2 + 9*x - 31 over the 
    Rational Field, Mapping from: Number Field with defining polynomial x^3 - 
        6*x^2 + 9*x - 31 over the Rational Field to FldNum: L>
]
> A := SubfieldLattice(L);
> A;
Subfield Lattice of L
[1] Rational Field
[2] Subfield generated by a root of x^2 + 31
[3] Subfield generated by a root of x^3 + 3*x^2 - 31
[4] Subfield generated by a root of x^3 + 3*x^2 - 31
[5] Subfield generated by a root of x^3 - 6*x^2 + 9*x - 31
[6] Subfield generated by a root of x^6 + 6*x^4 + 9*x^2 + 31

> MaximalSubfields(A[6]);
[ 2, 3, 4, 5 ]
> MinimalOverfields(A[1]);
[ 2, 3, 4, 5 ]

Por lo tanto, se puede ver que la red es bastante simple en este caso.

Ahora, para responder a tu pregunta tal y como está escrita, necesitaríamos también poder convertir un polinomio de un anillo a otro. Eso es bastante fácil de varias maneras, utilizando varias de las herramientas de coerción de Magma. Una forma es evaluar el polinomio en el trascendental desde un anillo de polinomios apropiado, pero esto no siempre funciona si los dos anillos no están sensiblemente relacionados. Por ejemplo, no hay una superestructura sensata para Q y F11 así que esto falla:

> Evaluate(f, y);

>> Evaluate(f, y);
           ^
Runtime error in 'Evaluate': Arguments have incompatible coefficient rings

Pero si quisiéramos levantar f a un polinomio sobre su campo de división, eso podría funcionar:

> L := SplittingField(f);
> P<t> := PolynomialRing(L);
> Evaluate(f, t);
t^3 + t + 1

Otra opción es utilizar ChangeRing, que a veces funciona en casos en los que Evaluar no lo haría:

> ChangeRing(f, GF(11));
y^3 + y + 1
> ChangeRing(f, L);
t^3 + t + 1

Sin embargo, si Evaluate se queja, es probable que estés haciendo algo poco sensato en primer lugar.

Así que, utilizando todo lo anterior, podemos producir funciones como las que pediste para los cuatro primeros casos. Sin embargo, todas ellas son finas envolturas alrededor de funciones existentes subyacentes, y sería mejor crear los polinomios sobre los anillos deseados en primer lugar.

1. Factorización

En realidad, esto resulta estar ya presente como otra forma de llamar a la Factorización:

> Factorization(f, L);
[
    <t + 1/18*(-L.1^4 - 5*L.1^2 - 9*L.1 - 4), 1>,
    <t + 1/18*(-L.1^4 - 5*L.1^2 + 9*L.1 - 4), 1>,
    <t + 1/9*(L.1^4 + 5*L.1^2 + 4), 1>
]

2. Campo divisorio

Aquí necesitamos la envoltura simple:

> mySplittingField := func<pol, ring | SplittingField(ChangeRing(pol, ring))>;

O, evitando la notación abreviada func:

> mySplittingField := function(pol, ring)
>    return SplittingField(ChangeRing(pol, ring));
> end function;

3. Grupo de Galois

> myGaloisGroup := func<pol, ring | GaloisGroup(ChangeRing(pol, ring))>;
> myGaloisGroup(f, L);
Permutation group acting on a set of cardinality 3
Order = 1

4. Raíces

Esto también resulta estar presente como una alternativa opcional:

> Roots(f, L);
[
    <1/9*(-L.1^4 - 5*L.1^2 - 4), 1>,
    <1/18*(L.1^4 + 5*L.1^2 - 9*L.1 + 4), 1>,
    <1/18*(L.1^4 + 5*L.1^2 + 9*L.1 + 4), 1>
]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X