Module Pari.Number_field

type t
type elt = (number_field, field) typ
val create : (rational, ring) typ Polynomial.t -> t

create p returns the number field Q(X)/(p) for a monic irreducible polynomial p over the field Q of the rationals.

val are_isomorphic : t -> t -> bool

are_isomorphic a b returns true if and only if number fields a and b are isomorphic.

# let q =
  Polynomial.create
    [|
      Integer.of_int 1;
      Integer.of_int (-111);
      Integer.of_int 6064;
      Integer.of_int (-189804);
    |];;
val q : Integer.t Polynomial.t = <abstr>
# let zero = Polynomial.create [| Integer.of_int 0 |];;
val zero : Integer.t Polynomial.t = <abstr>
# let qq = Polynomial.create [| q; q; zero; zero |];;
val qq : Integer.t Polynomial.t Polynomial.t = <abstr>
# Polynomial.to_string qq;;
- : string =
"(x^3 - 111*x^2 + 6064*x - 189804)*y^3 + (x^3 - 111*x^2 + 6064*x - 189804)*y^2"
# Polynomial.is_irreducible q;;
- : bool = true
# let qmin : Integer.t Polynomial.t = Polynomial.minimal q;;
val qmin : Integer.t Polynomial.t = <abstr>
# Polynomial.to_string qmin;;
- : string = "x^3 - x^2 - 60*x - 364"
# Number_field.(are_isomorphic (create q) (create qmin));;
- : bool = true
val sign : t -> Signed.Long.t * Signed.Long.t
val discriminant : t -> Integer.t
val z_basis : t -> (elt, [ `ROW ]) Vector.t
val elt : Rational.t array -> elt
val inj_ring : elt -> (number_field, ring) typ
val add : t -> elt -> elt -> elt
val mul : t -> elt -> elt -> elt
val equal : elt -> elt -> bool
val divrem : t -> elt -> elt -> elt * elt

divrem nf a b returns the pair (divisor, remainder) from the euclidean division of a by b.

# let gaussian_integers =
  (* Gaussian integers: the ring Z[i] (here we work in the field Q(i)) *)
  Number_field.create
  (Polynomial.create [| Integer.of_int 1; Integer.of_int 0; Integer.of_int 1 |]);;
val gaussian_integers : Number_field.t = <abstr>
# let a = Number_field.elt [| Integer.(inj_rat (of_int 6)); Integer.(inj_rat (of_int 8)) |];;
val a : Number_field.elt = <abstr>
# let b = Number_field.elt [| Integer.(inj_rat (of_int 1)); Integer.(inj_rat (of_int 5)) |];;
val b : Number_field.elt = <abstr>
# let q, r = (* Euclidean division of 6 + 8i by 1 + 5i. *)
  Number_field.divrem gaussian_integers a b;;
val q : Number_field.elt = <abstr>
val r : Number_field.elt = <abstr>
# Number_field.(equal a (add gaussian_integers (mul gaussian_integers b q) r));;
- : bool = true
val ideal_norm : t -> elt -> Integer.t
val splitting : [< `F of t | `P of Integer.t Polynomial.t ] -> Integer.t Polynomial.t

splitting (nf|p) given the number field nf = Q(x)/(p) or polynomial p, returns the polynomial over Q for the splitting field of p, that is the smallest field over which p is totally split.

module Infix : sig ... end