Helper classes for structural embeddings and isomorphisms of number fields#
Consider the following fields \(L\) and \(M\):
sage: L.<a> = QuadraticField(2)
sage: M.<a> = L.absolute_field()
>>> from sage.all import *
>>> L = QuadraticField(Integer(2), names=('a',)); (a,) = L._first_ngens(1)
>>> M = L.absolute_field(names=('a',)); (a,) = M._first_ngens(1)
Both produce the same extension of \(\QQ\). However, they should not be identical because \(M\) carries additional information:
sage: L.structure()
(Identity endomorphism of
Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?,
Identity endomorphism of
Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?)
sage: M.structure()
(Isomorphism given by variable name change map:
From: Number Field in a with defining polynomial x^2 - 2
To: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?,
Isomorphism given by variable name change map:
From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?
To: Number Field in a with defining polynomial x^2 - 2)
>>> from sage.all import *
>>> L.structure()
(Identity endomorphism of
Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?,
Identity endomorphism of
Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?)
>>> M.structure()
(Isomorphism given by variable name change map:
From: Number Field in a with defining polynomial x^2 - 2
To: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?,
Isomorphism given by variable name change map:
From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?
To: Number Field in a with defining polynomial x^2 - 2)
This used to cause trouble with caching and made (absolute) number fields not
unique when they should have been. The underlying technical problem is that the
morphisms returned by structure()
can only be defined once the fields in
question have been created. Therefore, these morphisms cannot be part of a key
which uniquely identifies a number field.
The classes defined in this file encapsulate information about these structure morphisms which can be passed to the factory creating number fields. This makes it possible to distinguish number fields which only differ in terms of these structure morphisms:
sage: L is M
False
sage: N.<a> = L.absolute_field()
sage: M is N
True
>>> from sage.all import *
>>> L is M
False
>>> N = L.absolute_field(names=('a',)); (a,) = N._first_ngens(1)
>>> M is N
True
AUTHORS:
Julian Rueth (2014-04-03): initial version
- class sage.rings.number_field.structure.AbsoluteFromRelative(other)[source]#
Bases:
NumberFieldStructure
Structure for an absolute number field created from a relative number field.
INPUT:
other
– the number field from which this field has been created.
- class sage.rings.number_field.structure.NameChange(other)[source]#
Bases:
NumberFieldStructure
Structure for a number field created by a change in variable name.
INPUT:
other
– the number field from which this field has been created.
- class sage.rings.number_field.structure.NumberFieldStructure(other)[source]#
Bases:
UniqueRepresentation
Abstract base class encapsulating information about a number fields relation to other number fields.
- create_structure(field)[source]#
Return a tuple encoding structural information about
field
.OUTPUT:
Typically, the output is a pair of morphisms. The first one from
field
to a field from whichfield
has been constructed and the second one its inverse. In this case, these morphisms are used as conversion maps between the two fields.
- class sage.rings.number_field.structure.RelativeFromAbsolute(other, gen)[source]#
Bases:
NumberFieldStructure
Structure for a relative number field created from an absolute number field.
INPUT:
other
– the (absolute) number field from which this field has been created.gen
– the generator of the intermediate field
- class sage.rings.number_field.structure.RelativeFromRelative(other)[source]#
Bases:
NumberFieldStructure
Structure for a relative number field created from another relative number field.
INPUT:
other
– the relative number field used in the construction, seecreate_structure()
; there this field will be calledfield_
.
- create_structure(field)[source]#
Return a pair of isomorphisms which go from
field
to the relative number field (calledother
below) from whichfield
has been created and vice versa.The isomorphism is created via the relative number field
field_
which is identical tofield
but is equipped with an isomorphism to an absolute field which was used in the construction offield
.INPUT:
field
– a relative number field