[Next] [Prev] [_____] [Left] [Up] [Index] [Root]
Ideals and Quotients

Ideals and Quotients

Subsections

Ideal Arithmetic

I * J : RngOrdIdl, RngOrdIdl -> RngOrdIdl
The product IJ of the (fractional) ideals I and J, generated by the products of elements of I and elements of J.
I / J : RngOrdIdl, RngOrdIdl -> RngOrdIdl
The quotient of the (fractional) ideals I and J of an order O. This is the fractional ideal K of O with the property that J K=I.
I ^ k : RngOrdIdl, RngIntElt -> RngOrdIdl
The k-th power of the (fractional) ideal I (for an integer k).
x * I : FldNumElt, RngOrdIdl -> RngOrdIdl
Given an element x of (or coercible into) a number field K, and a (fractional) ideal I in an order of K, return the product of the ideal and the principal ideal generated by x.

Two-Element Presentations

Generators(I) : RngOrdIdl -> [ RngOrdElt ]
Given a (fractional) ideal I of O, return two elements of O that generate I as an ideal.
TwoElement(I) : RngOrdIdl -> FldNumElt, FldNumElt
Given a (fractional) ideal I of O, return two elements of the field of fractions of O that generate I as an ideal.
TwoElementNormal(I) : RngOrdIdl -> FldNumElt, FldNumElt, RngIntElt
Given an integral ideal I of O, return two elements of the field of fractions of O that form a two-element normal presentation for I, as well as an integer g such that I is g-normal.

Currently this produces reliable results only when I is a prime ideal.

Invariants

Denominator(I) : RngOrdIdl -> RngIntElt
The denominator of the fractional ideal I. This is the smallest positive integer d such that dI is an integral ideal.
Index(O, I) : RngOrdIdl -> RngIntElt
The index of the integral ideal I, when viewed as a sublattice of the order O. This is the same as the cardinality of the finite quotient ring O/I.
Norm(I) : RngOrdIdl -> FldRatElt
The norm of the fractional ideal I. This returns the index of the ideal if the ideal is integral, and defined on fractional ideals by multiplicativity (so that the norm of I^(-1) equals the reciprocal of the norm of I.
MinimalInteger(I) : RngOrdIdl -> RngIntElt
Given an ideal I this function returns the least positive integer m contained in I.
RamificationIndex(p, P) : RngOrdIdl -> RngIntElt
Returns, for a prime ideal P of an order O lying over the rational prime p, the maximal exponent e such that P^e divides the principal ideal pO.
Degree(I) : RngOrdIdl -> RngIntElt
Given a prime ideal I this function returns the residue class degree f of the ideal I.
Valuation(I, J) : RngOrdIdl, RngOrdIdl -> RngIntElt
Given a prime ideal I and an ideal J in an order O, return the valuation v_I(J) of J at I, that is, the number of factors I in the prime ideal decomposition of J. Note that, since the ideal J is allowed to be a fractional ideal, the returned value may be a negative integer.

Factorization and Primes

Decomposition(O, p) : RngOrd, RngIntElt -> [Tup(RngOrdIdl, RngIntElt)]
Given a rational prime number p and an order O, return a sequence of tuples consisting of prime ideals and exponents, according to the decomposition of p in O.
Factorization(I) : RngOrdIdl -> [Tup(RngOrdIdl, RngIntElt])
Returns the prime ideal factorization of an integral I in an order O, as a sequence of two-tuples (prime ideal and integer exponent).
DegreeOnePrimeIdeals(O, B) : RngOrd, RngIntElt -> [ RngOrdIdl ]
Given an order O as well as a positive integer bound B, return a sequence consisting of all prime ideals in O whose norm is a (rational) prime not exceeding the bound B.

Basis Representation

Basis(I) : RngOrdIdl -> [RngOrdElt]
Given an ideal I of an order O of the number field K, this function returns a Z-basis for I as a sequence of elements of K.
BasisMatrix(I) : RngOrdIdl -> AlgMatElt
Returns the basis matrix for the ideal I of O. The basis matrix consists of the elements of a Z-basis for the ideal written as rows of rational coefficients with respect to the power basis of the number field K of which O is an order.
TransformationMatrix(I) : RngOrdIdl -> AlgMatElt, RngIntElt
Returns the transformation matrix for the ideal I of O, as well as a denominator. The transformation matrix consists of the elements of a Z-basis for the ideal written as columns of coefficients with respect to the basis of the order O.
MultiplicatorRing(I) : RngOrdIdl -> Rng
Returns the multiplicator ring of the ideal I of the order O, that is, the subring of elements of the field of fractions of O that multiply I into itself.
pRadical(O, p) : RngOrd -> RngOrdIdl
Returns the p-radical of an order O for a prime integer p, defined as the ideal consisting of elements of O for which some power lies in the principal ideal pO.

Predicates on Ideals

The predicates listed below allow fractional ideals as argument.

I eq J : RngOrdIdl, RngOrdIdl -> BoolElt
I ne J : RngOrdIdl, RngOrdIdl -> BoolElt
x in I : FldNumElt, RngOrdElt -> BoolElt
x notin I : FldNumElt, RngOrdElt -> BoolElt
IsIntegral(I) : RngOrdIdl -> BoolElt
True if and only if the fractional ideal I is integral.
IsPrime(I) : RngOrdIdl -> BoolElt, RngOrdIdl
True if and only if I is a prime ideal, and false otherwise. If I is not prime, the function also returns a proper divisor (ideal).

Currently this function becomes very slow for ideals with large norm.

IsPrincipal(I) : RngOrdIdl -> BoolElt, FldNumElt
Returns true if the fractional ideal I of the order O is a principal ideal, false otherwise. If I is principal, a generator (as an element of the field of fractions of O) is also returned.

Note that this function may take a very long time to return. This is partly due to the fact that IsPrincipal needs knowledge about units, and hence the calculation of the unit group will be triggered if necessary.

IsZero(I) : RngOrdIdl -> BoolElt
True if I is the zero ideal, false otherwise.

Example FldNum_IdealFactorization (H28E14)

Using the fact that IsPrime returns a proper divisor if its argument is not prime, we can write an ideal factorization algorithm as follows.

> function IdealFactorization(I)
>    primes := [Parent(I)|];
>    expts  := [Integers()|];
>    facts  := [I];
>    while not IsEmpty(facts) do
>       term := facts[1];
>       Remove( ~facts, 1 );
>       flag, divisor := IsPrime( term );
>       if flag then
>          pos := Index( primes, term );
>          if pos eq 0 then
>             Append( ~primes, term );
>             Append( ~expts, 1 );
>          else
>             expts[pos] +:= 1;
>          end if;
>       else
>          Append( ~facts, divisor );
>          Append( ~facts, I/divisor );
>        end if;
>    end while;
>    return [ <primes[i], expts[i]> : i in [1..#primes] ];
> end function;
[Next] [Prev] [_____] [Left] [Up] [Index] [Root]