#### D.4.12.1 integralBasis

Procedure from library `integralbasis.lib` (see integralbasis_lib).

Usage:
  integralBasis(f, intVar); f irreducible polynomial in two variables, intVar integer indicating that the intVar-th variable of the ring is the integral element.
  The base ring must be a ring in two variables, and the polynomial f must be monic as polynomial in the intVar-th variable.
  Optional parameters in list choose (can be entered in any order):
  Algorithm:
  - "normal" -> the integral basis is computed using the general normalization algorithm.
  - "hensel" -> the integral bases is computed using an algorithm based on Puiseux expansions and Hensel lifting. (only available for polynomials with rational coefficients; default option in that case)
  Options for normal algorithm:
  - "global" -> computes the normalization of R / <f> and puts the results in integral basis shape.
  - "local" -> computes the normalization at each component of the singular locus of R/<f> and puts everything together. (Default option for normal algorithm.)
  Options for hensel algorithm:
  - "opti" -> The integral basis for the branches are merged using a combinatorial approach. (Default option.)
  - "noOpti" -> the integral basis for the different branches are merged using the Chinese remainder theorem. This is usually slower when the number of branches is large.
  - "local" -> computes the normalization at each component of the singular locus of R/<f> and puts everything together. (Default option for normal algorithm.)
  Other options:
  - "modular" -> uses modular algorithms for computing Groebner bases, radicals and decompositions whenever possible. Can be used together with any of the other options. The ground field must have characteristic 0. (Default option for ground fields of characteristic 0.)
  - "nonModular" -> do not uses modular algorithms. (Default option for ground fields of positive charecteristic.)
  - "atOrigin" -> will compute the local contribution to the integral basis at the origin only (naturally, this contribution is only relevant if the curve defined by f has a singularity at the origin).
  - "isIrred" -> assumes that the input polynomial f is irreducible, and therefore will not check this. If this option is given but f is not irreducible, the output might be wrong.
  - list("inputJ", ideal inputJ) -> takes as initial test ideal the ideal inputJ. This option is only for use in other procedures. Using this option, the result might not be the integral basis. (When this option is given, the global option will be used.)
  - list("inputC", ideal inputC) -> takes as initial conductor the ideal inputC. This option is only for use in other procedures. Using this option, the result might not be the integral basis. (When this option is given, the global option will be used.)
  - "locBasis" -> when computing the integral basis at a prime or primary component, it computes a local basis, that is, a basis that is integral only over the ring localized at the component. This option is only valid when "atOrigin" is chosen or an initial test ideal or conductor is given.

Return:
  a list, say l, of size 2.
  l[1] is an ideal I and l[2] is a polynomial D such that the integral basis is b_0 = I[1] / D, b_1 = I[2] / D, ..., b_{n-1} = I[n] / D.
  That is, the integral closure of k[x] in the algebraic function field k(x,y) is
  k[x] b_0 + k[x] b_1 + ... + k[x] b_{n-1},
  where we assume that x is the transcendental variable, y is the integral element (indicated by intVar), f gives the integral equation and n is the degree of f as a polynomial in y.

Theory:
  We compute the integral basis of the integral closure of k[x] in k(x,y). When option "normal" is selected, the normalization of the affine ring k[x,y]/<f> is computed using procedure normal from normal.lib, which implements a general algorithm for normalization of rings by G. Greuel, S. Laplagne and F. Seelisch, and the k[x,y]-module generators are converted into a k[x]-basis.
  When option "Hensel" is selected, the algorithm by J. Boehm, W. Decker, S. Laplagne and G. Pfister is used.

Example:

    LIB "integralbasis.lib";
    printlevel = printlevel+1;
    ring s = 0,(x,y),dp;
    poly f = y5-y4x+4y2x2-x4;
    list l = integralBasis(f, 2);
    ==> Computing the integral basis...
    ==> DBG - optimize = 1
    ==> --Computing the associated primes of the singular locus...
    ==>   (Using non-modular algorithm.)
    ==> --Computing the integral basis at each component...
    ==> ----Computing the integral basis of component
    ==> 1
    ==> ----Component:
    ==> compo[1]=y
    ==> compo[2]=x
    ==> Integral basis computation finished.
    l;
    ==> [1]:
    ==>    _[1]=x3
    ==>    _[2]=21/524288x7-5/16384x6-1/128x5-1/2x4+x3y
    ==>    _[3]=-441/274877906944x10+777/4294967296x9-9/268435456x8-5/2048x6+1/25\
       6x5y-1/64x5+1/64x4y-1/4x4+x2y2
    ==>    _[4]=-441/274877906944x9y+777/4294967296x8y-9/268435456x7y-5/2048x5y+1\
       /256x4y2-1/64x4y+1/64x3y2-1/4x3y+xy3
    ==>    _[5]=567/2147483648x8y-21/134217728x7y2-63/67108864x8-51/67108864x7y+1\
       9/33554432x6y2-3/1048576x7-107/2097152x6y-5/1048576x5y2+21/524288x4y3+55/\
       131072x6-237/65536x5y+147/16384x4y2-69/16384x3y3+51/4096x5-21/512x4y+3/64\
       x3y2-3/128x2y3+3/32x4-3/8x3y+3/4x2y2-3/2xy3+y4-2x3+4x2y
    ==> [2]:
    ==>    x3
    // The integral basis of the integral closure of Q[x] in Q(x,y) consists
    // of the elements of l[1] divided by the polynomial l[2].
    printlevel = printlevel-1;

See also: normal.

User manual for Singular version 4.4.1, 2025, generated by texi2html.