Complex Multiplication

Let \(A\) be a CM-étale algebra of dimension \(2g\) over \({{\Q}}\). Then complex conjugation acts on \({\rm Homs}(A,{\C})\). We denote this action with \(\overline{\cdot}\). A CM-type \(\Phi\) of \(A\) is a set of \(g\) elements of \({\rm Homs}(A,{\C})\) such that \({\rm Homs}(A,{\C}) = \Phi \sqcup \overline{\Phi}\).

Given a CM-type \(\Phi\) and a totally imaginary element \(b\in A^\times\), we say that \(b\) is \(\Phi\)-positive if \({\operatorname{Im}}(\varphi(b))>0\) for every \(\varphi\in \Phi\). Two totally imaginary elements \(b\) and \(b'\) in \(A^\times\) represent the same CM-type \(\Phi\) if and only if \(b/b'\) is totally real and totally positive.

In Magma a CM-type of a CM-algebra \(A\) has type AlgEtQCMType and it is determined by \(g\) homomorphisms to \({\C}\) or by a \(\Phi\)-positive element.

CMType(seq): SeqEnum[Map] -> AlgEtQCMType

Given a sequence \(seq\) of homomorphisms from a CM-algebra to CC, one per conjugate pair, it returns the corresponding CMType.

Example: CM Type of an Etale Algebra (ex-d5afe8)
> _<x> := PolynomialRing(Integers());
> A := EtaleAlgebra(x^2+1);
> homs := HomsToC(A);
> PHI := CMType([homs[1]]);
> H := Homs(PHI : Precision := 30);
> #H;
1

Run in calculator (opens in a new tab)

CreateCMType(seq): SeqEnum[Map] -> AlgEtQCMType

Given a sequence \(seq\) of homomorphisms from a CM-algebra to CC, one per conjugate pair, it returns the corresponding CMType.

CMType(b): AlgEtQElt -> AlgEtQCMType

Given a totally imaginary element \(b\), it returns the CMType PHI for which \(b\) is PHI-positive, that is, \({\rm Im}(\phi(b))>0\) for every \(\phi\) in PHI.

CreateCMType(b): AlgEtQElt -> AlgEtQCMType

Given a totally imaginary element \(b\), it returns the CMType PHI for which \(b\) is PHI-positive.

CMPositiveElement(PHI): AlgEtQCMType -> AlgEtQElt

Given a CMType PHI returns a totally imaginary PHI-positive element (which uniquely determines PHI).

CMPosElt(PHI): AlgEtQCMType -> AlgEtQElt

Given a CMType PHI returns a totally imaginary PHI-positive element (which uniquely determines PHI).

Homs(PHI): AlgEtQCMType -> SeqEnum[Map]
prec: RngIntElt                    Default: 30

Given an AlgEtQCMType PHI returns the sequence of maps to the complex field. The parameter prec (default value 30) determines the precision of the codomains of the maps.

PHI1 eq PHI2: AlgEtQCMType, AlgEtQCMType -> BoolElt
prec: RngIntElt                    Default: 30

Returns whether two cm types are equal. This happens if and only if the quotient of (any) two CMPositiveElements is totally real and totally positive.

Precision(PHI): AlgEtQCMType -> RngIntElt

Returns the precision of the given CM-type, that is, the codomain of each homomorphism will be ComplexField(Precision).

ChangePrecision(PHI0, prec): AlgEtQCMType, RngIntElt -> AlgEtQCMType

Changes the precision of the given CM-type, that is, the codomain of each homomorphism will be ComplexField(Precision).

ChangePrecision(~PHI, prec): AlgEtQCMType, RngIntElt

Changes the precision of the given CM-type, that is, the codomain of each homomorphism will be ComplexField(Precision).

AllCMTypes(A): AlgEtQ -> SeqEnum[AlgEtQCMType]
Precision: RngIntElt                    Default: Precision(GetDefaultRealField())

Returns all the AlgEtQCMTypes of \(A\). The parameter Precision determined the precision of the codomain of the maps defining the CMTypes.