Changeset 3c4dcc in git for Singular/LIB/hnoether.lib


Ignore:
Timestamp:
May 6, 2005, 4:39:20 PM (19 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
0d217d3f1cc4c0449bdb078c65fd1f43cd1a2b84
Parents:
e6fb5315eb32da00236163ce10f9bdafaaa0bd47
Message:
*hannes: DOS->UNIX and white space cleanup


git-svn-id: file:///usr/local/Singular/svn/trunk@8073 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/hnoether.lib

    re6fb531 r3c4dcc  
    1 -       version="$Id: hnoether.lib,v 1.47 2005-04-26 17:19:14 Singular Exp $";
     1version="$Id: hnoether.lib,v 1.48 2005-05-06 14:38:35 hannes Exp $";
    22category="Singularities";
    33info="
     
    77
    88OVERVIEW:
    9  A library for computing the Hamburger-Noether expansion (analogue of 
    10  Puiseux expansion over fields of arbitrary characteristic) of a reduced 
     9 A library for computing the Hamburger-Noether expansion (analogue of
     10 Puiseux expansion over fields of arbitrary characteristic) of a reduced
    1111 plane curve singularity following [Campillo, A.: Algebroid curves in
    1212 positive characteristic, Springer LNM 813 (1980)]. @*
     
    219219  f_neu=Tstar(f_neu);
    220220  refpoly=Tstar(refpoly);
    221   //--- dividiere f_neu so lange durch x & y, wie die Division aufgeht, 
    222   //    benutze ein Referenzpolynom mit gleichem Newtonpolynom wie f_neu zur 
     221  //--- dividiere f_neu so lange durch x & y, wie die Division aufgeht,
     222  //    benutze ein Referenzpolynom mit gleichem Newtonpolynom wie f_neu zur
    223223  //    Beschleunigung: ---
    224224  for (hilf=refpoly/xp; hilf*xp==refpoly; hilf=refpoly/xp) {refpoly=hilf; s++;}
     
    529529           );
    530530 }
    531  
     531
    532532 string namex=varstr(1); string namey=varstr(2);
    533533 list return_error=matrix(maxideal(1)[2]),intvec(0),int(-1),poly(0),int(0);
     
    807807      f = T1_Transform(f,delt,M/ e);
    808808      dbprint(printlevel-voice+2,"a("+string(zeile)+","+string(Q)+") = "
    809               +string(delt)); 
     809              +string(delt));
    810810      a(zeile)[Q]=delt;
    811811      if (defined(HNDebugOn)) {"transformed polynomial: ",f;}}
     
    815815 //--------------------------- Fall R > 0 : -----------------------------------
    816816  else {
    817     dbprint(printlevel-voice+2, "h("+string(zeile)+ ") ="+string(Q)); 
     817    dbprint(printlevel-voice+2, "h("+string(zeile)+ ") ="+string(Q));
    818818    hqs[zeile+1]=Q;                  // denn zeile beginnt mit dem Wert 0
    819819    a(zeile)[Q+1]=x;                 // Markierung des Zeilenendes der HNE
     
    830830 //--------------- schneidet das Newtonpolygon beide Achsen? ------------------
    831831  if (M==-1) {
    832      dbprint(printlevel-voice+2,"The HNE is finite!"); 
     832     dbprint(printlevel-voice+2,"The HNE is finite!");
    833833     a(zeile)[Q+1]=x;   // Markiere das Ende der Zeile
    834834     hqs[zeile+1]=Q;
     
    915915"USAGE:  param(L [,s]); L list, s any type (optional)
    916916ASSUME:  L is the output of @code{develop(f)}, or of
    917         @code{extdevelop(develop(f),n)}, or (one entry in) the list of HN 
     917        @code{extdevelop(develop(f),n)}, or (one entry in) the list of HN
    918918        data created by @code{hnexpansion(f[,\"ess\"])}.
    919 RETURN: If L are the HN data of an irreducible plane curve singularity f: a 
     919RETURN: If L are the HN data of an irreducible plane curve singularity f: a
    920920        parametrization for f in the following format: @*
    921921        - if only the list L is given, the result is an ideal of two
    922922        polynomials p[1],p[2]: if the HNE was finite then f(p[1],p[2])=0};
    923         if not, the true parametrization will be given by two power series, 
     923        if not, the true parametrization will be given by two power series,
    924924        and p[1],p[2] are truncations of these series.@*
    925925        - if the optional parameter x is given, the result is a list l:
     
    928928        l[1] are exact (entry -1 means that the corresponding parametrization
    929929        is exact).
    930         If L collects the HN data of a reducible plane curve singularity f, 
    931         the return value is a list of parametrizations in the respective 
    932         format. 
     930        If L collects the HN data of a reducible plane curve singularity f,
     931        the return value is a list of parametrizations in the respective
     932        format.
    933933NOTE:   If the basering has only 2 variables, the first variable is chosen
    934934        as indefinite. Otherwise, the 3rd variable is chosen.
     
    947947   for (int i=1; i<=size(L); i++) {
    948948     dbprint(printlevel-voice+4,"// Parametrization of branch number "
    949        +string(i)+" computed."); 
     949       +string(i)+" computed.");
    950950     printlevel=printlevel+1;
    951951     if (return_list==1) { Ergebnis[i]=param(L[i],1); }
     
    10261026         "// ** Warning: result is exact up to order "+string(fehlervor-1)+
    10271027         " in "+ string(var(1))+" and "+string(fehler-1)+" in " +
    1028          string(var(2))+" !"); 
     1028         string(var(2))+" !");
    10291029     }
    10301030     else {
     
    10431043         "// ** Warning: result is exact up to order "+string(fehler-1)+
    10441044         " in "+ string(var(1))+" and "+string(fehlervor-1)+" in " +
    1045          string(var(2))+" !"); 
     1045         string(var(2))+" !");
    10461046     }
    10471047     else {
     
    10801080"USAGE:   invariants(INPUT); INPUT list or poly
    10811081ASSUME:  @code{INPUT} is the output of @code{develop(f)}, or of
    1082          @code{extdevelop(develop(f),n)}, or one entry of the list of HN data 
     1082         @code{extdevelop(develop(f),n)}, or one entry of the list of HN data
    10831083         computed by @code{hnexpansion(f[,\"ess\"])}.
    10841084RETURN:  list @code{INV} of the following format:
     
    10911091    INV[6]:  intvec    (sequence of multiplicities)
    10921092@end format
    1093          If @code{INPUT} contains no valid HN expansion, the empty list is 
     1093         If @code{INPUT} contains no valid HN expansion, the empty list is
    10941094         returned.
    1095 ASSUME:  @code{INPUT} is a bivariate polynomial f, or the output of 
    1096          @code{hnexpansion(f)}, or the list of HN data computed by 
     1095ASSUME:  @code{INPUT} is a bivariate polynomial f, or the output of
     1096         @code{hnexpansion(f)}, or the list of HN data computed by
    10971097         @code{hnexpansion(f [,\"ess\"])}.
    1098 RETURN:  list @code{INV}, such that @code{INV[i]} coincides with the output of 
    1099          @code{invariants(develop(f[i]))}, where f[i] is the i-th branch of 
    1100          f, and the last entry of @code{INV} contains further invariants of 
     1098RETURN:  list @code{INV}, such that @code{INV[i]} coincides with the output of
     1099         @code{invariants(develop(f[i]))}, where f[i] is the i-th branch of
     1100         f, and the last entry of @code{INV} contains further invariants of
    11011101         f in the format:
    11021102@format
     
    11291129      else {
    11301130        return(invariants(L));
    1131       } 
     1131      }
    11321132   }
    11331133   if (typeof(#[1])=="ring") {
     
    11371137     setring altring;
    11381138     kill HNring;
    1139      return(Ergebnis); 
     1139     return(Ergebnis);
    11401140   }
    11411141   if (typeof(#[1])=="list") {
     
    12411241 {
    12421242   tester=tester-1;
    1243  } 
     1243 }
    12441244 if ((multseq[tester]!=1) and (multseq[tester]!=k-tester))
    12451245 {
     
    12471247   {
    12481248     multseq[i]=1;
    1249    }   
     1249   }
    12501250 }
    12511251 //--- Ende T.Keilen --- 06.05.02
     
    12791279proc displayInvariants
    12801280"USAGE:  displayInvariants(INPUT); INPUT list or poly
    1281 ASSUME:  @code{INPUT} is a bivariate polynomial, or the output of 
    1282          @code{develop(f)}, resp. of @code{extdevelop(develop(f),n)}, or (one 
    1283          entry of) the list of HN data computed by 
     1281ASSUME:  @code{INPUT} is a bivariate polynomial, or the output of
     1282         @code{develop(f)}, resp. of @code{extdevelop(develop(f),n)}, or (one
     1283         entry of) the list of HN data computed by
    12841284         @code{hnexpansion(f[,\"ess\"])}.
    12851285RETURN:  none
     
    13561356    "";
    13571357  }
    1358   if (size(#)>1) 
     1358  if (size(#)>1)
    13591359  {
    13601360    " -------------- contact numbers : -------------- ";"";
    13611361    Ausgabe="branch |   ";
    1362     for (j=size(#); j>1; j--) 
     1362    for (j=size(#); j>1; j--)
    13631363    {
    13641364      if (size(string(j))==1) { Ausgabe=Ausgabe+" "+string(j)+"    "; }
    13651365      else                    { Ausgabe=Ausgabe+string(j)+"    "; }
    1366     }   
     1366    }
    13671367    Ausgabe;
    13681368    Ausgabe="-------+";
     
    13701370    Ausgabe=Ausgabe+"-----";
    13711371    Ausgabe;
    1372   } 
    1373   for (j=1; j<size(#); j++) 
     1372  }
     1373  for (j=1; j<size(#); j++)
    13741374  {
    13751375    if (size(string(j))==1) { Ausgabe="    "+string(j)+"  |"; }
    13761376    else                    { Ausgabe="   " +string(j)+"  |"; }
    1377     for (k=size(#); k>j; k--) 
     1377    for (k=size(#); k>j; k--)
    13781378    {
    13791379      mul=contact[j,k];//separateHNE(#[j],#[k]);
     
    13851385  }
    13861386  "";
    1387   if (size(#)>1) 
     1387  if (size(#)>1)
    13881388  {
    13891389    " -------------- intersection multiplicities : -------------- ";"";
    13901390    Ausgabe="branch |   ";
    1391     for (j=size(#); j>1; j--) 
     1391    for (j=size(#); j>1; j--)
    13921392    {
    13931393      if (size(string(j))==1) { Ausgabe=Ausgabe+" "+string(j)+"    "; }
    13941394      else                    { Ausgabe=Ausgabe+string(j)+"    "; }
    1395     }   
     1395    }
    13961396    Ausgabe;
    13971397    Ausgabe="-------+";
     
    13991399    Ausgabe=Ausgabe+"-----";
    14001400    Ausgabe;
    1401   } 
    1402   for (j=1; j<size(#); j++) 
     1401  }
     1402  for (j=1; j<size(#); j++)
    14031403  {
    14041404    if (size(string(j))==1) { Ausgabe="    "+string(j)+"  |"; }
    14051405    else                    { Ausgabe="   " +string(j)+"  |"; }
    1406     for (k=size(#); k>j; k--) 
     1406    for (k=size(#); k>j; k--)
    14071407    {
    14081408      mul=intersectionmatrix[j,k];//intersection(#[j],#[k]);
     
    14151415  "";
    14161416  " -------------- delta invariant of the curve : ",ergebnis[size(#)+1][3];
    1417  
     1417
    14181418 }
    14191419 return();
     
    15041504proc intersection (list hn1, list hn2)
    15051505"USAGE:   intersection(hne1,hne2); hne1, hne2 lists
    1506 ASSUME: @code{hne1, hne2} represent an HN expansion of an irreducible plane 
     1506ASSUME: @code{hne1, hne2} represent an HN expansion of an irreducible plane
    15071507        curve singularity (that is, are the output of @code{develop(f)}, or of
    15081508        @code{extdevelop(develop(f),n)}, or one entry of the list of HN data
    15091509        computed by @code{hnexpansion(f[,\"ess\"])}).
    1510 RETURN:  int, the intersection multiplicity of the irreducible plane curve 
     1510RETURN:  int, the intersection multiplicity of the irreducible plane curve
    15111511         singularities corresponding to @code{hne1} and @code{hne2}.
    15121512SEE ALSO: hnexpansion, displayInvariants
     
    16111611
    16121612proc multsequence
    1613 "USAGE:   multsequence(INPUT); INPUT list or poly 
     1613"USAGE:   multsequence(INPUT); INPUT list or poly
    16141614ASSUME:  @code{INPUT} is the output of @code{develop(f)}, or of
    1615          @code{extdevelop(develop(f),n)}, or one entry of the list of HN data 
     1615         @code{extdevelop(develop(f),n)}, or one entry of the list of HN data
    16161616         computed by @code{hnexpansion(f[,\"ess\"])}.
    16171617RETURN:  intvec corresponding to the multiplicity sequence of the irreducible
     
    16191619         coincides with @code{invariants(INPUT)[6]}).
    16201620
    1621 ASSUME:  @code{INPUT} is a bivariate polynomial f, or the output of 
    1622          @code{hnexpansion(f)}, or the list of HN data computed by 
     1621ASSUME:  @code{INPUT} is a bivariate polynomial f, or the output of
     1622         @code{hnexpansion(f)}, or the list of HN data computed by
    16231623         @code{hnexpansion(f [,\"ess\"])}.
    16241624RETURN:  list of two integer matrices:
     
    16361636@end table
    16371637@end texinfo
    1638 NOTE:  The order of the elements of the list of HN data obtained from 
     1638NOTE:  The order of the elements of the list of HN data obtained from
    16391639       @code{hnexpansion(f [,\"ess\"])} must not be changed (because otherwise
    1640        the coincident infinitely near points couldn't be grouped together, 
     1640       the coincident infinitely near points couldn't be grouped together,
    16411641       see the meaning of the 2nd intmat in the example).
    16421642       Hence, it is not wise to compute the HN expansion of polynomial factors
    1643        separately, put them into a list INPUT and call 
     1643       separately, put them into a list INPUT and call
    16441644       @code{multsequence(INPUT)}. @*
    16451645       Use @code{displayMultsequence} to produce a better readable output for
     
    16671667   else {
    16681668     return(multsequence(L));
    1669    } 
     1669   }
    16701670 }
    16711671 if (typeof(#[1])=="ring") {
     
    16751675   setring altring;
    16761676   kill HNring;
    1677    return(Ergebnis); 
     1677   return(Ergebnis);
    16781678 }
    16791679 //-- entferne ueberfluessige Daten zur Erhoehung der Rechengeschwindigkeit: --
     
    17101710    }
    17111711  }
    1712   //--- Ende T.Keilen --- 06.05.02 
     1712  //--- Ende T.Keilen --- 06.05.02
    17131713  return(multseq);
    17141714 }
     
    17721772proc displayMultsequence
    17731773"USAGE:   displayMultsequence(INPUT); INPUT list or poly
    1774 ASSUME:  @code{INPUT} is a bivariate polynomial, or the output of 
    1775          @code{develop(f)}, resp. of @code{extdevelop(develop(f),n)}, or (one 
    1776          entry of) the list of HN data computed by @code{hnexpansion(f[,\"ess\"])}, 
     1774ASSUME:  @code{INPUT} is a bivariate polynomial, or the output of
     1775         @code{develop(f)}, resp. of @code{extdevelop(develop(f),n)}, or (one
     1776         entry of) the list of HN data computed by @code{hnexpansion(f[,\"ess\"])},
    17771777         or the output of @code{hnexpansion(f)}.
    17781778RETURN:  nothing
     
    18111811     displayMultsequence(L);
    18121812     return();
    1813    } 
     1813   }
    18141814 }
    18151815 if (typeof(#[1])=="ring") {
    18161816   def HNring = #[1]; setring HNring;
    18171817   displayMultsequence(hne);
    1818    return(); 
     1818   return();
    18191819 }
    18201820
     
    18521852   }
    18531853 }
    1854 } 
     1854}
    18551855example
    18561856{
     
    19711971"USAGE:   displayHNE(L[,n]); L list, n int
    19721972ASSUME:  L is the output of @code{develop(f)}, or of @code{exdevelop(f,n)},
    1973          or of @code{hnexpansion(f[,\"ess\"])}, or (one entry in) the list 
     1973         or of @code{hnexpansion(f[,\"ess\"])}, or (one entry in) the list
    19741974         @code{hne} in the ring created by @code{hnexpansion(f[,\"ess\"])}.
    19751975RETURN:  - if only one argument is given and if the input are the HN data
     
    19881988        HN matrix.@*
    19891989        - if a second argument is given and if the input are the HN data
    1990         of an irreducible plane curve singularity, return a ring containing 
     1990        of an irreducible plane curve singularity, return a ring containing
    19911991        an ideal @code{HNE} as described above.@*
    19921992        - if L corresponds to the output of @code{hnexpansion(f)}
    19931993        or to the list of HN data computed by @code{hnexpansion(f[,\"ess\"])},
    1994         @code{displayHNE(L[,n])} shows the HNE's of all branches of f in the 
     1994        @code{displayHNE(L[,n])} shows the HNE's of all branches of f in the
    19951995        format described above. The optional parameter is then ignored.
    19961996NOTE:  The 1st line of the above ideal (i.e., @code{HNE[1]}) means that
     
    20612061
    20622062 // lossen: output modified (06/2004)
    2063  if (size(#) == 0) 
     2063 if (size(#) == 0)
    20642064 {
    20652065   if (switch==0) {
     
    20712071
    20722072   for (j=1; j<=ncols(HNE); j++){
    2073      string stHNE(j)=string(HNE[j]); 
     2073     string stHNE(j)=string(HNE[j]);
    20742074   }
    20752075   if (undef_bd<-1)
    2076    {   
     2076   {
    20772077     stHNE(size(v))=stHNE(size(v))+" + ..... (terms of degree >="
    20782078                                 +string(-undef_bd)+")";
    20792079   }
    20802080   if (undef_bd==-1)
    2081    {   
     2081   {
    20822082     stHNE(size(v))=stHNE(size(v))+" + ..... (terms of degree >="
    20832083                                 +string(colM+1)+")";
     
    20862086   if (switch==0) {
    20872087     stHNE(1) = "  "+string(var(size(v)+2))+" = "+stHNE(1);
    2088    } 
     2088   }
    20892089   else {
    20902090     stHNE(1) = "  "+string(var(size(v)+1))+" = "+stHNE(1);
    2091    } 
     2091   }
    20922092   stHNE(1);
    20932093   if (ncols(HNE)==1) {return();}
    20942094
    20952095   if (switch==0) {
    2096      stHNE(2) = "  "+string(var(size(v)+1))+" = "+stHNE(2); 
    2097    } 
     2096     stHNE(2) = "  "+string(var(size(v)+1))+" = "+stHNE(2);
     2097   }
    20982098   else {
    2099      stHNE(2) = "  "+string(var(size(v)+2))+" = "+stHNE(2); 
    2100    } 
     2099     stHNE(2) = "  "+string(var(size(v)+2))+" = "+stHNE(2);
     2100   }
    21012101   stHNE(2);
    21022102
    21032103   for (j=3; j<=ncols(HNE); j++){
    2104      stHNE(j)= "  "+"z(" +string(j-2)+ ") = "+stHNE(j); 
     2104     stHNE(j)= "  "+"z(" +string(j-2)+ ") = "+stHNE(j);
    21052105     stHNE(j);
    21062106   }
     
    21612161RETURN:  list of intvecs (= coordinates x,y of the Newton polygon of f).
    21622162NOTE:    Procedure uses @code{execute}; this can be avoided by calling
    2163          @code{newtonpoly(f,1)} if the ordering of the basering is @code{ls}. 
     2163         @code{newtonpoly(f,1)} if the ordering of the basering is @code{ls}.
    21642164KEYWORDS: Newton polygon
    21652165EXAMPLE: example newtonpoly;  shows an example
     
    21942194  else
    21952195  {
    2196     map xytausch=@RR,var(2),var(1); 
    2197   }
    2198   for (i=2; f!=0; i++) 
     2196    map xytausch=@RR,var(2),var(1);
     2197  }
     2198  for (i=2; f!=0; i++)
    21992199  {
    22002200     abbruch=0;
    2201      while (abbruch==0) 
     2201     while (abbruch==0)
    22022202     {
    2203         C=leadexp(f);         
     2203        C=leadexp(f);
    22042204        if(jet(f,A[2]*C[1]-A[1]*C[2]-1,intvec(A[2]-C[2],C[1]-A[1]))==0)
    2205         { 
    2206            abbruch=1; 
    2207         }       
    2208         else 
    2209         { 
    2210            f=jet(f,-C[1]-1,intvec(-1,0)); 
     2205        {
     2206           abbruch=1;
     2207        }
     2208        else
     2209        {
     2210           f=jet(f,-C[1]-1,intvec(-1,0));
    22112211        }
    22122212    }
    22132213    hilf=jet(f,A[2]*C[1]-A[1]*C[2],intvec(A[2]-C[2],C[1]-A[1]));
    22142214    H=leadexp(xytausch(hilf));
    2215     A=H[2],H[1]; 
     2215    A=H[2],H[1];
    22162216    L[i]=A;
    22172217    f=jet(f,A[2]*B[1]-1,intvec(A[2],B[1]-A[1]));
     
    22412241ASSUME:  f is convenient, that is, f(x,0) != 0 != f(0,y);@*
    22422242         mu (optional) is Milnor number of f.@*
    2243          NP (optional) is output of @code{newtonpoly(f)}. 
     2243         NP (optional) is output of @code{newtonpoly(f)}.
    22442244RETURN:  int: 1 if f in Newton non-degenerate, 0 otherwise.
    22452245SEE ALSO: newtonpoly
     
    22692269          NP=newtonpoly(f);
    22702270          i=size(NP)+1;
    2271         } 
     2271        }
    22722272      }
    22732273    }
     
    22902290  }
    22912291
    2292   if(mu==nN)                   
     2292  if(mu==nN)
    22932293  { // the Newton-polygon is non-degenerate
    22942294    return(1);
     
    23092309
    23102310  // if already computed, one should give the Minor number and Newton polygon
    2311   // as second and third input: 
     2311  // as second and third input:
    23122312  int mu=milnor(g);
    23132313  list NP=newtonpoly(g);
     
    24952495    delt=-koeff(f,M,0)/koeff(f,M1,1);
    24962496    a[Q]=delt;
    2497     dbprint(printlevel-voice+2,"a("+string(zeile-1)+","+string(Q)+") = "+string(delt)); 
     2497    dbprint(printlevel-voice+2,"a("+string(zeile-1)+","+string(Q)+") = "+string(delt));
    24982498    if (Q<Exaktheit) {
    24992499     f=T1_Transform(f,delt,Q);
    25002500     if (defined(HNDebugOn)) { "transformed polynomial:",f; }
    25012501     if (subst(f,y,0)==0) {
    2502        dbprint(printlevel-voice+2,"The HNE is finite!"); 
     2502       dbprint(printlevel-voice+2,"The HNE is finite!");
    25032503       a[Q+1]=x; Exaktheit=Q;
    25042504       f=0;                        // Speicherersparnis: f nicht mehr gebraucht
     
    26292629proc factorfirst(poly f, int M, int N)
    26302630"USAGE : factorfirst(f,M,N); f poly, M,N int
    2631 RETURN: number d such that f=const*(y^(N/e) - d*x^(M/e))^e, where e=gcd(M,N), 
     2631RETURN: number d such that f=const*(y^(N/e) - d*x^(M/e))^e, where e=gcd(M,N),
    26322632        0 if such a d does not exist
    26332633EXAMPLE: example factorfirst;  shows an example
     
    26812681ASSUME:  f is a bivariate polynomial (in the first 2 ring variables)
    26822682RETURN:  list @code{L}, containing Hamburger-Noether data of @code{f}:
    2683          If the computation of the HNE required no field extension, @code{L} 
    2684          is a list of lists @code{L[i]} (corresponding to the output of 
     2683         If the computation of the HNE required no field extension, @code{L}
     2684         is a list of lists @code{L[i]} (corresponding to the output of
    26852685         @code{develop}, applied to a branch of @code{f}, but the last entry
    26862686         being omitted):
     
    26892689@item @code{L[i][1]}; matrix:
    26902690         Each row contains the coefficients of the corresponding line of the
    2691          Hamburger-Noether expansion (HNE) for the i-th branch. The end of 
    2692          the line is marked in the matrix by the first ring variable 
     2691         Hamburger-Noether expansion (HNE) for the i-th branch. The end of
     2692         the line is marked in the matrix by the first ring variable
    26932693         (usually x).
    26942694@item @code{L[i][2]}; intvec:
    26952695         indicating the length of lines of the HNE
    26962696@item @code{L[i][3]}; int:
    2697          0  if the 1st ring variable was transversal (with respect to the 
     2697         0  if the 1st ring variable was transversal (with respect to the
    26982698            i-th branch), @*
    26992699         1  if the variables were changed at the beginning of the
     
    27012701        -1  if an error has occurred.
    27022702@item @code{L[i][4]}; poly:
    2703          the transformed equation of the i-th branch to make it possible 
    2704          to extend the Hamburger-Noether data a posteriori without having 
     2703         the transformed equation of the i-th branch to make it possible
     2704         to extend the Hamburger-Noether data a posteriori without having
    27052705         to do all the previous calculation once again (0 if not needed).
    27062706@end table
     
    27082708         If the computation of the HNE required a field extension, the first
    27092709         entry @code{L[1]} of the list is a ring, in which a list @code{hne}
    2710          of lists (the HN data, as above) and a poly @code{f} (image of 
    2711          @code{f} over the new field) are stored. 
     2710         of lists (the HN data, as above) and a poly @code{f} (image of
     2711         @code{f} over the new field) are stored.
    27122712         @*
    2713          If called with an additional input parameter, @code{hnexpansion} 
    2714          computes only one representative for each class of conjugate 
    2715          branches (over the ground field active when calling the procedure). 
    2716          In this case, the returned list @code{L} always has only two 
    2717          entries: @code{L[1]} is either a list of lists (the HN data) or a 
     2713         If called with an additional input parameter, @code{hnexpansion}
     2714         computes only one representative for each class of conjugate
     2715         branches (over the ground field active when calling the procedure).
     2716         In this case, the returned list @code{L} always has only two
     2717         entries: @code{L[1]} is either a list of lists (the HN data) or a
    27182718         ring (as above), and @code{L[2]} is an integer vector (the number
    27192719         of branches in the respective conjugacy classes).
    27202720
    27212721NOTE:    If f is known to be irreducible as a power series, @code{develop(f)}
    2722          could be chosen instead to avoid a change of basering during the 
     2722         could be chosen instead to avoid a change of basering during the
    27232723         computations. @*
    27242724         Increasing  @code{printlevel} leads to more and more comments. @*
     
    27302730"
    27312731{
    2732  int essential; 
     2732 int essential;
    27332733 if (size(#)==1) { essential=1; }
    27342734 int field_ext;
     
    27732773 // -----                display the multsequence in a nice way
    27742774 if (size(hne)>2)
    2775  { 
     2775 {
    27762776   int i,j,k,m;
    27772777   list dummy;
     
    27812781   for (i=1;i<no_br;i++)
    27822782   {
    2783      for (j=i+1;j<=no_br;j++) 
    2784      { 
     2783     for (j=i+1;j<=no_br;j++)
     2784     {
    27852785       nbhd[i,j]=separateHNE(hne[i],hne[j]);
    27862786       k=i+1;
     
    27892789         k++;
    27902790       }
    2791        if (k<j)  // branches have to be resorted 
     2791       if (k<j)  // branches have to be resorted
    27922792       {
    27932793         dummy=hne[j];
     
    28052805 }
    28062806 // -----
    2807  
     2807
    28082808 if (field_ext==1) {
    28092809   dbprint(printlevel-voice+3,"
    28102810// 'hnexpansion' created a list of one ring.
    2811 // To see the ring and the data stored in the ring, type (if you assigned 
    2812 // the name L to the list): 
     2811// To see the ring and the data stored in the ring, type (if you assigned
     2812// the name L to the list):
    28132813     show(L);
    2814 // To display the computed HN expansion, type 
     2814// To display the computed HN expansion, type
    28152815     def HNring = L[1]; setring HNring;  displayHNE(hne); ");
    28162816   if (essential==1) {
    28172817     dbprint(printlevel-voice+3,""+
    2818 "// As second entry of the returned list L, you obtain an integer vector, 
     2818"// As second entry of the returned list L, you obtain an integer vector,
    28192819// indicating the number of conjugates for each of the computed branches.");
    28202820     return(list(HNEring,hne_conj));
    2821    }   
     2821   }
    28222822   return(list(HNEring));
    28232823 }
     
    28322832     kill mmm,HNhelpring;
    28332833   }
    2834    else {   
     2834   else {
    28352835     list hne=fetch(HNEring,hne);
    28362836   }
     
    28662866  basering;
    28672867  setring r; kill R;
    2868  
     2868
    28692869  // Computing only one representative per conjugacy class:
    28702870  L=hnexpansion((x4-y6)*(y2+x4),"ess");
     
    28812881               second entry = 0  if no change of base ring necessary
    28822882                              1  if change of base ring necessary
    2883                third entry = numbers of conjugates ( if essential = 1 ) 
     2883               third entry = numbers of conjugates ( if essential = 1 )
    28842884        if some error has occured, the empty list is returned
    2885 " 
     2885"
    28862886{
    28872887 def altring = basering;
     
    29252925     "// ** WARNING: Algebraic extension of given ground field not possible!";
    29262926     "// ** We try to develop this polynomial, but if the need for a field";
    2927      "// ** extension occurs during the calculation, we cannot proceed with"; 
     2927     "// ** extension occurs during the calculation, we cannot proceed with";
    29282928     "// ** the corresponding branches.";
    29292929     execute("ring HNEring=("+charstr(basering)+"),(x,y),ls;");
     
    29602960   }
    29612961 }
    2962  
     2962
    29632963 if (defined(HNDebugOn))
    29642964 {"received polynomial: ",f,", with x =",namex,", y =",namey;}
     
    29672967 int Abbruch,i,NullHNEx,NullHNEy;
    29682968 string str;
    2969  list Newton,hne; 
     2969 list Newton,hne;
    29702970
    29712971 // --- changed for SINGULAR 3: ---
     
    31473147
    31483148 //----- hier steht die Anzahl bisher benoetigter Ringerweiterungen drin: -----
    3149  int EXTHNEnumber=0; 
     3149 int EXTHNEnumber=0;
    31503150
    31513151 list EXTHNEring;
     
    31623162 if (grenze1>0) {
    31633163  if (EXTHNEnumber>0){ EXTHNEring = EXTHNEring(1..EXTHNEnumber); }
    3164   HNE_RingDATA = list(HNEring, HNE_noparam, EXTHNEnumber, EXTHNEring, 
    3165                       number_of_letztring); 
     3164  HNE_RingDATA = list(HNEring, HNE_noparam, EXTHNEnumber, EXTHNEring,
     3165                      number_of_letztring);
    31663166
    31673167  list hilflist=HN(HNE_RingDATA,f,grenze1,1,essential,0,hne_conj,1);
     
    31863186     if (not(defined(f))) {poly f; f=hole(f); export f;}
    31873187     else                 {f=hole(f);}
    3188   } 
     3188  }
    31893189  number_of_letztring = hilflist[2];
    3190   kill hilflist; 
     3190  kill hilflist;
    31913191 }
    31923192
     
    32103210
    32113211  HNE_RingDATA = list(HNEring, HNE_noparam, EXTHNEnumber, EXTHNEring,
    3212                       number_of_letztring); 
     3212                      number_of_letztring);
    32133213  list hilflist=HN(HNE_RingDATA,xytausch(f),grenze2,1,essential,1,hne_conj,1);
    32143214  kill HNEring, HNE_noparam;
     
    32193219  for (i=1; i<=EXTHNEnumber; i++) { def EXTHNEring(i)=hilflist[1][4][i]; }
    32203220  if (hilflist[2]==0) { setring HNEring; number_of_letztring=0; }
    3221   else                { setring EXTHNEring(hilflist[2]); 
     3221  else                { setring EXTHNEring(hilflist[2]);
    32223222                        number_of_letztring=hilflist[2]; }
    32233223  if (hilflist[3]==1){field_ext=1;}
     
    32343234
    32353235 // --- aufraeumen ---
    3236  if (defined(HNEakut)){ 
     3236 if (defined(HNEakut)){
    32373237   kill HNEakut,faktoren,deltais,transformiert,teiler,leitf;
    32383238 }
     
    32643264///////////////////////////////////////////////////////////////////////////////
    32653265static proc HN (list HNE_RingDATA,poly fneu,int grenze,Aufruf_Ebene,
    3266                      essential,getauscht,intvec hne_conj,int conj_factor) 
     3266                     essential,getauscht,intvec hne_conj,int conj_factor)
    32673267"NOTE: This procedure is only for internal use, it is called via pre_HN
    3268 RETURN: list: first entry = list of HNErings, 
     3268RETURN: list: first entry = list of HNErings,
    32693269              second entry = number of new base ring (0 for HNEring,
    32703270                                                      -1 for HNE_noparam,
     
    32903290 int number_of_letztring = HNE_RingDATA[5];
    32913291 if (defined(basering))
    3292  { 
     3292 {
    32933293   if (number_of_letztring==0) { kill HNEring; def HNEring=basering; }
    3294    else                 { kill EXTHNEring(number_of_letztring); 
     3294   else                 { kill EXTHNEring(number_of_letztring);
    32953295                          def EXTHNEring(number_of_letztring)=basering; }
    32963296 }
     
    32983298 {
    32993299   if ( number_of_letztring==0) { setring HNEring; }
    3300    else                         { setring EXTHNEring(number_of_letztring); } 
     3300   else                         { setring EXTHNEring(number_of_letztring); }
    33013301 }
    33023302 if (not(defined(hne))) {list hne;}
     
    33763376           // voice abzufragen macht bei rekursiven procs keinen Sinn
    33773377        azeilen[zeile+1][Q+1]=x;
    3378         //----- Q wird nur in hqs eingetragen, wenn der Spezialfall nicht 
     3378        //----- Q wird nur in hqs eingetragen, wenn der Spezialfall nicht
    33793379        //      eintritt (siehe unten) -----
    33803380        Abbruch=2;
     
    33883388           // Wir haben das Problem, dass die HNE eines Zweiges hier abbricht,
    33893389           // aber ein anderer Zweig bis hierher genau die gleiche HNE hat, die
    3390            // noch weiter geht 
    3391            // Loesung: mache Transform. rueckgaengig und behandle fneu im 
     3390           // noch weiter geht
     3391           // Loesung: mache Transform. rueckgaengig und behandle fneu im
    33923392           // Verzweigungsteil
    33933393           //------------------------------------------------------------------
     
    34153415  list faktoren;
    34163416  ideal deltais;
    3417   list HNEakut=ideal(0); 
     3417  list HNEakut=ideal(0);
    34183418  intvec eis;
    34193419  int zaehler,hnezaehler,zl,zl1,M1,N1,R1,Q1,needext;
     
    34303430  //======= Schleife fuer jede zu betrachtende Seite des Newtonpolygons: ======
    34313431  for(i=zeiger; i<size(Newton); i++) {
    3432    if ((essential==1) and (EXTHNEnumber>number_of_letztring)) { 
     3432   if ((essential==1) and (EXTHNEnumber>number_of_letztring)) {
    34333433     // ----- setze ring zurueck fuer neue Kante  -----
    34343434     // ---- (damit konjugierte Zweige erkennbar) -----
     
    34393439     setring SaveRing;
    34403440     if (not(defined(HNEs))) { // HN wurde zum 2.Mal von pre_HN aufgerufen
    3441        list HNEs=ideal(0); 
     3441       list HNEs=ideal(0);
    34423442     }
    34433443     for (k=number_of_letztring+1; k<=EXTHNEnumber; k++) { kill EXTHNEring(k);}
    3444      EXTHNEnumber=number_of_letztring;   
     3444     EXTHNEnumber=number_of_letztring;
    34453445     if (EXTHNEnumber==0) { setring HNEring; }
    34463446     else                 { setring EXTHNEring(EXTHNEnumber); }
     
    34703470   for (numberofRingchanges=1; needext==1; numberofRingchanges++) {
    34713471    leitf=redleit(fneu,Newton[i],Newton[i+1])/
    3472                      (x^Newton[i][1]*y^Newton[i+1][2]); 
     3472                     (x^Newton[i][1]*y^Newton[i+1][2]);
    34733473    delt=factorfirst(leitf,M,N);
    34743474    needext=0;
     
    34763476     //---------- Sonderbehandlung: faktorisiere einige Polynome ueber Q(a): --
    34773477     if ((charstr(basering)=="0,a") and (essential==0)) {
    3478         faktoren=factorize(charPoly(leitf,M,N)); 
     3478        faktoren=factorize(charPoly(leitf,M,N));
    34793479        conjugates=1;
    34803480        for (k=2;k<=size(faktoren[2]);k++) {conjugates=conjugates,1;}
     
    34993499             for (k=2;k<=size(hilf_id);k++) {
    35003500               dd=dd+deg(hilf_id[k]);
    3501                if (deg(hilf_id[k])<deg(fac)) { fac=hilf_id[k]; } 
     3501               if (deg(hilf_id[k])<deg(fac)) { fac=hilf_id[k]; }
    35023502             }
    35033503             faktoren[1][zaehler]=fac;
    3504              kill fac; 
    3505              conjugates[zaehler]=conj_factor*dd; 
     3504             kill fac;
     3505             conjugates[zaehler]=conj_factor*dd;
    35063506           }
    3507            else { 
    3508              faktoren[1][zaehler]=hilf_id[1]; 
    3509              conjugates[zaehler]=conj_factor; 
     3507           else {
     3508             faktoren[1][zaehler]=hilf_id[1];
     3509             conjugates[zaehler]=conj_factor;
    35103510           }
    35113511         }
     
    35483548      }
    35493549      if (parstr(basering)=="") {
    3550         EXTHNEnumber++; 
     3550        EXTHNEnumber++;
    35513551        def EXTHNEring(EXTHNEnumber) = splitring(zerlege);
    35523552        setring EXTHNEring(EXTHNEnumber);
     
    35553555        poly transfproc=0;
    35563556        ring_changed=1;
    3557         export transfproc; 
     3557        export transfproc;
    35583558      }
    35593559      else {
    35603560        if (numberofRingchanges>1) {  // ein Ringwechsel hat nicht gereicht
    3561          def helpring = splitring(zerlege,list(transf,transfproc,faktoren)); 
     3561         def helpring = splitring(zerlege,list(transf,transfproc,faktoren));
    35623562         kill EXTHNEring(EXTHNEnumber);
    35633563         def EXTHNEring(EXTHNEnumber)=helpring;
     
    35943594      }
    35953595      //-----------------------------------------------------------------------
    3596       // transf enthaelt jetzt den alten Parameter des Ringes, der aktiv war 
    3597       // vor Beginn der Schleife (evtl. also ueber mehrere Ringwechsel 
    3598       // weitergereicht), 
    3599       // transfproc enthaelt den alten Parameter des Ringes, der aktiv war zu 
     3596      // transf enthaelt jetzt den alten Parameter des Ringes, der aktiv war
     3597      // vor Beginn der Schleife (evtl. also ueber mehrere Ringwechsel
     3598      // weitergereicht),
     3599      // transfproc enthaelt den alten Parameter des Ringes, der aktiv war zu
    36003600      // Beginn der Prozedur, und der an die aufrufende Prozedur zurueckgegeben
    3601       // werden muss 
     3601      // werden muss
    36023602      // transf ist Null, falls der alte Ring keinen Parameter hatte,
    36033603      // das gleiche gilt fuer transfproc
     
    36223622      if (not defined(faktoren)) {list faktoren; }
    36233623      faktoren=imap(letztring,faktoren);
    3624        
     3624
    36253625      if (not(defined(azeilen))){list azeilen,HNEs;}
    36263626      azeilen=imap(letztring,azeilen);
     
    36383638        poly f=hole(f);
    36393639        list hne=hole(hne);
    3640         export f,hne;     
     3640        export f,hne;
    36413641      }
    36423642    }
     
    36653665   //============ Schleife fuer jeden gefundenen Faktor der Leitform: =========
    36663666   for (j=1; j<=size(eis); j++) {
    3667      //---- Mache Transformation T1 oder T2, trage Daten in HNEs ein, 
     3667     //---- Mache Transformation T1 oder T2, trage Daten in HNEs ein,
    36683668     //     falls HNE abbricht: ----
    36693669
     
    37103710       // Werte von:  zeile: aktuelle Zeilennummer der HNE (gemeinsamer Teil)
    37113711       //             zl : die HNE spaltet auf; zeile+zl ist der Index fuer die
    3712        //                  Zeile des aktuellen Zweigs; (zeile+zl-2) ist die 
    3713        //                  tatsaechl. Zeilennr. (bei 0 angefangen) der HNE 
     3712       //                  Zeile des aktuellen Zweigs; (zeile+zl-2) ist die
     3713       //                  tatsaechl. Zeilennr. (bei 0 angefangen) der HNE
    37143714       //                  ([1] <- intvec(hqs), [2] <- 0. Zeile usw.)
    37153715       //----------------------------------------------------------------------
     
    37573757
    37583758     if (EXTHNEnumber>0){ EXTHNEring = EXTHNEring(1..EXTHNEnumber); }
    3759      HNE_RingDATA = list( HNEring, HNE_noparam, EXTHNEnumber, EXTHNEring, 
    3760                           lastRingnumber); 
     3759     HNE_RingDATA = list( HNEring, HNE_noparam, EXTHNEnumber, EXTHNEring,
     3760                          lastRingnumber);
    37613761     if (defined(HNerg)) {kill HNerg;}
    37623762     list HNerg=HN(HNE_RingDATA,transformiert,eis[j],Aufruf_Ebene+1,
    3763                                 essential,getauscht,hne_conj,conj2[j]);   
     3763                                essential,getauscht,hne_conj,conj2[j]);
    37643764     HNE_RingDATA = HNerg[1];
    37653765     if (conj1==0) { conj1=HNerg[5]; }
     
    37753775          {" ring change in HN(",Aufruf_Ebene+1,") detected";}
    37763776       EXTHNEnumber = HNerg[1][3];
    3777        for (i=lastRingnumber+1; i<=EXTHNEnumber; i++) { 
    3778          def EXTHNEring(i)=HNerg[1][4][i]; 
    3779        } 
     3777       for (i=lastRingnumber+1; i<=EXTHNEnumber; i++) {
     3778         def EXTHNEring(i)=HNerg[1][4][i];
     3779       }
    37803780       if (HNerg[2]==0) { setring HNEring; }
    37813781       else             { setring EXTHNEring(HNerg[2]); }
     
    37843784       kill tempRing;
    37853785
    3786        //--- stelle lokale Variablen im neuen Ring wieder her, und rette 
     3786       //--- stelle lokale Variablen im neuen Ring wieder her, und rette
    37873787       //    gegebenenfalls ihren Inhalt: ----
    37883788       list erg,faktoren,HNEakut;
    3789        ideal hilfid;     
     3789       ideal hilfid;
    37903790       erg=ideal(0); faktoren=erg; HNEakut=erg;
    37913791       poly leitf,teiler,transformiert;
     
    38163816       poly fneu=hole(fneu);
    38173817       if (not(defined(f)))
    3818        { 
     3818       {
    38193819         poly f=hole(f);
    38203820         list hne=hole(hne);
     
    38273827       HNEs,hnezaehler=constructHNEs(HNEs,hnezaehler,aneu,azeilen,zeile,
    38283828                       deltais,Q,j);
    3829        kill aneu; 
     3829       kill aneu;
    38303830     }
    38313831     else {
     
    38593859       }
    38603860       HNEakut[zeile+zl]=hilfid;
    3861        // ------ vorher HNEs[.][zeile+zl]<-aneu[.][2], 
     3861       // ------ vorher HNEs[.][zeile+zl]<-aneu[.][2],
    38623862       //        jetzt [zeile+zl+1] <- [3] usw.: --------
    38633863       for (zl1=3; zl1<=size(aneu[zaehler]); zl1++) {
     
    38903890       setring HNE_noparam;
    38913891       if (not(defined(a_x))){ map a_x,a_y; poly mp_save, mp_new; }
    3892        mp_save=imap(SaveRing,miniPol); 
    3893        mp_new=imap(EXTHNEring(EXTHNEnumber-1),miniPol); 
     3892       mp_save=imap(SaveRing,miniPol);
     3893       mp_new=imap(EXTHNEring(EXTHNEnumber-1),miniPol);
    38943894       if (mp_save==mp_new) { // Sonderfall: wieder gleicher Ring
    38953895         def EXTHNEring(EXTHNEnumber)=SaveRing;
     
    39013901         HNEs[size(HNEs)+1..size(HNEs)+size(dummyL)]=dummyL[1..size(dummyL)];
    39023902         kill dummyL,SaveRing;
    3903        } 
     3903       }
    39043904       else { // verschiedene Ringe
    39053905         a_x=HNE_noparam,x,0,0;
     
    39123912         poly fac=Lfac[1][1];
    39133913         for (k=2;k<=size(Lfac[1]);k++) {
    3914            if (deg(Lfac[1][k])<deg(fac)) { fac=Lfac[1][k]; } 
     3914           if (deg(Lfac[1][k])<deg(fac)) { fac=Lfac[1][k]; }
    39153915         }
    39163916
     
    39373937           kill erg;
    39383938           setring HNE_noparam;
    3939            if (not(defined(HNEs1))) { list HNEs1=ideal(0); } 
     3939           if (not(defined(HNEs1))) { list HNEs1=ideal(0); }
    39403940           HNEs1=imap(EXTHNEring(EXTHNEnumber-1),HNEs);
    3941            if (not(defined(hne))) { list hne=ideal(0); } 
     3941           if (not(defined(hne))) { list hne=ideal(0); }
    39423942           hne=imap(SaveRing,hne);
    39433943           HNEs=imap(SaveRing,HNEs);
     
    39453945           map hole=HNE_noparam,transf,x,y;
    39463946           poly fneu=hole(fneu);
    3947            poly f=hole(f); 
     3947           poly f=hole(f);
    39483948           map phi=HNE_noparam,transb,x,y;
    39493949           list HNEs=hole(HNEs);
     
    39583958     }
    39593959     else { // nur bei letzter Kante muss was getan werden
    3960        if (i==size(Newton)-1) { 
     3960       if (i==size(Newton)-1) {
    39613961         EXTHNEnumber++;
    39623962         if (number_of_letztring==0) { def letztring=HNEring; }
    39633963         else       { def letztring=EXTHNEring(EXTHNEnumber); }
    3964          if (minpoly==0) { 
     3964         if (minpoly==0) {
    39653965           def EXTHNEring(EXTHNEnumber)=SaveRing;
    39663966           setring EXTHNEring(EXTHNEnumber);
     
    39733973         else { // muessen Daten nach SaveRing uebertragen;
    39743974           setring HNE_noparam;
    3975            if (not(defined(HNEs))) { list HNEs; } 
     3975           if (not(defined(HNEs))) { list HNEs; }
    39763976           HNEs=imap(letztring,HNEs);
    39773977           def EXTHNEring(EXTHNEnumber)=SaveRing;
     
    39883988     }
    39893989   }
    3990    // -----------------end of new part (loop for essential=1) ---------------- 
     3990   // -----------------end of new part (loop for essential=1) ----------------
    39913991  } // end (Loop uber Kanten)
    39923992  if (defined(SaveRing)) { kill SaveRing; }
     
    39953995  HNEs[1]=list(hqs)+azeilen+list(fneu); // fneu ist transform. Poly oder Null
    39963996  conj1[1]=conj_factor;
    3997  } 
     3997 }
    39983998
    39993999 if (Aufruf_Ebene == 1)
    40004000 {
    40014001   if ((number_of_letztring!=EXTHNEnumber) and (not(defined(hne))))
    4002    { 
     4002   {
    40034003     //----- falls Zweige in transz. Erw. berechnet werden konnten ---------
    4004      if (defined(transfproc)) 
     4004     if (defined(transfproc))
    40054005     { // --- Ringwechsel hat stattgefunden ---
    40064006       if (defined(HNDebugOn)) {" ring change in HN(",1,") detected";}
     
    40294029 }
    40304030 else
    4031  { // HN wurde rekursiv aufgerufen 
     4031 { // HN wurde rekursiv aufgerufen
    40324032   if (number_of_letztring!=EXTHNEnumber)
    40334033   { // Ringwechsel hatte stattgefunden
    40344034     string mipl_alt = string(minpoly);
    40354035     execute("ring tempRing = ("+charstr(basering)+"),("+varstr(basering)+
    4036                               "),("+ordstr(basering)+");"); 
     4036                              "),("+ordstr(basering)+");");
    40374037     execute("minpoly="+ mipl_alt +";");
    40384038     list HNEs=imap(EXTHNEring(EXTHNEnumber),HNEs);
    40394039     export HNEs;
    4040      if (defined(HNDebugOn)) {" ! tempRing defined ! ";} 
    4041    } 
     4040     if (defined(HNDebugOn)) {" ! tempRing defined ! ";}
     4041   }
    40424042   if (conj1!=0) { hne_conj=conj1; }
    40434043   else          { hne_conj=conj_factor; }
     
    41214121{
    41224122 int k;
    4123  if ((size(#)>=1) and ((typeof(#[1])=="intvec") or (typeof(#[1])=="int"))) { 
    4124    int with_conj = 1; intvec C = #[1]; 
    4125  } 
    4126  else { 
    4127    int with_conj = 0; intvec C = L[2]; 
     4123 if ((size(#)>=1) and ((typeof(#[1])=="intvec") or (typeof(#[1])=="int"))) {
     4124   int with_conj = 1; intvec C = #[1];
     4125 }
     4126 else {
     4127   int with_conj = 0; intvec C = L[2];
    41284128 }
    41294129 // eine Sortierung der Faktoren eruebrigt sich, weil keine zwei versch.
     
    42094209         or the list of HN data computed by @code{hnexpansion(f)}.
    42104210RETURN:  int, the delta invariant of the singularity at 0, that is, the vector
    4211          space dimension of R~/R, (R~ the normalization of the local ring of 
     4211         space dimension of R~/R, (R~ the normalization of the local ring of
    42124212         the singularity.
    42134213NOTE:    In case the Hamburger-Noether expansion of the curve f is needed
     
    42294229    else {
    42304230      return(delta(L));
    4231     } 
     4231    }
    42324232  }
    42334233  if (typeof(#[1])=="ring") { // INPUT = HNEring of curve
     
    42354235    return(delta(hne));
    42364236  }
    4237   if (typeof(#[1])=="matrix") 
    4238   { // INPUT = hne of an irreducible curve 
     4237  if (typeof(#[1])=="matrix")
     4238  { // INPUT = hne of an irreducible curve
    42394239    return(invariants(#)[5]/2);
    42404240  }
    4241   else 
     4241  else
    42424242  { // INPUT = hne of a reducible curve
    42434243    list INV=invariants(#);
Note: See TracChangeset for help on using the changeset viewer.