Absolute Field
One may construct an absolute field isomorphic to the current subfield represented by an algebraically closed field. The construction of the absolute field may be very expensive, as it involves factoring polynomials over successive subfields. In fact, it is often the case that the degree of the absolute field is an extremely large integer, so that an absolute field is not practically representable, yet the system may allow one to compute effectively with the original non-absolute presentation.
- AbsoluteAffineAlgebra(A): FldAC -> RngUPolRes
- AbsoluteQuotientRing(A): FldAC -> RngUPolRes
Simplify the algebraically closed field \(A\) fully (see
Simplify(A)above) and then return an absolute field as a univariate affine algebra \(R\) which is isomorphic to the current (true) algebraic field represented by \(A\), and also return the isomorphism \(f:A\rightarrow R\).
- AbsolutePolynomial(A): FldAC
Simplify the algebraically closed field \(A\) fully (see
Simplify(A)above) and then compute an absolute field isomorphic to the current (true) algebraic field represented by \(A\) and return the defining polynomial of the absolute field. That is, return a polynomial \(f\) such that \(K[x]/<f>\) is isomorphic to \(A\) in its current state.
- NumberField(A): FldAC -> FldNum, Map
Absolute: BoolElt Default: false
The number field \(N\) isomorphic to the subfield of \(A\) generated by the elements introduced so far, and a bidirectional map \(f:A\ar N\). By default \(N\) is a tower with one extension for each variable of \(A\). If the parameter
Absoluteis set totrue, then \(N\) is an absolute number field instead. \(A\) is simplified and pruned in place (seeSimplify(A)andPrune(A)above). The map \(f\) is invalidated when \(A\) changes later, for example when a new root is computed or \(A\) is pruned again.
- NumberField(a): FldACElt -> FldNum, Map
The number field \(N\) generated by \(a\) over the base field of its parent \(A\), and the embedding \(N\ar A\) sending \(N.1\) to \(a\). \(N\) is defined by the minimal polynomial of \(a\) (see
MinimalPolynomial), so \(A\) is not simplified as a whole.
- Absolutize(A): FldAC
Modify the algebraically closed field \(A\) in place so that has an absolute presentation. That is, compute an isomorphic absolute field and absolute polynomial \(f\) as in
AbsolutePolynomialand modify \(A\) and its elements in place so that \(A\) now only has one variable \(v\) and corresponding defining polynomial \(f(v)\) and the elements of \(A\) correspond via the isomorphism to their old representation.
- Example: Field of Definition of the Cyclic-6 Variety (ex-32dfbd)
Run in calculator (opens in a new tab)
We show how one can easily compute the number field over which the complete variety of the Cyclic-6 ideal can be defined.
We first create the ideal \(I\) over \({\mathbb{Q}}\) and compute its variety over \(A\), the algebraic closure of \({\mathbb{Q}}\).
> P<a,b,c,d,e,f> := PolynomialRing(RationalField(), 6); > B := [ > a + b + c + d + e + f, > a*b + b*c + c*d + d*e + e*f + f*a, > a*b*c + b*c*d + c*d*e + d*e*f + e*f*a + f*a*b, > a*b*c*d + b*c*d*e + c*d*e*f + d*e*f*a + e*f*a*b + f*a*b*c, > a*b*c*d*e + b*c*d*e*f + c*d*e*f*a + d*e*f*a*b + > e*f*a*b*c + f*a*b*c*d, > a*b*c*d*e*f - 1]; > I := ideal<P | B>; > time Groebner(I); Time: 1.459 > A := AlgebraicClosure(); > time V := Variety(I, A); Time: 4.219 > #V; 156
We now notice that there are 28 variables in \(A\) and we check that all elements of \(V\) satisfy the original polynomials.
> Rank(A); 30 > V[1]; <-1, -1, -1, -1, r1 + 4, -r1> > V[156]; <r28^3 + 2*r28^2*r9 - 2*r9, -r28^3 - 2*r28^2*r9 + 2*r9, r9, -r28, r28, -r9> > {Evaluate(f, v): v in V, f in B}; { 0 }
We now simplify \(A\) to ensure that it represents a true field, and prune away useless variables now having linear defining polynomials.
> time Simplify(A); Time: 3.330 > Prune(A); > A; Algebraically closed field with 3 variables Defining relations: [ r3^2 - 1/3*r3*r2*r1 - 5/3*r3*r2 + 2/3*r3*r1 - 2/3*r3 + r2*r1 + 4*r2 + 1, r2^2 - r2*r1 - 4*r1 - 1, r1^2 + 4*r1 + 1 ] > V[1]; <-1, -1, -1, -1, r1 + 4, -r1> > V[156]; <2/3*r3*r2*r1 + 7/3*r3*r2 - 1/3*r3*r1 - 2/3*r3 + 5/3*r2*r1 + 19/3*r2 + 2/3*r1 + 4/3, -2/3*r3*r2*r1 - 7/3*r3*r2 + 1/3*r3*r1 + 2/3*r3 - 5/3*r2*r1 - 19/3*r2 - 2/3*r1 - 4/3, -4/3*r2*r1 - 14/3*r2 - 1/3*r1 - 2/3, 2/3*r3*r2*r1 + 7/3*r3*r2 - 1/3*r3*r1 - 2/3*r3 - 5/3*r2*r1 - 19/3*r2 + 1/3*r1 - 1/3, -2/3*r3*r2*r1 - 7/3*r3*r2 + 1/3*r3*r1 + 2/3*r3 + 5/3*r2*r1 + 19/3*r2 - 1/3*r1 + 1/3, 4/3*r2*r1 + 14/3*r2 + 1/3*r1 + 2/3>
Finally we compute an absolute polynomial for \(A\), and then modify \(A\) in place using
Absolutizeto make \(A\) be defined by one polynomial of degree 8.> time AbsolutePolynomial(A); x^8 + 4*x^6 - 6*x^4 + 4*x^2 + 1 Time: 0.080 > time Absolutize(A); Time: 0.259 > A; Algebraically closed field with 1 variables Defining relations: [ r1^8 + 4*r1^6 - 6*r1^4 + 4*r1^2 + 1 ] > V[1]; <-1, -1, -1, -1, 1/2*r1^6 + 2*r1^4 - 7/2*r1^2 + 3, -1/2*r1^6 - 2*r1^4 + 7/2*r1^2 + 1> > V[156]; <r1^7 + 4*r1^5 - 6*r1^3 + 4*r1, -r1^7 - 4*r1^5 + 6*r1^3 - 4*r1, -1/4*r1^7 - 3/4*r1^5 + 11/4*r1^3 - 7/4*r1, -r1, r1, 1/4*r1^7 + 3/4*r1^5 - 11/4*r1^3 + 7/4*r1> > {Evaluate(f, v): v in V, f in B}; { 0 }
- Example: Splitting Field of a Degree 8 Polynomial (ex-862d19)
Run in calculator (opens in a new tab)
In this example we compute the splitting field of a certain polynomial of degree 8.
We first set \(f\) to a degree-8 polynomial using the database of polynomials with given Galois group. The Galois group has order 16, so we know that the splitting field will have absolute degree 16.
> P<x> := PolynomialRing(IntegerRing()); > load galpols; Loading "/home/magma/libs/galpols/galpols" > PolynomialWithGaloisGroup(8, 6); x^8 - 2*x^7 - 9*x^6 + 10*x^5 + 22*x^4 - 14*x^3 - 15*x^2 + 2*x + 1 > f := $1; > #GaloisGroup(f); 16
We next create an algebraic closure \(A\) and compute the roots of \(f\) over \(A\).
> A := AlgebraicClosure(); > r := Roots(f, A); > #r; 8 > A; Algebraically closed field with 8 variables Defining relations: [ r8^8 - 2*r8^7 - 9*r8^6 + 10*r8^5 + 22*r8^4 - 14*r8^3 - 15*r8^2 + 2*r8 + 1, r7^8 - 2*r7^7 - 9*r7^6 + 10*r7^5 + 22*r7^4 - 14*r7^3 - 15*r7^2 + 2*r7 + 1, r6^8 - 2*r6^7 - 9*r6^6 + 10*r6^5 + 22*r6^4 - 14*r6^3 - 15*r6^2 + 2*r6 + 1, r5^8 - 2*r5^7 - 9*r5^6 + 10*r5^5 + 22*r5^4 - 14*r5^3 - 15*r5^2 + 2*r5 + 1, r4^8 - 2*r4^7 - 9*r4^6 + 10*r4^5 + 22*r4^4 - 14*r4^3 - 15*r4^2 + 2*r4 + 1, r3^8 - 2*r3^7 - 9*r3^6 + 10*r3^5 + 22*r3^4 - 14*r3^3 - 15*r3^2 + 2*r3 + 1, r2^8 - 2*r2^7 - 9*r2^6 + 10*r2^5 + 22*r2^4 - 14*r2^3 - 15*r2^2 + 2*r2 + 1, r1^8 - 2*r1^7 - 9*r1^6 + 10*r1^5 + 22*r1^4 - 14*r1^3 - 15*r1^2 + 2*r1 + 1 ]
Finally we simplify \(A\). There are defining polynomials of degrees 2 and 8 in the simplified field. The absolute polynomial of degree 16 defines the splitting field of \(f\).
> time Simplify(A); Time: 2.870 > A; Algebraically closed field with 8 variables Defining relations: [ r8 + 1/2*r3*r1^6 - 2*r3*r1^5 - r3*r1^4 + 8*r3*r1^3 - 2*r3*r1^2 - 5*r3*r1 - 1/2*r3 + r1^7 - 3/2*r1^6 - 9*r1^5 + 4*r1^4 + 19*r1^3 - r1^2 - 9*r1 - 5/2, r7 - 1/2*r3*r1^6 + 2*r3*r1^5 + r3*r1^4 - 8*r3*r1^3 + 2*r3*r1^2 + 5*r3*r1 + 1/2*r3, r6 + r3 - 3/2*r1^7 + 2*r1^6 + 14*r1^5 - 5*r1^4 - 28*r1^3 + 3*r1^2 + 19/2*r1, r5 - 1/2*r3*r1^6 + 2*r3*r1^5 + r3*r1^4 - 8*r3*r1^3 + 2*r3*r1^2 + 4*r3*r1 + 1/2*r3 + r1^6 - r1^5 - 9*r1^4 - r1^3 + 14*r1^2 + 6*r1, r4 + 1/2*r3*r1^6 - 2*r3*r1^5 - r3*r1^4 + 8*r3*r1^3 - 2*r3*r1^2 - 4*r3*r1 - 1/2*r3 - 1, r3^2 - 3/2*r3*r1^7 + 2*r3*r1^6 + 14*r3*r1^5 - 5*r3*r1^4 - 28*r3*r1^3 + 3*r3*r1^2 + 19/2*r3*r1 + 3/2*r1^6 - r1^5 - 15*r1^4 - 4*r1^3 + 27*r1^2 + 11*r1 - 9/2, r2 + 1/2*r1^7 - 3/2*r1^6 - 4*r1^5 + 10*r1^4 + 10*r1^3 - 16*r1^2 - 11/2*r1 + 3/2, r1^8 - 2*r1^7 - 9*r1^6 + 10*r1^5 + 22*r1^4 - 14*r1^3 - 15*r1^2 + 2*r1 + 1 ] > AbsolutePolynomial(A); x^16 - 36*x^14 + 488*x^12 - 3186*x^10 + 10920*x^8 - 19804*x^6 + 17801*x^4 - 6264*x^2 + 64
- Example: Splitting Field of a Quartic as a Number Field (ex-d2e9ca)
Run in calculator (opens in a new tab)
In this example we present the splitting field of \(x^4 - x - 1\), whose Galois group is \(S_4\), as a number field.
> P<x> := PolynomialRing(RationalField()); > f := x^4 - x - 1; > #GaloisGroup(f); 24 > A := AlgebraicClosure(); > r := Roots(f, A); > #r; 4
By default
NumberFieldpresents the splitting field as a tower, with one small defining polynomial per level: a root of \(f\), a root of the residual cubic above it, then a root of the residual quadratic. The map \(m\) sends the roots of \(f\) in \(A\) to roots of \(f\) in \(N\).> N, m := NumberField(A); > AbsoluteDegree(N); 24 > DefiningPolynomial(N); $.1^2 + (r2 + r1)*$.1 + r2^2 + r1*r2 + r1^2 > DefiningPolynomial(BaseField(N)); $.1^3 + r1*$.1^2 + r1^2*$.1 + r1^3 - 1 > DefiningPolynomial(BaseField(BaseField(N))); x^4 - x - 1 > Evaluate(f, m(r[1][1])); 0
With
Absolutethe same field is defined by a single polynomial of degree 24 in a primitive element. The size of that polynomial grows quickly with the degree of the field, which is why the tower is the default.> Na, ma := NumberField(A : Absolute); > DefiningPolynomial(Na); x^24 + 80*x^20 + 340*x^18 + 7520*x^16 - 23120*x^14 + 1241022*x^12 - 462400*x^10 + 48052400*x^8 - 61067260*x^6 + 756753632*x^4 + 2074608720*x^2 + 1215289321 > Evaluate(f, ma(r[1][1])); 0
- Example: Splitting Field of Degree 720 as a Tower (ex-fe6f00)
For larger splitting fields the tower is the only practical presentation. The splitting field of \(x^6 - x - 1\), whose Galois group is \(S_6\), has degree 720. As a tower with one extension for each variable of \(A\) it takes the time shown below. The
Absolutepresentation is orders of magnitude more expensive, and its defining polynomial is far too large to print.> P<x> := PolynomialRing(IntegerRing()); > f := x^6 - x - 1; > #GaloisGroup(f); 720 > A := AlgebraicClosure(); > r := Roots(f, A); > time N, m := NumberField(A); Time: 20.140 > Degree(N), AbsoluteDegree(N); 2 720 > Evaluate(f, m(r[1][1])); 0