Helper classes for structural embeddings and isomorphisms of number fields

AUTHORS:

  • Julian Rueth (2014-04-03): initial version

Consider the following fields \(L\) and \(M\):

sage: L.<a> = QuadraticField(2)
sage: M.<a> = L.absolute_field()

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,
 Identity endomorphism of Number Field in a with defining polynomial x^2 - 2)
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,
 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)

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
sage.rings.number_field.structure.AbsoluteFromRelative

Structure for an absolute number field created from a relative number field.

INPUT:

  • other – the number field from which this field has been created.
sage.rings.number_field.structure.NameChange

Structure for a number field created by a change in variable name.

INPUT:

  • other – the number field from which this field has been created.
sage.rings.number_field.structure.NumberFieldStructure

Abstract base class encapsulating information about a number fields relation to other number fields.

sage.rings.number_field.structure.RelativeFromAbsolute

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
sage.rings.number_field.structure.RelativeFromRelative

Structure for a relative number field created from another relative number field.

INPUT:

  • other – the relative number field used in the construction, see create_structure(); there this field will be called field_.