Changeset 7b3971 in git


Ignore:
Timestamp:
Feb 5, 2001, 1:01:39 PM (23 years ago)
Author:
Christoph Lossen <lossen@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
7658571fa599a7581bd2feaa67021a15b67187a4
Parents:
d2087041ae4c66e9858042b1fd1cdc41851a03d4
Message:
* lossen:  help strings edited


git-svn-id: file:///usr/local/Singular/svn/trunk@5184 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular/LIB
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/equising.lib

    rd208704 r7b3971  
    1 version="$Id: equising.lib,v 1.6 2001-01-31 15:36:02 lossen Exp $";
     1version="$Id: equising.lib,v 1.7 2001-02-05 12:01:37 lossen Exp $";
    22category="Singularities";
    33info="
     
    77PROCEDURES:
    88 esStratum(F[,m]);   computes the equisingularity stratum of a deformation
    9  isEquising(F[,m]);  tests, whether a given deformation is equisingular
     9 isEquising(F[,m]);  tests if a given deformation is equisingular
    1010";
    1111
     
    752752
    753753proc esStratum (poly p_F, list #)
    754 "USAGE:   esStratum(F[,m]); F a polynomial, m an integer
     754"USAGE:   esStratum(F[,m]); F poly, m int
    755755ASSUME:  F defines a deformation of an irreducible bivariate polynomial f
    756          and that char(basering) does not divide mult(f).
     756         and the characteristic of the basering does not divide mult(f). @*
    757757         If nv is the number of variables of the basering, then the first nv-2
    758          ringvariables are the deformation parameters.
     758         variables are the deformation parameters. @*
    759759         If the basering is a qring, ideal(basering) must only depend
    760760         on the deformation parameters.
    761 RETURN:  A list l of an ideal and an integer, where
    762          l[1] is the ideal in the deformation parameters, defining the
    763          equisingularity stratum of F,
    764          l[2] = 1 if some error has occured, l[2] = 0 otherwise.
    765          If m is given, the computation stops after m steps of the iteration.
    766 NOTE:    printlevel > 0 displays comments and pauses after intermediate
    767          computations (default: printlevel=0)
    768          This proc uses 'execute' or calls a procedure using 'execute'.
     761RETURN:  list l of an ideal and an integer, where
     762@format
     763  l[1] is the ideal in the deformation parameters, defining the ES-stratum of F,
     764  l[2]=1 if some error has occured,  l[2]=0 otherwise.
     765@end format
     766NOTE:    If m is given, the computation stops after m steps of the iteration. @*
     767         printlevel > 0 displays comments and pauses after intermediate
     768         computations (default: printlevel=0) @*
     769         This procedure uses @code{execute} or calls a procedure using
     770         @code{execute}.
    769771EXAMPLE: example esStratum; shows an example
    770772"
     
    847849   "EXAMPLE:"; echo=2;
    848850   ring r = 11,(a,b,c,d,e,f,g,x,y),ds;
    849    poly F =
    850    xa+yb+x2+2xy+y2c+y^2+y3d+y4e+y5f+y6g+x^7;
     851   poly F = (x2+2xy+y2+x5)+ax+by+cx2+dxy+ey2+fx3+gx4;
    851852   esStratum(F);
    852853   esStratum(F,2);
    853    ideal I  = f-fa,e+b;
     854   ideal I = f-fa,e+b;
    854855   qring q = std(I);
    855856   poly F = imap(r,F);
     
    11591160
    11601161proc isEquising (poly p_F, list #)
    1161 "USAGE:   isEquising(F[,m]); F a polynomial, m an integer
    1162 ASSUME:  F defines a deformation of an irreducible bivariate polynomial f
    1163          and that char(basering) does not divide mult(f).
     1162"USAGE:   isEquising(F[,m]); F poly, m int
     1163ASSUME:   F defines a deformation of an irreducible bivariate polynomial f
     1164         and the characteristic of the basering does not divide mult(f). @*
    11641165         If nv is the number of variables of the basering, then the first nv-2
    1165          ringvariables are the deformation parameters.
     1166         variables are the deformation parameters. @*
    11661167         If the basering is a qring, ideal(basering) must only depend
    11671168         on the deformation parameters.
    1168 RETURN:  A list l of two integers, where
    1169          l[1] = 1 if F is an equisingular deformation,l[1] = 0 otherwise.
    1170          l[2] = 1 if some error has occured, l[2] = 0 otherwise.
    1171          If m is given, the computation stops after m steps of the iteration.
    1172 NOTE:    This proc uses 'execute' or calls a procedure using 'execute'.
     1169RETURN:  list l of two integers, where
     1170@format       
     1171   l[1]=1 if F is an equisingular deformation,  l[1]=0 otherwise.
     1172   l[2]=1 if some error has occured,  l[2]=0 otherwise.
     1173@end format
     1174NOTE:    If m is given, the computation stops after m steps of the iteration. @*
     1175         This procedure uses @code{execute} or calls a procedure using
     1176         @code{execute}.
    11731177EXAMPLE: example isEquising; shows an example
    11741178"
     
    12421246{
    12431247   "EXAMPLE:"; echo=2;
    1244    ring r = 11,(T,x,y),ds;
    1245    poly F = (x+y)^2+y^3*T+x^7;
     1248   ring r = 11,(a,b,x,y),ds;
     1249   poly F = (x2+2xy+y2+x5)+ay3+bx5;
    12461250   isEquising(F);
    12471251   isEquising(F,1);
    1248    isEquising(F,2);
    1249    ideal I  = ideal(T);
     1252   ideal I = ideal(a);
    12501253   qring q = std(I);
    12511254   poly F = imap(r,F);
    1252    isEquising(F,2);
     1255   isEquising(F);
    12531256}
    12541257///////////////////////////////////////////////////////////////////////////////
  • Singular/LIB/hnoether.lib

    rd208704 r7b3971  
    33// This library is for Singular 1-3-7 or newer
    44
    5 version="$Id: hnoether.lib,v 1.27 2001-01-16 13:48:30 Singular Exp $";
    6 category="Singularities";
     5version="$Id: hnoether.lib,v 1.28 2001-02-05 12:01:39 lossen Exp $";
     6//category="Singularities";
    77info="
    88LIBRARY:  hnoether.lib   Hamburger-Noether (Puiseux) Development
     
    1010
    1111OVERVIEW:
    12  A library for computing the Hamburger-Noether resp. Puiseux development
    13  of a plane curve singularity following A. Campillo: Algebroid curves
    14  in positive characteristic, Lecture Notes in Math. 813, Springer (1980).
     12 A library for computing the Hamburger-Noether, resp. Puiseux, development
     13 of a plane curve singularity following [Campillo, A.: Algebroid curves
     14 in positive characteristic, Springer LNM 813 (1980)]. @*
    1515 The library contains also procedures for computing the (topological)
    1616 numerical invariants of plane curve singularities.
     
    5050proc further_hn_proc()
    5151"USAGE: further_hn_proc();
    52    The library `hnoether.lib' contains some more procedures which are not
    53    shown when typing @code{help hnoether.lib}. They may be useful for
    54    interactive use (e.g. if you want to do the calculation of a HNE
    55    \"by hand\" to see the intermediate results), and they can be enumerated by
    56    calling further_hn_proc. Use @code{help <procedure>;} for detailed
    57    information about each of them.
     52NOTE:  The library @code{hnoether.lib} contains some more procedures which
     53       are not shown when typing @code{help hnoether.lib;}. They may be useful
     54       for interactive use (e.g. if you want to do the calculation of an HN
     55       development \"by hand\" to see the intermediate results), and they
     56       can be enumerated by calling @code{further_hn_proc()}. @*
     57       Use @code{help <procedure>;} for detailed information about each of
     58       them.
    5859"
    5960{
    6061 "
    61  The following procedures are also part of the library `hnoether.lib':
     62 The following procedures are also part of `hnoether.lib':
    6263
    6364 newtonpoly(f);      Newton polygon of polynom f
    64  getnm(f);           intersection pts. of Newton polygon with the axes
     65 getnm(f);           intersection pts. of Newton polygon with axes
    6566 T_Transform(f,Q,N); returns f(y,xy^Q)/y^NQ (f: poly, Q,N: int)
    6667 T1_Transform(f,d,M); returns f(x,y+d*x^M)  (f: poly,d:number,M:int)
     
    7374 find_in_list(L,p);  find int p in list L
    7475 get_last_divisor(M,N); last divisor in Euclid's algorithm
    75  factorfirst(f,M,N); try to factor f in a trivial way without `factorize'
     76 factorfirst(f,M,N); try to factor f without `factorize'
    7677 factorlist(L);      factorize a list L of polynomials
    7778 referencepoly(D);   a polynomial f s.t. D is the Newton diagram of f";
     
    257258
    258259proc squarefree (poly f)
    259 "USAGE:  squarefree(f);  f a bivariate polynomial
    260 RETURN: a squarefree divisor of f.
    261         Normally the return value is a greatest squarefree divisor, but there
    262         is an exception: factors with a p-th root, p the ring characteristic,
    263         are lost.
     260"USAGE:  squarefree(f);  f poly
     261ASSUME:  f is a bivariate polynomial (in the first 2 ring variables).
     262RETURN:  poly, a squarefree divisor of f.
     263NOTE:    Usually, the return value is the greatest squarefree divisor, but
     264         there is one exception: factors with a p-th root, p the
     265         characteristic of the basering, are lost.
    264266SEE ALSO: allsquarefree
    265267EXAMPLE: example squarefree; shows some examples.
     
    342344{ "EXAMPLE:"; echo = 2;
    343345 ring exring=3,(x,y),dp;
    344  squarefree(x3+y);
    345  squarefree(x3);
    346  squarefree(x2);
    347  squarefree(xy+x);
    348  squarefree((x+y)^3*(x-y)^2); // (x+y)^3 is lost
     346 squarefree((x3+y)^2);
     347 squarefree((x+y)^3*(x-y)^2); // Warning: (x+y)^3 is lost
    349348 squarefree((x+y)^4*(x-y)^2); // result is (x+y)*(x-y)
    350349}
     
    352351
    353352proc allsquarefree (poly f, poly l)
    354 "USAGE : allsquarefree(f,l);  poly f,l
    355         l is the squarefree divisor of f you get by @code{l=squarefree(f);}
    356 RETURN: the squarefree divisor of f consisting of all irreducible factors of f
    357 NOTE  : This proc uses factorize to get the missing factors of f not in l and
    358         therefore may be slow.
     353"USAGE : allsquarefree(f,g);  f,g poly
     354ASSUME: g is the output of @code{squarefree(f)}.
     355RETURN: the greatest squarefree divisor of f.
     356NOTE  : This proc uses factorize to get the missing factors of f not in g and,
     357        therefore, may be slow.
    359358SEE ALSO: squarefree
    360359EXAMPLE: example allsquarefree;  shows an example
     
    405404  ring exring=7,(x,y),dp;
    406405  poly f=(x+y)^7*(x-y)^8;
    407   poly l=squarefree(f);
    408   l; // x-y found because 7 does not divide 8
    409   allsquarefree(f,l); // all factors (x+y)*(x-y) found
     406  poly g=squarefree(f);
     407  g;                      // factor x+y lost, since characteristic=7
     408  allsquarefree(f,g);    // all factors (x+y)*(x-y) found
    410409}
    411410///////////////////////////////////////////////////////////////////////////////
    412411
    413412proc is_irred (poly f)
    414 "USAGE:   is_irred(f); f a squarefree bivariate polynomial
    415 RETURN:  an integer:
    416  @*      is_irred(f) @math{= 1} if f is irreducible as a formal power series
    417          over the algebraic closure of its coefficient field (f defines an
    418          analytically irreducible curve at zero),
    419  @*      is_irred(f) @math{= 0} else.
    420 NOTE:    @math{f = 0} and units in the ring of formal power series are not
    421          considered irreducible.
     413"USAGE:   is_irred(f); f poly
     414ASSUME:  f is a squarefree bivariate polynomial (in the first 2 ring
     415         variables).
     416RETURN:  int (0 or 1): @*
     417         - @code{is_irred(f)=1} if f is irreducible as a formal power
     418         series over the algebraic closure of its coefficient field (f
     419         defines an analytically irreducible curve at zero), @*
     420         - @code{is_irred(f)=0} otherwise.
     421NOTE:    0 and units in the ring of formal power series are considered to be
     422         not irreducible.
    422423KEYWORDS: irreducible power series
    423424EXAMPLE: example is_irred;  shows an example
     
    465466
    466467proc develop
    467 "USAGE:   develop(f [,n]); f polynomial in two variables, n integer
    468 RETURN:  Hamburger-Noether development of f, in form of a list:
    469   @*     [1]: Hamburger-Noether matrix:
    470             Each row contains the coefficients of the corresponding line of the
    471             Hamburger-Noether expansion (HNE). The end of the line is marked in
    472             the matrix as the first ring variable (usually x).
    473   @*     [2]: intvec indicating the length of lines of the HNE
    474   @*     [3]: int:
    475            0  if the 1st ring variable was transversal (with respect to f),
    476   @*       1  if the variables were changed at the beginning of the
    477               computation,
    478            -1 if an error has occurred.
    479   @*     [4]: the transformed polynomial of f to make it possible to extend the
    480               Hamburger-Noether development a posteriori without having to do
    481               all the previous calculation once again (0 if not needed)
    482   @*     [5]: int:
    483            1  if the curve has exactly one branch (i.e. is irreducible),
    484   @*       0  else (i.e. the curve has more than one HNE or f is not valid).
    485 
    486 ASSUME:  f irreducible as a power series (for reducible f use
    487          @code{reddevelop})
     468"USAGE:   develop(f [,n]); f poly, n int
     469ASSUME:  f is a bivariate polynomial (in the first 2 ring variables) and
     470         irreducible as power series (for reducible f use @code{reddevelop}).
     471RETURN:  list @code{L} with:
     472@texinfo
     473@table @asis
     474@item @code{L[1]}; matrix:
     475         Each row contains the coefficients of the corresponding line of the
     476         Hamburger-Noether expansion (HNE). The end of the line is marked in
     477         the matrix by the first ring variable (usually x).
     478@item @code{L[2]}; intvec:
     479         indicating the length of lines of the HNE
     480@item @code{L[3]}; int:
     481         0  if the 1st ring variable was transversal (with respect to f), @*
     482         1  if the variables were changed at the beginning of the
     483            computation, @*
     484        -1  if an error has occurred.
     485@item @code{L[4]}; poly:
     486         the transformed polynomial of f to make it possible to extend the
     487         Hamburger-Noether development a posteriori without having to do
     488         all the previous calculation once again (0 if not needed)
     489@item @code{L[5]}; int:
     490         1  if the curve has exactly one branch (i.e., is irreducible), @*
     491         0  else (i.e., the curve has more than one HNE, or f is not valid).
     492@end table
     493@end texinfo
    488494DISPLAY: The (non zero) elements of the HNE (if not called by another proc).
    489 
    490 NOTE: If the optional parameter @math{n} is given, the HN-matrix will have
    491       at least @math{n} columns. Otherwise the number of columns will be chosen
    492       minimal s.t. the matrix contains all necessary information (i.e. all
    493       lines of the HNE but the last (which is in general infinite) have place).
    494       If @math{n} is negative, the algorithm is stopped as soon as possible,
    495       i.e. the information computed is enough for `@code{invariants}', but the
    496       HN-matrix may contain undetermined elements, which are marked with the
    497       2nd variable (of the basering).
    498       In any case, the optional parameter only affects the calculation of
    499       the LAST line of the HNE; @code{develop}(f) gives already all necessary
    500       information for the procedure `@code{invariants}'. A negative value of
    501       @math{n} will result in a very poor parametrization, but it can make
    502       `@code{develop}' faster; a positive value will improve the exactness of
    503       the parametrization.
    504 
    505       For time critical computations it is recommended to use
    506       \"@code{ring ...,(x,y),ls}\" as basering - it increases the algorithm's
    507       speed.
    508 
     495NOTE:    The optional parameter @code{n} affects only the computation of
     496         the LAST line of the HNE. If it is given, the HN-matrix @code{L[1]}
     497         will have at least @code{n} columns. @*
     498         Otherwise, the number of columns will be chosen minimal such that the
     499         matrix contains all necessary information (i.e., all lines of the HNE
     500         but the last (which is in general infinite) have place). @*
     501         If @code{n} is negative, the algorithm is stopped as soon as the
     502         computed information is sufficient for @code{invariants(L)}, but the
     503         HN-matrix @code{L[1]} may still contain undetermined elements, which
     504         are marked with the 2nd variable (of the basering). @*
     505         For time critical computations it is recommended to use
     506         @code{ring ...,(x,y),ls} as basering - it increases the algorithm's
     507         speed. @*
     508         If @code{printlevel>=0} comments are displayed (default is
     509         @code{printlevel=0}).
    509510SEE ALSO: reddevelop, extdevelop, displayHNE
    510511EXAMPLES: example develop; shows an example
     
    889890  // therefore the HNE is:
    890891  // z(-1)= 3*z(0)^7 + z(0)^7*z(1),
    891   // z(0) = z(1)*z(2),
    892   //        (note that there is 1 zero in the 2nd row before x)
    893   // z(1) = z(2)^3*z(3),    (there are 3 zeroes in the 3rd row)
     892  // z(0) = z(1)*z(2),       (there is 1 zero in the 2nd row before x)
     893  // z(1) = z(2)^3*z(3),     (there are 3 zeroes in the 3rd row)
    894894  // z(2) = z(3)*z(4),
    895895  // z(3) = -z(4)^2 + 0*z(4)^3 +...+ 0*z(4)^8 + ?*z(4)^9 + ...
    896   //   (the missing x in the matrix indicates that this line
    897   //    is not complete. It can only occur in the last line of the
    898   //    HNE, and normally does.)
     896  // (the missing x in the last line indicates that it is not complete.)
    899897  hne[2];
    900898  param(hne);
    901   // returns the parametrization
    902   // x(t)= -t^14+O(t^21),  y(t)= -3t^98+O(t^105)
     899  // parametrization:   x(t)= -t^14+O(t^21),  y(t)= -3t^98+O(t^105)
    903900  // (the term -t^109 in y may have a wrong coefficient)
    904901  displayHNE(hne);
     
    910907
    911908proc param
    912 "USAGE:  param(l [,x]) takes the output of develop(f)
    913         (list l (matrix m, intvec v, int s[,poly g,...]))
    914         and gives a parametrization for f; the first variable of the active
    915         ring is chosen as indefinite. If the ring contains more than
    916         two variables, the 3rd variable is chosen (remember that develop takes
    917         the first two variables and therefore the other vars should be unused).
    918  @*     x is an optional parameter of any type.
    919 RETURN: If only the list l is given:
    920         ideal of two polynomials: if the HNE was finite, f(param[1],param[2])
    921         will be  zero. If not, the real parametrization will be
    922         two power series; then param will return a truncation of these series.
    923 
    924         If the optional parameter x is given:
    925         list L with L[1]=param(l) (the ideal containing the parametrization)
    926         and L[2]=intvec with two entries indicating the highest degree unto
    927         which the coefficients of the monomials in L[1] are exact (a value of
    928         -1 is for infinity, i.e. the corresponding polynomial is exact).
     909"USAGE:  param(L [,x]); L list, x any type (optional)
     910ASSUME:  L is the output of @code{develop(f)}, or of
     911        @code{extdevelop(develop(f),n)}, or one entry of the output of
     912        @code{reddevelop(f)}.
     913RETURN: a parametrization for f in the following format: @*
     914        - if only the list L is given, the result is an ideal of two
     915        polynomials p[1],p[2]: if the HNE was finite then f(p[1],p[2])=0};
     916        if not, the \"real\" parametrization will be two power series and
     917        p[1],p[2] are truncations of these series.@*
     918        - if the optional parameter x is given, the result is a list l:
     919        l[1]=param(L) (ideal) and l[2]=intvec with two entries indicating
     920        the highest degree up to which the coefficients of the monomials in
     921        l[1] are exact (entry -1 means that the corresponding parametrization
     922        is exact).
     923NOTE:   If the basering has only 2 variables, the first variable is chosen
     924        as indefinite. Otherwise, the 3rd variable is chosen.
    929925SEE ALSO: develop, extdevelop
    930926KEYWORDS: parametrization
     
    10401036 poly f=x3+2xy2+y2;
    10411037 list hne=develop(f);
    1042  list hne_extended1=develop(f,6);
    1043  list hne_extended2=develop(f,10);
    1044             //   compare the different matrices ...
     1038 list hne_extended=extdevelop(hne,10);
     1039            //   compare the matrices ...
    10451040 print(hne[1]);
    1046  print(hne_extended1[1]);
    1047  print(hne_extended2[1]);
     1041 print(hne_extended[1]);
    10481042            // ... and the resulting parametrizations:
    10491043 param(hne);
    1050  param(hne_extended1);
    1051  param(hne_extended2);
    1052  param(hne_extended2,0);
     1044 param(hne_extended);
     1045 param(hne_extended,0);
    10531046}
    10541047///////////////////////////////////////////////////////////////////////////////
    10551048
    10561049proc invariants
    1057 "USAGE:   invariants(l) takes the output of develop(f)
    1058          (list l (matrix m, intvec v, int s[,poly g,...]))
    1059          and computes the following irreducible curve invariants:
    1060 RETURN:  a list, if l contains a valid HNE:
    1061       @format
    1062     - invariants(l)[1]: intvec         (characteristic exponents)
    1063     - invariants(l)[2]: intvec         (generators of the semigroup)
    1064     - invariants(l)[3],[4]: 2 x intvec (Puiseux pairs, 1st and 2nd components)
    1065     - invariants(l)[5]: int            (degree of the conductor)
    1066     - invariants(l)[6]: intvec         (sequence of multiplicities)
    1067       @end format
    1068          an empty list, if an error occurred in the procedure develop.
     1050"USAGE:   invariants(L); L list
     1051ASSUME:  L is the output of @code{develop(f)}, or of
     1052         @code{extdevelop(develop(f),n)}, or one entry of the output of
     1053         @code{reddevelop(f)}.
     1054RETURN:  list, if L contains a valid HNE:
     1055@format
     1056    invariants(L)[1]:  intvec    (characteristic exponents)
     1057    invariants(L)[2]:  intvec    (generators of the semigroup)
     1058    invariants(L)[3]:  intvec    (Puiseux pairs, 1st components)
     1059    invariants(L)[4]:  intvec    (Puiseux pairs, 2nd components)
     1060    invariants(L)[5]:  int          (degree of the conductor)
     1061    invariants(L)[6]:  intvec    (sequence of multiplicities)
     1062@end format
     1063         an empty list, if L contains no valid HNE.
    10691064SEE ALSO: develop, displayInvariants, multsequence, intersection
    10701065KEYWORDS: characteristic exponents; semigroup of values; Puiseux pairs;
     
    11571152
    11581153proc displayInvariants
    1159 "USAGE:   displayInvariants(l); takes the output both of
    1160          develop(f) and reddevelop(f)
    1161           ( list l (matrix m, intvec v, int s[,poly g,...])
    1162             or list of lists in the form l )
    1163 RETURN:  nothing
     1154"USAGE:  displayInvariants(L); L list
     1155ASSUME:  L is the output of @code{develop(f)}, or of
     1156         @code{extdevelop(develop(f),n)}, or (one entry of) the output of
     1157         @code{reddevelop(f)}.
     1158RETURN:  none
    11641159DISPLAY: invariants of the corresponding branch, resp. of all branches,
    11651160         in a better readable form.
     
    12441239
    12451240proc multiplicities
    1246 "USAGE:   multiplicities(l) takes the output of develop(f)
    1247          (list l (matrix m, intvec v, int s[,poly g,...]))
    1248 RETURN:  intvec of the different multiplicities that occur during the
    1249          successive blowing up of the curve corresponding to f
     1241"USAGE:   multiplicities(L); L list
     1242ASSUME:  L is the output of @code{develop(f)}, or of
     1243         @code{extdevelop(develop(f),n)}, or one entry of the output of
     1244         @code{reddevelop(f)}.
     1245RETURN:  intvec of the different multiplicities that occur when successively
     1246         blowing-up the curve singularity corresponding to f.
    12501247SEE ALSO: develop
    12511248EXAMPLE: example multiplicities;  shows an example
     
    12871284
    12881285proc puiseux2generators (intvec m, intvec n)
    1289 "USAGE:   puiseux2generators(m,n);
    1290          m,n intvecs with 1st resp. 2nd components of Puiseux pairs
    1291 RETURN:  intvec of the generators of the semigroup of values
     1286"USAGE:   puiseux2generators(m,n); m,n intvec
     1287ASSUME:  m, resp. n, represent the 1st, resp. 2nd, components of Puiseux pairs
     1288         (e.g., @code{m=invariants(L)[3]}, @code{n=invariants(L)[4]}).
     1289RETURN:  intvec of the generators of the semigroup of values.
    12921290SEE ALSO: invariants
    12931291EXAMPLE: example puiseux2generators;  shows an example
     
    13161314
    13171315proc intersection (list hn1, list hn2)
    1318 "USAGE:   intersection(hne1,hne2);
    1319          hne1,hne2: two lists representing a HNE (normally two entries out of
    1320          the output of reddevelop), i.e. list(matrix,intvec,int[,poly]).
    1321 RETURN:  The intersection multiplicity of the branches corresponding to
    1322          hne1 & hne2 (of type int).
     1316"USAGE:   intersection(hne1,hne2); hne1, hne2 lists
     1317ASSUME:  hne1, hne2 represent a HNE (i.e., are the output of
     1318        @code{develop(f)}, or of @code{extdevelop(develop(f),n)}, or
     1319        one entry of the output of @code{reddevelop(f)}).
     1320RETURN:  int, the intersection multiplicity of the branches corresponding to
     1321         hne1 and hne2.
    13231322SEE ALSO: reddevelop, displayInvariants
    13241323KEYWORDS: intersection multiplicity
     
    14211420  // ------ the example starts here -------
    14221421  "EXAMPLE:"; echo = 2;
     1422  int plevel=printlevel; printlevel=-1;
    14231423  ring r=0,(x,y),dp;
    14241424  list hne=reddevelop((x2-y3)*(x2+y3));
    14251425  intersection(hne[1],hne[2]);
    1426   kill HNEring,r;
    1427   echo = 0;
     1426  kill HNEring,r; 
     1427  printlevel=plevel; echo = 0;
    14281428  // --- restore HNEring if previously defined ---
    14291429  if (defined(rettering)) {
     
    14361436
    14371437proc multsequence
    1438 "USAGE:   multsequence(l);
    1439          l is the output of either develop(f) or reddevelop(f)
    1440 RETURN:  - if l=@code{develop}(f) or l=@code{reddevelop}(f)[i]:
    1441            intvec of the sequence of multiplicities of the curve
    1442            resp. of the i-th branch (the same as @code{invariants}(l)[6]; )
    1443 
    1444          - if l=@code{reddevelop}(f) : list of two integer matrices:
    1445   @* @code{multsequence}(l)[1][i,*] contains the multiplicities of the branches
    1446            at their infinitely near point of 0 in its (i-1) order
    1447            neighbourhood (i.e. i=1: multiplicity of the branches themselves,
    1448                  i=2: multiplicity of their 1st quadratic transformed etc.,
    1449        @*  or to say it in another way: @code{multsequence}(l)[1][*,j] is the
    1450                  sequence of multiplicities of the j-th branch).
    1451   @* @code{multsequence}(l)[2][i,*] contains the information which of these
    1452            infinitely near points coincide.
    1453 NOTE:  The order of elements of the list obtained from @code{reddevelop} must
    1454        not be changed (because then the coincident infinitely near points
     1438"USAGE:   multsequence(L); L list
     1439ASSUME:  L is the output of @code{develop(f)}, or of
     1440         @code{extdevelop(develop(f),n)}, or one entry of the output of
     1441         @code{reddevelop(f)}.
     1442RETURN:  intvec corresponding to the multiplicity sequence of (a branch)
     1443         of the curve (the same as @code{invariants(L)[6]}).
     1444ASSUME:  L is the output of @code{reddevelop(f)}.
     1445RETURN:  list of two integer matrices:
     1446@texinfo
     1447@table @asis
     1448@item  @code{multsequence(L)[1][i,*]}
     1449   contains the multiplicities of the branches at their infinitely near point
     1450   of 0 in its (i-1) order neighbourhood (i.e., i=1: multiplicity of the
     1451   branches themselves, i=2: multiplicity of their 1st quadratic transformed,
     1452   etc., @*
     1453   Hence, @code{multsequence(L)[1][*,j]} is the multiplicity sequence
     1454   of branch j.
     1455@item  @code{multsequence(L)[2][i,*]}:
     1456   contains the information which of these infinitely near points coincide.
     1457@end table
     1458@end texinfo
     1459NOTE:  The order of elements of the list obtained from @code{reddevelop(f)}
     1460       must not be changed (because then the coincident infinitely near points
    14551461       couldn't be grouped together, cf. meaning of 2nd intmat in example).
    1456        Hence it is not wise to compute the HNE of several polynomials
    1457        separately, put them into a list l and call @code{multsequence}(l).
    1458 
     1462       Hence, it is not wise to compute the HNE of several polynomials
     1463       separately, put them into a list L and call @code{multsequence(L)}. @*
    14591464       Use @code{displayMultsequence} to produce a better readable output for
    14601465       reducible curves on the screen.
     
    15371542  }
    15381543  // ------ the example starts here -------
    1539   "EXAMPLE:"; echo = 2;
     1544  "EXAMPLE:"; echo = 2;   
     1545  int plevel=printlevel; printlevel=-1;
    15401546  ring r=0,(x,y),dp;
    1541   list hne=reddevelop((x6-y10)*(x+y2-y3)*(x+y2+y3));
    1542 
     1547  list hne=reddevelop((x6-y10)*(x+y2-y3)*(x+y2+y3));   // 4 branches
    15431548  multsequence(hne[1]),"  |  ",multsequence(hne[2]),"  |  ",
    15441549  multsequence(hne[3]),"  |  ",multsequence(hne[4]);
     
    15471552  displayMultsequence(hne);
    15481553  kill HNEring,r;
     1554  printlevel=plevel;
    15491555  echo = 0;
    15501556  // --- restore HNEring if previously defined ---
     
    15581564
    15591565proc displayMultsequence
    1560 "USAGE:   displayMultsequence(l);
    1561          l is the output of either develop(f) or reddevelop(f)
     1566"USAGE:   displayMultsequence(L);
     1567ASSUME:  L is the output of @code{develop(f)}, or of
     1568         @code{extdevelop(develop(f),n)}, or (one entry of) the output of
     1569         @code{reddevelop(f)}.
    15621570RETURN:  nothing
    15631571DISPLAY: the sequence of multiplicities:
    1564        if l=develop(f) or l=reddevelop(f)[i] : just the sequence a,b,c,...,1
    1565  @*    if l=reddevelop(f) : a sequence of the following form:
    1566 
    1567  @*    @math{[(a_1,....,b_1,....,c_1)]},
    1568  @*    @math{[(a_2,...),...,(...,c_2)]},
    1569  @*    @math{   ...................}
    1570  @*    @math{[(a_n),(b_n),.....,(c_n)]}
    1571 
    1572  @*    with @math{a_1,...,a_n} the sequence of multiplicities of the 1st branch
    1573  @*    [...] the multiplicities of the j-th transformed of all branches
    1574  @*    (...) the multiplicities of those branches meeting in the same
    1575              infinitely near point.
    1576 NOTE:    The same restrictions for l as in `@code{multsequence}' apply.
     1572@format
     1573 -  if @code{L=develop(f)} or @code{L=reddevelop(f)[i]}:
     1574                      @code{a , b , c , ....... , 1} 
     1575 - if @code{L=reddevelop(f)}:
     1576                      @code{[(a_1, .... , b_1 , .... , c_1)],}
     1577                      @code{[(a_2, ... ), ... , (... , c_2)],}
     1578                      @code{ ........................................ ,}
     1579                      @code{[(a_n),(b_n), ....., (c_n)]}
     1580     with:
     1581       @code{a_1 , ... , a_n} the sequence of multiplicities of the 1st branch,
     1582       @code{[...]} the multiplicities of the j-th transformed of all branches,
     1583       @code{(...)} indicating branches meeting in an infinitely near point.
     1584@end format
     1585NOTE:    The same restrictions for L as in @code{multsequence} apply.
    15771586SEE ALSO: multsequence, develop, reddevelop, separateHNE
    15781587EXAMPLE: example displayMultsequence;  shows an example
     
    16221631  // ------ the example starts here -------
    16231632  "EXAMPLE:"; echo = 2;
     1633  int plevel=printlevel; printlevel=-1;
    16241634  ring r=0,(x,y),dp;
    16251635  list hne=reddevelop((x6-y10)*(x+y2-y3)*(x+y2+y3));
    1626 
    16271636  displayMultsequence(hne[1]);
    16281637  displayMultsequence(hne);
    16291638  kill HNEring,r;
     1639  printlevel=plevel;
    16301640  echo = 0;
    16311641  // --- restore HNEring if previously defined ---
     
    16391649
    16401650proc separateHNE (list hn1,list hn2)
    1641 "USAGE:    separateHNE(hne1,hne2);  list hne1,hne2: output of develop
    1642 RETURN:   number of quadratic transformations needed to separate both curves
     1651"USAGE:    separateHNE(hne1,hne2);  hne1, hne2 lists
     1652ASSUME:   hne1, hne2 are HNEs (=output of
     1653          @code{develop(f)}, @code{extdevelop(develop(f),n)}, or
     1654          one entry of the output of @code{reddevelop(f)}).
     1655RETURN:   number of quadratic transformations needed to separate both curves
     1656          (branches).
    16431657SEE ALSO: develop, reddevelop, multsequence, displayMultsequence
    16441658EXAMPLE:  example separateHNE;  shows an example
     
    17361750
    17371751proc displayHNE(list ldev,list #)
    1738 "USAGE:   displayHNE(ldev,[,n]); ldev=list (the output of develop(f) or
    1739           reddevelop(f)), n=int
     1752"USAGE:   displayHNE(L[,n]); L list, n int
     1753ASSUME:  L has the format of the output of @code{develop(f)}, resp. of
     1754         @code{reddevelop(f)}.
    17401755RETURN:  - if only one argument is given, no return value, but
    17411756         display an ideal HNE of the following form:
     
    17471762     HNE[r+1]=           []*z(r)^2+[]*z(r)^3+......
    17481763     @end example
    1749      where x,y are the indeterminates of the basering. The values of @code{[]}
    1750      are the coefficients of the Hamburger-Noether matrix, the values of
    1751      @code{<>} are represented in the HN-matrix as `x'.
    1752      @*  The 1st line (@code{HNE[1]}) means that
    1753      @math{y=}@code{[]}@math{*z(0)^1+...},
    1754        the 2nd line (@code{HNE[2]}) means that
    1755      @math{x=}@code{[]}@math{*z(1)^2+...},
    1756      so you can see which indeterminate corresponds to which line
    1757      (it's also possible that x corresponds to the 1st line and y to the 2nd).
    1758      @*  - if a second argument is given, create and export a new ring with
    1759          name `displayring' containing an ideal `HNE' as described above.
    1760 
    1761      If ldev contains the output of @code{reddevelop}(f), @code{displayHNE}
    1762      shows the HNE's of all branches of f in the form described above.
    1763      The optional parameter is then ignored.
    1764 
     1764     where @code{x},@code{y} are the first 2 variables of the basering.
     1765     The values of @code{[]} are the coefficients of the Hamburger-Noether
     1766     matrix, the values of @code{<>} are represented by @code{x} in the
     1767     HN-matrix.@* 
     1768     - if a second argument is given, create and export a new ring with
     1769     name @code{displayring} containing an ideal @code{HNE} as described
     1770     above.@*
     1771     - if L corresponds to the output of @code{reddevelop(f)},
     1772     @code{displayHNE(L[,n])} shows the HNE's of all branches of f in the form
     1773     described above. The optional parameter is then ignored.
     1774NOTE:  The 1st line of the above ideal (i.e., @code{HNE[1]}) means that
     1775     @code{y=[]*z(0)^1+...}, the 2nd line (@code{HNE[2]}) means that
     1776     @code{x=[]*z(1)^2+...}, so you can see which indeterminate
     1777     corresponds to which line (it's also possible that @code{x} corresponds
     1778     to the 1st line and @code{y} to the 2nd).
     1779 
    17651780SEE ALSO: develop, reddevelop
    17661781EXAMPLE: example displayHNE; shows an example
     
    19992014
    20002015proc extdevelop (list l, int Exaktheit)
    2001 "USAGE:   extdevelop(l,n);
    2002          list l (matrix m, intvec v, int s, poly g[,int b]), int n
    2003  @*      takes the output l of develop(f) ( or extdevelop(L,N),
    2004          or one entry of the output of reddevelop(f))  and
    2005 RETURN:  an extension of the Hamburger-Noether development of f in the same
    2006          form as l (i.e. list(matrix, intvec, int, poly) ).
    2007          The new HN-matrix will have at least n columns
    2008          (if the HNE isn't finite).
    2009          Thus if f is irreducible, @code{extdevelop}(@code{develop}(f),n);
    2010          (in most cases) will produce the same result as @code{develop}(f,n).
    2011          Type `help develop;'  for more details.
    2012 NOTE:    If the matrix m of l has N columns, the exactness of
    2013          @code{param}(@code{extdevelop}(l,n))  will be increased by at least
    2014          (n-N) more significant monomials compared with @code{param}(l).
     2016"USAGE:   extdevelop(L,N); list L, int N
     2017ASSUME:  L is the output of @code{develop(f)}, or of @code{extdevelop(l,n)},
     2018         or one entry of the output of @code{reddevelop(f)}.
     2019RETURN:  an extension of the Hamburger-Noether development of f as a list
     2020         in the same format as L has (up to the last entry in the output
     2021         of @code{develop(f)}).@*
     2022         Type @code{help develop;}, resp. @code{help reddevelop;} for more
     2023         details.
     2024NOTE:    The new HN-matrix will have at least N columns (if the HNE is not
     2025         finite). In particular, if f is irreducible then (in most cases)
     2026         @code{extdevelop(develop(f),N)} will produce the same result as
     2027         @code{develop(f,N)}.@*
     2028         If the matrix M of L has n columns then, compared with
     2029         @code{param(L)}, @code{param(extdevelop(L,N))} will increase the
     2030         exactness by at least (N-n) more significant monomials.
    20152031SEE ALSO: develop, reddevelop, param
    20162032EXAMPLE: example extdevelop;  shows an example
     
    21452161  }
    21462162  // ------ the example starts here -------
    2147   "EXAMPLE:"; echo = 2;
     2163  "EXAMPLE:"; echo = 2; 
    21482164  ring exring=0,(x,y),dp;
    21492165  list hne=reddevelop(x14-3y2x11-y3x10-y2x9+3y4x8+y5x7+3y4x6+x5*(-y6+y5)
    21502166                      -3y6x3-y7x2+y8);
    2151   print(hne[1][1]); // finite HNE
     2167  print(hne[1][1]);    // HNE of 1st branch is finite 
    21522168  print(extdevelop(hne[1],5)[1]);
    2153   // ------------------------------------------
    2154   print(hne[2][1]); // HNE that can be extended
     2169  print(hne[2][1]);    // HNE of 2nd branch can be extended
    21552170  list ehne=extdevelop(hne[2],5);
    2156   print(ehne[1]); // new HN-matrix has 5 columns
     2171  print(ehne[1]);      // new HN-matrix has 5 columns
    21572172  param(hne[2]);
    21582173  param(ehne);
     
    21692184
    21702185proc stripHNE (list l)
    2171 "USAGE:   stripHNE(l);    takes the output both of develop(f) and reddevelop(f)
    2172  @*        ( list l (matrix m, intvec v, int s[,poly g,...])
    2173              or list of lists in the form l )
    2174 RETURN:  a list in the same format as l, but all polynomials g are set to zero
     2186"USAGE:   stripHNE(L);  L list
     2187ASSUME:  L is the output of @code{develop(f)}, or of
     2188         @code{extdevelop(develop(f),n)}, or (one entry of) the output of
     2189         @code{reddevelop(f)}.
     2190RETURN:  list in the same format as L, but all polynomials L[4], resp.
     2191         L[i][4], are set to zero.
    21752192NOTE:    The purpose of this procedure is to remove huge amounts of data
    21762193         no longer needed. It is useful, if one or more of the polynomials
    2177          in l consumes much memory. It is still possible to compute invariants,
     2194         in L consume much memory. It is still possible to compute invariants,
    21782195         parametrizations etc. with the stripped HNE(s), but it is not possible
    2179          to use extdevelop with them.
     2196         to use @code{extdevelop} with them.
    21802197SEE ALSO: develop, reddevelop, extdevelop
    21812198EXAMPLE: example stripHNE;  shows an example
     
    21942211}
    21952212example
    2196 { "EXAMPLE:"; echo = 2;
     2213
     2214  "EXAMPLE:"; echo = 2;
     2215  int plevel=printlevel; printlevel=-1;
    21972216  ring r=0,(x,y),dp;
    21982217  list hne=develop(x2+y3+y4);
    21992218  hne;
    22002219  stripHNE(hne);
     2220  printlevel=plevel; echo = 0;
    22012221}
    22022222///////////////////////////////////////////////////////////////////////////////
     
    22882308proc HNdevelop (poly f)
    22892309"USAGE:   HNdevelop(f); f poly
    2290 RETURN:  Hamburger-Noether development of f:
    2291          A list of lists in the form of develop(f)
    2292          (matrix,intvec,int,poly -- the last int indicating irreducibility is
    2293          omitted); each entry contains the data for one of the branches of f.
    2294          For more details type `help develop;'
    2295 CREATE:  a ring with name `HNEring', variables `x,y' and ordering `ls' over
    2296          a field extension of the current basering's ground field.
    2297          As the Hamburger-Noether development normally does not exist
     2310ASSUME:  f is a bivariate polynomial (in the first 2 ring variables)
     2311CREATE:  ring with name @code{HNEring}, variables @code{x,y} and ordering
     2312         @code{ls} over a field extension of the current basering's ground
     2313         field. @*
     2314         Since the Hamburger-Noether development usually does not exist
    22982315         in the originally given basering, @code{HNdevelop} always defines
    2299          HNEring and changes to it. The field extension is chosen minimal.
     2316         @code{HNEring} and CHANGES to it. The field extension is chosen
     2317         minimally.
     2318RETURN:  list @code{L} of lists @code{L[i]} (corresponding to the output of
     2319         @code{develop(f[i])}, f[i] a branch of f, but the last entry being
     2320         omitted).
     2321@texinfo
     2322@table @asis
     2323@item @code{L[i][1]}; matrix:
     2324         Each row contains the coefficients of the corresponding line of the
     2325         Hamburger-Noether expansion (HNE) for f[i]. The end of the line is
     2326         marked in the matrix by the first ring variable (usually x).
     2327@item @code{L[i][2]}; intvec:
     2328         indicating the length of lines of the HNE
     2329@item @code{L[i][3]}; int:
     2330         0  if the 1st ring variable was transversal (with respect to f[i]), @*
     2331         1  if the variables were changed at the beginning of the
     2332            computation, @*
     2333        -1  if an error has occurred.
     2334@item @code{L[i][4]}; poly:
     2335         the transformed polynomial of f[i] to make it possible to extend the
     2336         Hamburger-Noether development a posteriori without having to do
     2337         all the previous calculation once again (0 if not needed)
     2338@end table
     2339@end texinfo
    23002340NOTE:    @code{HNdevelop} decides which procedure (@code{develop} or
    2301          @code{reddevelop}) applies best to the given problem and calls it.
    2302 SEE ALSO: develop, reddevelop, extdevelop
     2341         @code{reddevelop}) applies best to the given problem and calls it. @*
     2342         If f is known to be irreducible as a power series, @code{develop(f)}
     2343         should be chosen instead to avoid the change of basering. @*
     2344         If @code{printlevel>=0} comments are displayed (default is
     2345         @code{printlevel=0}). 
     2346SEE ALSO: develop, reddevelop, extdevelop, essdevelop, param, displayHNE
    23032347EXAMPLE: example HNdevelop;  shows an example
    23042348"
     
    23672411  list hne=HNdevelop(x4-y6);
    23682412  nameof(basering);
    2369   size(hne);           // i.e. x4-y6 has two branches
     2413  size(hne);           // number of branches
    23702414  print(hne[1][1]);    // HN-matrix of 1st branch
    2371   param(hne[1]);
    2372   param(hne[2]);
    2373   displayInvariants(hne);
     2415  param(hne[1]);       // parametrization of 1st branch
     2416  param(hne[2]);       // parametrization of 2nd branch
    23742417  kill HNEring,r;
    23752418  echo = 0;
     
    23852428proc reddevelop (poly f)
    23862429"USAGE:   reddevelop(f); f poly
    2387 RETURN:  Hamburger-Noether development of f:
    2388          A list of lists in the form of develop(f)
    2389          (matrix,intvec,int,poly -- the last int indicating irreducibility is
    2390          omitted); each entry contains the data for one of the branches of f.
    2391          For more details type `help develop;'
    2392 CREATE:  a ring with name `HNEring', variables `x,y' and ordering `ls' over
    2393          a field extension of the current basering's ground field.
    2394          As the Hamburger-Noether development of a reducible curve normally
    2395          does not exist in the given basering, @code{reddevelop} always defines
    2396          HNEring and changes to it. The field extension is chosen minimal.
    2397 SEE ALSO: develop, extdevelop, displayHNE
     2430ASSUME:  f is a bivariate polynomial (in the first 2 ring variables)
     2431CREATE:  ring with name @code{HNEring}, variables @code{x,y} and ordering
     2432         @code{ls} over a field extension of the current basering's ground
     2433         field. @*
     2434         Since the Hamburger-Noether development of a reducible curve
     2435         singularity usually does not exist in the originally given basering,
     2436         @code{reddevelop} always defines @code{HNEring} and CHANGES to it.
     2437         The field extension is chosen minimally.
     2438RETURN:  list @code{L} of lists @code{L[i]} (corresponding to the output of
     2439         @code{develop(f[i])}, f[i] a branch of f, but the last entry being
     2440         omitted).
     2441@texinfo
     2442@table @asis
     2443@item @code{L[i][1]}; matrix:
     2444         Each row contains the coefficients of the corresponding line of the
     2445         Hamburger-Noether expansion (HNE) for f[i]. The end of the line is
     2446         marked in the matrix by the first ring variable (usually x).
     2447@item @code{L[i][2]}; intvec:
     2448         indicating the length of lines of the HNE
     2449@item @code{L[i][3]}; int:
     2450         0  if the 1st ring variable was transversal (with respect to f[i]), @*
     2451         1  if the variables were changed at the beginning of the
     2452            computation, @*
     2453        -1  if an error has occurred.
     2454@item @code{L[i][4]}; poly:
     2455         the transformed polynomial of f[i] to make it possible to extend the
     2456         Hamburger-Noether development a posteriori without having to do
     2457         all the previous calculation once again (0 if not needed)
     2458@end table
     2459@end texinfo
     2460NOTE:    If @code{printlevel>=0} comments are displayed (default is
     2461         @code{printlevel=0}).
     2462SEE ALSO: develop, extdevelop, essdevelop, param, displayHNE
    23982463EXAMPLE: example reddevelop;  shows an example
    23992464"
     
    24182483  // ------ the example starts here -------
    24192484  "EXAMPLE:"; echo = 2;
    2420   ring r=0,(x,y),dp;
    2421   list hne=reddevelop(x4-y6);
    2422   size(hne);           // i.e. x4-y6 has two branches
    2423   print(hne[1][1]);    // HN-matrix of 1st branch
    2424   param(hne[1]);
    2425   param(hne[2]);
    2426   displayInvariants(hne);
    2427   kill HNEring,r;
    2428   // ----------------- a more interesting example: --------------------
    24292485  ring r = 32003,(x,y),dp;
    24302486  poly f = x25+x24-4x23-1x22y+4x22+8x21y-2x21-12x20y-4x19y2+4x20+10x19y
     
    24332489          +126x10y4+4x8y6-126x8y5+84x6y6-36x4y7+9x2y8-1y9;
    24342490  list hne=reddevelop(f);
    2435   size(hne);
    2436   print(hne[1][1]);
    2437   print(hne[4][1]);
     2491  size(hne);            // number of branches
     2492  print(hne[1][1]);     // HN-matrix of 1st branch
     2493  print(hne[4][1]);     // HN-matrix of 4th branch
    24382494  // a ring change was necessary, a is a parameter
    24392495  HNEring;
     
    27692825proc essdevelop (poly f)
    27702826"USAGE:   essdevelop(f); f poly
    2771 RETURN:  Hamburger-Noether development of essential branches of f:
    2772          A list of lists in the form of develop(f)
    2773          (matrix,intvec,int,poly -- the last int indicating irreducibility is
    2774          omitted); each entry contains the data for one of the branches of f.
    2775          For more details type `help develop;'
    2776 CREATE:  a ring with name `HNEring', variables `x,y' and ordering `ls' over
    2777          a field extension of the current basering's ground field.
    2778          As the Hamburger-Noether development of a reducible curve normally
    2779          does not exist in the given basering, @code{essdevelop} always defines
    2780          HNEring and changes to it. The field extension is chosen minimal.
     2827ASSUME:  f is a bivariate polynomial (in the first 2 ring variables)
     2828CREATE:  ring with name @code{HNEring}, variables @code{x,y} and ordering
     2829         @code{ls} over a field extension of the current basering's ground
     2830         field. @*
     2831         Since the Hamburger-Noether development of a reducible curve
     2832         singularity usually does not exist in the originally given basering,
     2833         @code{essdevelop} always defines @code{HNEring} and CHANGES to it.
     2834         The field extension is chosen minimally.
     2835RETURN:  list @code{L} of lists @code{L[i]} (corresponding to the output of
     2836         @code{develop(f[i])}, f[i] an \"essential\" branch of f, but the last
     2837         entry being omitted).@*
     2838         For more details type @code{help reddevelop;}.
    27812839NOTE:    If the HNE needs a field extension, some of the branches will be
    27822840         conjugate. In this case @code{essdevelop} reduces the computation to
    2783          one representative for each group of conjugate branches.
     2841         one representative for each group of conjugate branches.@*
    27842842         Note that the degree of each branch is in general less than the degree
    2785          of the field extension in which all HNEs can be put.
    2786 
     2843         of the field extension in which all HNEs can be put.@*
    27872844         Use @code{reddevelop} or @code{HNdevelop} to compute a complete HNE,
    2788          i.e. a HNE for all branches.
     2845         i.e., a HNE for all branches.@*
     2846         If @code{printlevel>=0} comments are displayed (default is
     2847         @code{printlevel=0}).
    27892848SEE ALSO: develop, reddevelop, HNdevelop, extdevelop
    27902849EXAMPLE: example essdevelop;  shows an example
     
    28172876  // --------- compute all branches: ---------
    28182877  list hne=reddevelop(f);
    2819   displayHNE(hne);
     2878  displayHNE(hne[1]);   // HN-matrix of 1st branch
     2879  displayHNE(hne[4]);   // HN-matrix of 4th branch
    28202880  setring r;
     2881  kill HNEring;
    28212882  // --- compute only one of conjugate branches: ---
    28222883  list hne=essdevelop(f);
    28232884  displayHNE(hne);
    2824   // nr. 1 of essdevelop represents nr. 1 - 3 of reddevelop and
    2825   // nr. 2 of essdevelop represents nr. 4 + 5 of reddevelop
     2885  // no. 1 of essdevelop represents no. 1 - 3 of reddevelop and
     2886  // no. 2 of essdevelop represents no. 4 + 5 of reddevelop
     2887  kill HNEring,r;
    28262888  echo = 0;
    28272889  // --- restore HNEring if previously defined ---
  • Singular/LIB/primdec.lib

    rd208704 r7b3971  
    11///////////////////////////////////////////////////////////////////////////////
    2 version="$Id: primdec.lib,v 1.94 2001-01-16 13:48:38 Singular Exp $";
     2version="$Id: primdec.lib,v 1.95 2001-02-05 12:01:38 lossen Exp $";
    33category="Commutative Algebra";
    44info="
     
    1010OVERVIEW:
    1111    Algorithms for primary decomposition based on the ideas of
    12     Gianni,Trager,Zacharias was written by Gerhard Pfister.
    13     Algorithms for primary decomposition based on the ideas of
    14     Shimoyama/Yokoyama was written by Wolfram Decker and Hans Schoenemann.
    15  @* These procedures are implemented to be used in characteristic 0
    16    They also work in positive characteristic >> 0.
     12    Gianni, Trager and Zacharias (implementation by Gerhard Pfister),
     13    respectively based on the ideas of Shimoyama and Yokoyama (implementation
     14    by Wolfram Decker and Hans Schoenemann).
     15 @* The procedures are implemented to be used in characteristic 0.
     16 @* They also work in positive characteristic >> 0.
    1717 @* In small characteristic and for algebraic extensions, primdecGTZ and
    18     minAssGTZ may not terminate and primdecSY and minAssChar may not give
     18    minAssGTZ may not terminate, while primdecSY and minAssChar may not give
    1919    a complete decomposition.
    2020    Algorithms for the computation of the radical based on the ideas of
    21     Krick/Logar and Kemper was written by Gerhard Pfister.
     21    Krick, Logar and Kemper (implementation by Gerhard Pfister).
    2222
    2323PROCEDURES:
     
    815815         If ser!=(0) and ser is contained in j or if j is not zero-dimen-
    816816         sional then ideal(1),ideal(1) is returned
    817 NOTE:    Algorithm of Gianni, Traeger, Zacharias
     817NOTE:    Algorithm of Gianni/Trager/Zacharias
    818818EXAMPLE: example zero_decomp; shows an example
    819819"
     
    17521752proc equidim(ideal i,list #)
    17531753"USAGE:  equidim(i) or equidim(i,1) ; i ideal
    1754          equidim(i,1) uses the algorithm of Eisenbud, Hunecke and Vasconcelos
    1755 RETURN: list of equidimensional ideals a_1,...,a_s such that the following
    1756          holds:
    1757 @*       a_s is the equidimensional locus of i, a1,...a_s-1 are the lower
    1758          dimensional equidimensional loci  with (perhaps) modified embedded
    1759          components. I.e. an embedded component q (primary ideal) of i can be
    1760          replaced in the decomposition by a primary ideal q1 with the same
    1761          radical as q.
     1754RETURN: list of equidimensional ideals a[1],...,a[s] with:
     1755        - a[s] the equidimensional locus of i,
     1756        - a[1],...,a[s-1] the lower dimensional equidimensional loci. 
     1757NOTE:    An embedded component q (primary ideal) of i can be replaced in the
     1758         decomposition by a primary ideal q1 with the same radical as q. @*
     1759         @code{equidim(i,1)} uses the algorithm of Eisenbud/Huneke/Vasconcelos.
     1760
    17621761EXAMPLE:example equidim; shows an example
    17631762"
     
    18581857{ "EXAMPLE:"; echo = 2;
    18591858   ring  r = 32003,(x,y,z),dp;
    1860    ideal i=intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
     1859   ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
    18611860   equidim(i);
    18621861}
     
    19751974{ "EXAMPLE:"; echo = 2;
    19761975   ring  r = 32003,(x,y,z),dp;
    1977    ideal i=intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
     1976   ideal i = intersect(ideal(z),ideal(x,y),ideal(x2,z2),ideal(x5,y5,z5));
    19781977   equidimMax(i);
    19791978}
     
    19861985         (at even positions in the list)
    19871986         (resp. a list of the minimal associated primes)
    1988 NOTE:    Algorithm of Gianni, Traeger, Zacharias
     1987NOTE:    Algorithm of Gianni/Trager/Zacharias
    19891988EXAMPLE: example decomp; shows an example
    19901989"
     
    31503149"USAGE:   radicalEHV(i); i ideal.
    31513150RETURN:  ideal, the radical of i.
    3152 NOTE:    The algorithm of Eisenbud,Huneke,Vasconcelos is used.
     3151NOTE:    The algorithm of Eisenbud/Huneke/Vasconcelos is used.
    31533152         Works only in characteristic 0 or p large.
    31543153EXAMPLE: example radicalEHV; shows an example
     
    43814380"USAGE:   primdecGTZ(i); i ideal
    43824381RETURN:  a list pr of primary ideals and their associated primes:
    4383 @*       -  pr[i][1] the i-th primary component,
    4384 @*       -  pr[i][2] the i-th prime component.
    4385 NOTE:    Algorithm of Gianni, Traeger, Zacharias.
     4382@format   
     4383   pr[i][1]   the i-th primary component,
     4384   pr[i][2]   the i-th prime component.
     4385@end format
     4386NOTE:    Algorithm of Gianni/Trager/Zacharias.
    43864387         Designed for characteristic 0, works also in char k > 0, if it
    43874388         terminates (may result in an infinite loop in small characteristic!)
     
    44084409///////////////////////////////////////////////////////////////////////////////
    44094410
    4410 proc primdecSY(ideal i, list #))
     4411proc primdecSY(ideal i, list #)
    44114412"USAGE:   primdecSY(i); i ideal, c int
    4412 @*         if c=0, the given ordering of the variables is used.
    4413 @*         if c=1, minAssChar tries to use an optimal ordering,
    4414 @*         if c=2, minAssGTZ is used
    4415 @*         if c=3, minAssGTZ and facstd is used
    44164413RETURN:  a list pr of primary ideals and their associated primes:
    4417 @*         -  pr[i][1] the i-th primary component,
    4418 @*         -  pr[i][2] the i-th prime component.
    4419 NOTE:    Algorithm of Shimoyama-Yokoyama.
     4414@format   
     4415   pr[i][1]   the i-th primary component,
     4416   pr[i][2]   the i-th prime component.
     4417@end format
     4418NOTE:    Algorithm of Shimoyama/Yokoyama.
     4419@format
     4420   if c=0,  the given ordering of the variables is used,
     4421   if c=1,  minAssChar tries to use an optimal ordering,
     4422   if c=2,  minAssGTZ is used,
     4423   if c=3,  minAssGTZ and facstd are used.
     4424@end format
    44204425         Due to a bug in the factorization, the result may be not completely
    44214426         decomposed in small characteristic.
     
    44724477///////////////////////////////////////////////////////////////////////////////
    44734478proc minAssChar(ideal i, list #)
    4474 "USAGE:   minAssChar(i[,c]); i ideal.
    4475          If c=0, the given ordering of the variables is used.
     4479"USAGE:   minAssChar(i[,c]); i ideal, c int.
     4480RETURN:  list, the minimal associated prime ideals of i.
     4481NOTE:    If c=0, the given ordering of the variables is used. @*
    44764482         Otherwise, the system tries to find an optimal ordering,
    4477          which in some cases may considerably speed up the algorithm.
    4478 RETURN:  a list, the minimal associated prime ideals of i.
    4479 NOTE:    Due to a bug in the factorization, the result may be not completely
     4483         which in some cases may considerably speed up the algorithm. @*
     4484         Due to a bug in the factorization, the result may be not completely
    44804485         decomposed in small characteristic.
    44814486EXAMPLE: example minAssChar; shows an example
     
    45904595proc prepareAss(ideal i)
    45914596"USAGE:   prepareAss(i); i ideal
    4592 RETURN:  a list, the radicals of the maximal dimensional components of i.
    4593 NOTE:    Uses algorithm of Eisenbud, Huneke and Vasconcelos.
     4597RETURN:  list, the radicals of the maximal dimensional components of i.
     4598NOTE:    Uses algorithm of Eisenbud/Huneke/Vasconcelos.
    45944599EXAMPLE: example prepareAss; shows an example
    45954600"
     
    46734678
    46744679proc testPrimary(list pr, ideal k)
    4675 "USAGE:   testPrimary(pr,k); pr a list, result of primdecGTZ(k) or primdecSY(k)
    4676 RETURN:  int, 1 if intersection of the primary ideals in pr is k, 0 if not
     4680"USAGE:   testPrimary(pr,k); pr a list, k an ideal.
     4681ASSUME:  pr is the result of primdecGTZ(k) or primdecSY(k).
     4682RETURN:  int, 1 if the intersection of the ideals in pr is k, 0 if not
    46774683EXAMPLE: example testPrimary; shows an example
    46784684"
     
    47004706proc zerodec(ideal I)
    47014707"USAGE:   zerodec(I); I ideal
    4702 RETURN:  A list of primary ideals, the zero-dimensional decomposition of I
    4703 ASSUME:  I is zero-dimensional, the characterisitic of the ground field is 0
    4704 NOTE:    The algorithm (of C. Monico), works well only for small total number
    4705          of solutions (vdim(std(I)) should be < 100) and without parameters.
    4706          In practice, it works also in big characteristic p>0 but may fail
    4707          for small p.
    4708 @*         If printlevel > 0 (default = 0) additional information is displayed
     4708ASSUME:  I is zero-dimensional, the characteristic of the ground field is 0
     4709RETURN:  list of primary ideals, the zero-dimensional decomposition of I
     4710NOTE:    The algorithm (of Monico), works well only for a small total number
     4711         of solutions (@code{vdim(std(I))} should be < 100) and without
     4712         parameters. In practice, it works also in large characteristic p>0
     4713         but may fail for small p.
     4714@*       If printlevel > 0 (default = 0) additional information is displayed.
    47094715EXAMPLE: example zerodec; shows an example
    47104716"
  • Singular/LIB/primitiv.lib

    rd208704 r7b3971  
    33// This library is for Singular 1.2 or newer
    44
    5 version="$Id: primitiv.lib,v 1.14 2001-01-16 13:48:40 Singular Exp $";
     5version="$Id: primitiv.lib,v 1.15 2001-02-05 12:01:39 lossen Exp $";
    66category="Commutative Algebra";
    77info="
     
    1919
    2020proc primitive(ideal i)
    21 "USAGE:   primitive(i); i ideal of the following form:
    22           Let k be the ground field of your basering, a_1,...,a_n algebraic
    23           over k, m_1(x_1), m_2(x_1,x_2),...,m_n(x_1,...,x_n) polynomials over
    24           k such that  m_j(a_1,...,a_(j-1),x_j) is minimal polynomial for
    25           a_j over k(a_1,...,a_(j-1)) for all j=1,...,n.
    26           Then i has to be generated by m_1,...,m_n.
    27 RETURN:   ideal j in k[x_n] such that
    28           j[1] is minimal polynomial for a primitive element b of
    29           k(a_1,...,a_n)=k(b) over k
    30           j[2],...,j[n+1] polynomials in k[x_n] : j[i+1](b)=a_i for i=1,...,n
    31 NOTE:     the number of variables in the basering has to be exactly the number
    32           n of given algebraic elements (and minimal polynomials).
    33           If k has few elements it may happen that no linear combination
    34           of a_1,...,a_n is a primitive element. In this case `primitive'
    35           returns the zero ideal. If this occurs use primitive_extra instead.
     21"USAGE:   primitive(i); i ideal
     22ASSUME:   i is given by generators m[1],...,m[n] such that for j=1,...,n @*
     23          -  m[j] is a polynomial in k[x(1),...,x(j)] @*
     24          -  m[j](a[1],...,a[j-1],x(j)) is the minimal polynomial for a[j] over
     25             k(a[1],...,a[j-1]) @*
     26          (k the ground field of the current basering and x(1),...,x(n)
     27          the ring variables).
     28RETURN:   ideal j in k[x(n)] with
     29          - j[1] a minimal polynomial for a primitive element b of     
     30                 k(a[1],...,a[n]) over k,
     31          - j[2],...,j[n+1] polynomials in k[x(n)] such that j[i+1](b)=a[i]
     32                 for i=1,...,n.
     33NOTE:     the number of variables in the basering has to be exactly n,
     34          the number of given generators (i.e., minimal polynomials).@*
     35          If the ground field k has only a few elements it may happen that no
     36          linear combination of a[1],...,a[n] is a primitive element. In this
     37          case @code{primitive(i)} returns the zero ideal, and one should use
     38          @code{primitive_extra(i)} instead.
    3639SEE ALSO: primitive_extra
    3740KEYWORDS: primitive element
     
    122125 ring exring=0,(x,y),dp;
    123126 ideal i=x2+1,y2-x;                  // compute Q(i,i^(1/2))=:L
    124  ideal j=primitive(i);               // -> we have L=Q(a):
    125  "minimal polynomial of a:",j[1];    // => a=(-1)^(1/4)
    126  "polynomial for i:       ",j[2];    // => i=a^2
    127  "polynomial for i^(1/2): ",j[3];    // => i^(1/2)=a
    128  // ==> the 2nd element was already primitive!
     127 ideal j=primitive(i);
     128 j[1];                               // L=Q(a) with a=(-1)^(1/4)
     129 j[2];                               // i=a^2
     130 j[3];                               // i^(1/2)=a
     131 // the 2nd element was already primitive!
    129132 j=primitive(ideal(x2-2,y2-3));      // compute Q(sqrt(2),sqrt(3))
    130  "minimal polynomial:",j[1];
    131  "polynomial p s.t. p(a)=sqrt(2):",j[2];
    132  "polynomial r s.t. r(a)=sqrt(3):",j[3];
    133  // ==> no element was primitive -- the calculation of a is based
    134  //     on a random choice.
     133 j[1];
     134 j[2];
     135 j[3];
     136 // no element was primitive -- the calculation of primitive elements
     137 // is based on a random choice.
    135138}
    136139///////////////////////////////////////////////////////////////////////////////
    137140
    138141proc primitive_extra(ideal i)
    139 "USAGE:   primitive_extra(i);  ideal i=f,g;  with the following properties: @*
    140           Let k=Q or k=Z/pZ be the ground field of the basering, a,b algebraic
    141           over k, x the name of the first ring variable, y the name of the
    142           second, then:
    143           f is the minimal polynomial of a in k[x], g is a polynomial in
    144           k[x,y] s.t. g(a,y) is the minimal polynomial of b in k(a)[y]
     142"USAGE:   primitive_extra(i); i ideal
     143ASSUME:  The ground field of the basering is k=Q or k=Z/pZ and the ideal
     144         i is given by 2 generators f,g with the following properties:
     145@format
     146   f is the minimal polynomial of a in k[x],
     147   g is a polynomial in k[x,y] s.th. g(a,y) is the minpoly of b in k(a)[y].
     148@end format
     149          Here, x is the name of the first ring variable, y the name of the
     150          second.
    145151RETURN:  ideal j in k[y] such that
    146          j[1] is minimal polynomial over k for a primitive element c of
    147          k(a,b)=k(c)
    148          j[2] is a polynomial s.t. j[2](c)=a
    149 NOTE:    While `primitive' may fail for finite fields, this proc tries all
    150          elements of k(a,b) and hence finds by assurance a primitive element.
    151          In order to do this (try all elements) field extensions like Z/pZ(a)
    152          are not allowed for the ground field k.
    153          primitive_extra assumes that g is monic as polynomial in (k[x])[y]
     152@format
     153   j[1] is the minimal polynomial for a primitive element c of k(a,b) over k,
     154   j[2] is a polynomial s.th. j[2](c)=a.
     155@end format
     156NOTE:    While @code{primitive(i)} may fail for finite fields,
     157         @code{primitive_extra(i)} tries all elements of k(a,b) and, hence,
     158         always finds a primitive element. @*
     159         In order to do this (try all elements), field extensions like Z/pZ(a)
     160         are not allowed for the ground field k. @*
     161         @code{primitive_extra(i)} assumes that the second generator, g, is
     162         monic as polynomial in (k[x])[y].
    154163EXAMPLE: example primitive_extra;  shows an example
    155164"
     
    245254
    246255proc splitring
    247 "USAGE:   splitring(f,R[,L]);  f poly, univariate and irreducible(!) over the
    248          active basering; R string, L list of polys and/or ideals (optional)
    249 CREATE:  a ring with name R, in which f is reducible, and change to it.
    250          If the old ring has no parameter, the name 'a' is chosen for the
    251          parameter of R (if a is no variable; if it is, the proc takes 'b',
    252          etc.; if a,b,c,o are variables of the ring, produce an error message),
    253          otherwise the name of the parameter is kept and only the
    254          minimal polynomial is changed.
    255          The names of variables and orderings are not affected.
    256          It is also allowed to call splitring with R==\"\".
    257          Then the old basering will be REPLACED by the new ring
    258          (with the same name as the old ring).
     256"USAGE:   splitring(f,R[,L]); f poly, R string, L list of polys and/or ideals
     257         (optional)
     258ASSUME:  f is univariate and irreducible over the active basering. @*
     259         The active ring must allow an algebraic extension (e.g., it cannot
     260         be a transcendent ring extension of Q or Z/p).
     261CREATE:  a ring with name R, in which f is reducible, and CHANGE to it.
    259262RETURN:  list L mapped into the new ring R, if L is given; else nothing
    260 ASSUME:  The active ring must allow an algebraic extension
    261          (e.g. it cannot be a transcendent ring extension of Q or Z/p).
     263NOTE:    If the old ring has no parameter, the name @code{a} is chosen for the
     264         parameter of R (if @code{a} is no ring variable; if it is, @code{b} is
     265         chosen, etc.; if @code{a,b,c,o} are ring variables,
     266         @code{splitring(f,R[,L])} produces an error message), otherwise the
     267         name of the parameter is kept and only the minimal polynomial is
     268         changed. @*
     269         The names of the ring variables and the orderings are not affected. @*
     270         It is also allowed to call @code{splitring} with R=\"\".
     271         Then the old basering will be REPLACED by the new ring (with the
     272         same name as the old ring).
    262273KEYWORDS: algebraic field extension; extension of rings
    263274EXAMPLE: example splitring;  shows an example
     
    389400 ring r=0,(x,y),dp;
    390401 splitring(x2-2,"r1");   // change to Q(sqrt(2))
    391  splitring(x2-a,"r2",a); // change to Q(sqrt(2),sqrt(sqrt(2)))=Q(a)
    392                          // and return the transformed old parameter
    393  // the result is (a2) == (sqrt(sqrt(2)))^2
     402 // change to Q(sqrt(2),sqrt(sqrt(2)))=Q(a) and return the transformed
     403 // old parameter:
     404 splitring(x2-a,"r2",a);
     405 // the result is (a)^2 = (sqrt(sqrt(2)))^2
    394406 nameof(basering);
    395407 r2;
Note: See TracChangeset for help on using the changeset viewer.