Changeset 81fb58d in git


Ignore:
Timestamp:
Apr 14, 1999, 2:11:57 PM (24 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', '828514cf6e480e4bafc26df99217bf2a1ed1ef45')
Children:
a1417ca18268fbc29752b22baabf8c7d5409ef6f
Parents:
a3600c96f2d4c4189dbfe8f553885cf86db78ffa
Message:
* hannes/lamm: new hnoether.lib/primtiv.lib


git-svn-id: file:///usr/local/Singular/svn/trunk@2979 2c84dea3-7e68-4137-9b89-c4e89433aadc
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/hnoether.lib

    ra3600c r81fb58d  
    1 // $Id: hnoether.lib,v 1.9 1998-10-21 10:28:24 krueger Exp $
     1// $Id: hnoether.lib,v 1.10 1999-04-14 12:11:49 Singular Exp $
    22// author:  Martin Lamm,  email: lamm@mathematik.uni-kl.de
    3 // last change:           26.03.98
    4 ///////////////////////////////////////////////////////////////////////////////
    5 
    6 version="$Id: hnoether.lib,v 1.9 1998-10-21 10:28:24 krueger Exp $";
     3// last change:           09.03.99
     4///////////////////////////////////////////////////////////////////////////////
     5// This library is for Singular 1.2 or newer
     6
     7version="$Id: hnoether.lib,v 1.10 1999-04-14 12:11:49 Singular Exp $";
    78info="
    8 LIBRARY:  hnoether.lib   PROCEDURES FOR THE HAMBURGER-NOETHER-DEVELOPMENT
     9LIBRARY:  hnoether.lib   PROCEDURES FOR THE HAMBURGER-NOETHER DEVELOPMENT
    910
    1011           Important procedures:
    11  develop(f [,n]);    Hamburger-Noether development from the irred. polynomial f
    12  reddevelop(f);      Hamburger-Noether development from the (red.) polynomial f
    13  extdevelop(hne,n);  extension of Hamburger-Noether development hne from f
     12 develop(f [,n]);    Hamburger-Noether development of the irred. polynomial f
     13 reddevelop(f);      Hamburger-Noether development of the (red.) polynomial f
     14 extdevelop(hne,n);  extension of the Hamburger-Noether development hne of f
    1415 param(hne);         returns a parametrization of f (input=output(develop))
    1516 displayHNE(hne);    display Hamburger-Noether development as an ideal
    1617 invariants(hne);    invariants of f, e.g. the characteristic exponents
    1718 displayInvariants(hne);  display invariants of f
    18  generators(hne);    computes the generators of the semigroup of values
    1919 intersection(hne1,hne2); intersection multiplicity of two curves
     20 multsequence(hne);  sequence of multiplicities
     21 displayMultsequence(hne);  display sequence of multiplicities
    2022 stripHNE(hne);      reduce amount of memory consumed by hne
     23
     24           perhaps useful procedures:
     25 puiseux2generators(m,n); convert Puiseux pairs to generators of semigroup
     26 multiplicities(hne);     multiplicities of blowed up curves
     27 separateHNE(hne1,hne2);  number of quadratic transf. needed for separation
     28 squarefree(f);      returns a squarefree divisor of the poly f
     29 allsquarefree(f,l); returns the maximal squarefree divisor of the poly f
    2130";
    22 ////////////////////////////////////////////////////////////////////////////
    23 //           perhaps useful procedures:
    24 // puiseux2generators(m,n); convert puiseux pairs to generators of semigroup
    25 // multiplicities(hne);     multiplicities of blowed up curves
    26 // newtonpoly(f);      newtonpolygon of polynom f
    27 // newtonhoehne(f);    same as newtonpoly, but uses internal procedure
    28 // getnm(f);           intersection points of the Newton-polygon with the axes
     31///////////////////////////////////////////////////////////////////////////////
     32// newtonpoly(f);      Newton polygon of polynom f
     33// getnm(f);           intersection points of the Newton polygon with the axes
    2934// T_Transform(f,Q,N); returns f(y,xy^Q)/y^NQ (type f(x,y): poly, Q,N: int)
    3035// T1_Transform(f,d,M); returns f(x,y+d*x^M)  (type f(x,y): poly,d:number,M:int)
    31 // T2_Transform(f,d,M,N);   a composition of T1 & T
     36// T2_Transform(f,d,M,N,ref);   a composition of T1 & T
    3237// koeff(f,I,J);       gets coefficient of indicated monomial of poly f (I,J:int)
    3338// redleit(f,S,E);     restriction of monomials of f to line (S-E)
    34 // squarefree(f);      returns a squarefree divisor of the poly f
    35 // allsquarefree(f,l); returns the maximal squarefree divisor of the poly f
     39// leit(f,n,m);        special case of redleit (for irred. polynomials)
    3640// set_list(L,v,l);    managing interconnected lists
    3741//
    3842//           procedures (more or less) for internal use:
    39 // leit(f,n,m);        special case of redleit (for irred. polynomials)
    4043// testreducible(f,n,m); tests whether f is reducible
    4144// polytest(f);        tests coefficients and exponents of poly f
     
    4447// get_last_divisor(M,N); last divisor in Euclid's algorithm
    4548// factorfirst(f,M,N); try to factor f in a trivial way before using 'factorize'
     49// factorlist(L);      factorize a list L of polynomials
    4650// extrafactor(f,M,N); try to factor charPoly(f,M,N) where 'factorize' cannot
     51// referencepoly(D);   a polynomial f s.t. D is the Newton diagram of f
    4752// extractHNEs(H,t);   extracts output H of HN to output of reddevelop
    4853// HN(f,grenze);       recursive subroutine for reddevelop
     
    7580
    7681proc leit (poly f, int n, int m)
    77 "// leit(poly f, int n, int m) returns all monomials on the line
    78 // from (0,n) to (m,0) in the Newton diagram
     82"USAGE:   leit(f,n,m);  poly f, int n,m
     83RETURN:  all monomials on the line from (0,n) to (m,0) in the Newton diagram
     84EXAMPLE: example leit;  shows an example
    7985"
    8086{
    8187 return(jet(f,m*n,intvec(n,m))-jet(f,m*n-1,intvec(n,m)))
    8288}
     89example
     90{ "EXAMPLE:"; echo = 2;
     91   ring r = 0,(x,y),ds;
     92   poly f = x5+x4y3-y2+y4;
     93   leit(f,2,5);
     94}
    8395///////////////////////////////////////////////////////////////////////////////
    8496proc testreducible (poly f, int n, int m)
    85 "// testreducible(poly f,int n,int m) returns true if there are points in the
    86 // Newton diagram below the line (0,n)-(m,0)
    87 "
     97" testreducible(poly f,int n,int m) returns true if there are points in the
     98 Newton diagram below the line (0,n)-(m,0)"
    8899{
    89100 return(size(jet(f,m*n-1,intvec(n,m))) != 0)
     
    91102///////////////////////////////////////////////////////////////////////////////
    92103proc T_Transform (poly f, int Q, int N)
    93 "// returns f(y,xy^Q)/y^NQ
    94 "
     104" returns f(y,xy^Q)/y^NQ  (only useful if f is irreducible) "
    95105{
    96106 map T = basering,y,x*y^Q;
     
    98108}
    99109///////////////////////////////////////////////////////////////////////////////
    100 proc T1_Transform (poly f, number d, int M)
    101 "// returns f(x,y+d*x^M)
    102 "
    103 {
    104  map T1 = basering,x,y+d*x^M;
     110proc T1_Transform (poly f, number d, int Q)
     111" returns f(x,y+d*x^Q) "
     112{
     113 map T1 = basering,x,y+d*x^Q;
    105114 return(T1(f));
    106115}
    107116///////////////////////////////////////////////////////////////////////////////
    108117
    109 proc T2_Transform (poly f, number d, int M, int N)
    110 "USAGE: T2_Transform(f,d,M,N); f poly, d number; M,N int
    111 RETURN: list: poly T2(f,d',M,N), number d' in \{ d, 1/d \}
     118proc T2_Transform (poly f, number d, int M, int N, poly refpoly)
     119"USAGE:   T2_Transform(f,d,M,N,ref); f poly, d number; M,N int; ref poly
     120ASSUME:  ref has the same Newton polygon as f (but can be simpler)
     121         for this you can e.g. use the proc `referencepoly' or simply f again
     122RETURN:  list: poly T2(f,d',M,N), number d' in \{ d, 1/d \}
     123EXAMPLE: example T2_Transform;  shows an example
    112124"
    113125{
     
    117129  list ts=extgcd(M,N);
    118130  int tau,sigma=ts[2],-ts[3];
     131  int s,t;
     132  poly hilf;
    119133  if (sigma<0) { tau=-tau; sigma=-sigma;}
    120134 // es gilt: 0<=tau<=N, 0<=sigma<=M, |N*sigma-M*tau| = 1 = ggT(M,N)
     
    127141  map T1 = basering,x,y+d*x^Q;
    128142  map Tstar=basering,x^(N-Q*tau)*y^tau,x^(M-sigma*Q)*y^sigma;
    129   if (defined(Protokoll)) {
     143  if (defined(HNDebugOn)) {
    130144   "Trafo. T2: x->x^"+string(N-Q*tau)+"*y^"+string(tau)+", y->x^"
    131145    +string(M-sigma*Q)+"*y^"+string(sigma);
     
    133147  }
    134148 //------------------- Durchfuehrung der Transformation T2 --------------------
    135  // man koennte an T2_Transform noch eine Liste mit allen Eckpunkten des
    136  // Newtonpolys uebergeben und nur die Transformierten der Eckpunkte betrachten
    137  // um max. Exponenten e,f von x,y zu finden--noch einfacher: ein Referenzpo-
    138  // lynom, das das gleiche Newtonpolygon hat (z.B. Einschraenkung auf die Mono-
    139  // me in den Eckpunkten, oder alle Monome haben Koeff. 1, das ist einfacher)
    140  //----------------------------------------------------------------------------
    141 
    142   f=Tstar(f); // hier dann refpoly=Tstar(refpoly)
    143   poly hilf;
    144  // dividiere f so lange durch x, wie die Div. aufgeht:
    145   for (hilf=f/x; hilf*x==f; hilf=f/x) {f=hilf;}
    146   for (hilf=f/y; hilf*y==f; hilf=f/y) {f=hilf;} // gleiches fuer y
     149  f=Tstar(f);
     150  refpoly=Tstar(refpoly);
     151 //--- dividiere f so lange durch x & y, wie die Div. aufgeht, benutze ein  ---
     152 //--- Referenzpolynom mit gleichem Newtonpolynom wie f zur Beschleunigung: ---
     153  for (hilf=refpoly/x; hilf*x==refpoly; hilf=refpoly/x) {refpoly=hilf; s++;}
     154  for (hilf=refpoly/y; hilf*y==refpoly; hilf=refpoly/y) {refpoly=hilf; t++;}
     155  f=f/(x^s*y^t);
    147156  return(list(T1(f),d));
    148157}
     158example
     159{ "EXAMPLE:"; echo = 2;
     160  ring exrg=0,(x,y),ds;
     161  export exrg;
     162  poly f=y2-2x2y+x6-x5y+x4y2;
     163  T2_Transform(f,1/2,4,1,f);
     164  T2_Transform(f,1/2,4,1,referencepoly(newtonpoly(f)));
     165  // if  size(referencepoly) << size(f)  the 2nd example would be faster
     166  referencepoly(newtonpoly(f));
     167  kill exrg;
     168}
    149169///////////////////////////////////////////////////////////////////////////////
    150170
    151171proc koeff (poly f, int I, int J)
    152 "USAGE:  koeff(f,I,J); f polynomial in x and y, I,J integers
    153 RETURN: if f = sum(a(i,j)*x^i*y^j), then koeff(f,I,J)= a(I,J) (of type number)
     172"USAGE:   koeff(f,I,J); f polynomial in x and y, I,J integers
     173RETURN:  if f = sum(a(i,j)*x^i*y^j), then koeff(f,I,J)= a(I,J) (of type number)
    154174EXAMPLE: example koeff;  shows an example
    155 "{
     175NOTE:    J must be in the range of the exponents of y
     176"
     177{
    156178  matrix mat = coeffs(coeffs(f,y)[J+1,1],x);
    157179  if (size(mat) <= I) { return(0);}
     
    166188
    167189proc squarefree (poly f)
    168 "USAGE:  squarefree(f); f poly in x and y
     190"USAGE:  squarefree(f);  f a bivariate polynomial
    169191RETURN: a squarefree divisor of f
    170192        Normally the return value is a greatest squarefree divisor, but there
     
    172194        are lost.
    173195EXAMPLE: example squarefree; shows some examples.
    174 "{
    175  // es gibt noch ein Problem: syz gibt manchmal in Koerpererweiterung (p,a)
    176  // nicht f/g zurueck, obwohl die Division aufgeht ... In dem Fall ist die
    177  // Rueckgabe evtl. nicht quadratfrei! Bsp.: squarefree((1/a*x3+y7)^3);
    178  // in char 7
    179  // In Singular 1.1.3 funktioniert syz, dafuer geht das gleiche Bsp. schief,
    180  // weil gcd auf einmal falsch wird! (ring (7,a),(x,y),dp; minpoly=a2+1; )
    181 
     196"
     197{
    182198 //----------------- Wechsel in geeigneten Ring & Variablendefinition ---------
    183199  def altring = basering;
     
    185201  int gcd_ok=1;
    186202  string mipl="0";
    187   if (size(parstr(altring))==1) {mipl=string(minpoly);}
     203  if (size(parstr(altring))==1) { mipl=string(minpoly); }
    188204 //---- test: char = (p^k,a) (-> gcd not implemented) or (p,a) (gcd works) ----
    189205  if ((char(basering)!=0) and (charstr(basering)!=string(char(basering)))) {
     
    196212  poly f=fetch(altring,f);
    197213  poly dif,g,l;
     214  if ((char(basering)==0) and (charstr(basering)!=string(char(basering)))
     215      and (mipl!="0")) {
     216    gcd_ok=0;                   // since Singular 1.2 gcd no longer implemented
     217  }
    198218  if (gcd_ok!=0) {
    199  //-------------------- Berechne f/ggT(f,df/dx,df/dy) ------------------------
     219 //--------------------- Berechne f/ggT(f,df/dx,df/dy) ------------------------
    200220    dif=diff(f,x);
    201221    if (dif==0) { g=f; }        // zur Beschleunigung
     
    216236       else { l=m[1,1]; }
    217237     }
    218  //----------------------------------------------------------------------------
    219  // Polynomdivision geht, wenn factory eingebunden ist
    220  // dann also l=f/g; aber: ist ebenfalls fehlerhaft! (s.o. als Bsp.)
    221  // wenn / zur Polynomdivision einsetzbar ist, kann der Ringwechsel gespart
    222  // werden, sollte dann also zum Einsatz gebracht werden (Zeitersparnis)
    223  //----------------------------------------------------------------------------
    224238    }
    225239    else { e=1; }
     
    236250     if (dif==0) { e=2; l=1; } // f is of power divisible by char of basefield
    237251     else { l=syz(ideal(dif,f))[1,1];  // x^p+y^(p-1) abgedeckt
    238             if (deg(l)==deg(f)) { e=1;}
     252            if (subst(f,x,0)==0) { l=l*x; }
     253            if (deg(l)==deg(f))  { e=1;}
    239254            else {e=0;}
    240255     }
    241256    }
    242257    else { l=syz(ideal(dif,f))[1,1];
    243            if (deg(l)==deg(f)) { e=1;}
     258           if (subst(f,y,0)==0) { l=l*y; }
     259           if (deg(l)==deg(f))  { e=1;}
    244260           else {e=0;}
    245261    }
     
    269285        l is the squarefree divisor of f you get by l=squarefree(f);
    270286RETURN: the squarefree divisor of f consisting of all irreducible factors of f
    271 NOTE  : * this proc uses factorize to get the missing factors of f not in l and
    272           therefore may be slow. Furthermore factorize can still return
    273           a factor more than once (what should not occur)
    274         * this proc uses polynomial division of factory (which still has a bug
    275          at the moment: it can return nonsense, if the basering has parameters)
     287NOTE  : This proc uses factorize to get the missing factors of f not in l and
     288        therefore may be slow. Furthermore factorize still seems to contain
     289        errors...
    276290EXAMPLE: example allsquarefree;  shows an example
    277 "{
     291"
     292{
     293 //------------------------ Wechsel in geeigneten Ring ------------------------
     294 def altring = basering;
     295 string mipl="0";
     296 if (size(parstr(altring))==1) { mipl=string(minpoly); }
     297 if ((char(basering)!=0) and (charstr(basering)!=string(char(basering)))) {
     298   string tststr=charstr(basering);
     299   tststr=tststr[1..find(tststr,",")-1];           //-> "p^k" bzw. "p"
     300   if (tststr!=string(char(basering))) {
     301     " Sorry -- not implemented for this ring (gcd doesn't work)";
     302     return(l);
     303   }
     304 }
     305 execute("ring rsqrf = ("+charstr(altring)+"),(x,y),dp;");
     306 if (mipl!="0") { execute "minpoly="+mipl+";"; }
     307 poly f=fetch(altring,f);
     308 poly l=fetch(altring,l);
    278309 //---------- eliminiere bereits mit squarefree gefundene Faktoren ------------
    279  poly g=l;                            // g = gcd(f,l);
     310 poly g=l;
    280311 while (deg(g)!=0) {
    281   f=f/g;
    282   g=gcd(f,l);
    283  }                                    // jetzt f=h^p
     312   f=syz(ideal(g,f))[1,1];                         // f=f/g;
     313   g=gcd(f,l);
     314 }                                                 // jetzt f=h^p
    284315 //--------------- Berechne uebrige Faktoren mit factorize --------------------
    285316 if (deg(f)>0) {
     
    291322    "!! factorize has not worked correctly !!";
    292323    if (testp==1) {" We cannot proceed ..."; g=1;}
    293     else {" But we could recover the correct result..."; g=testp;}
     324    else {" But we could recover some factors..."; g=testp;}
    294325  }
    295326  l=l*g;
    296327 }
     328 //--------------- Wechsel in alten Ring und Rueckgabe des Ergebnisses --------
     329 setring altring;
     330 l=fetch(rsqrf,l);
    297331 return(l);
    298332}
     
    315349NOTE:   this procedure is only useful in characteristic zero, because otherwise
    316350        there is no appropriate ordering of the leading coefficients
    317 "{
     351"
     352{
    318353 poly verbrecher=0;
    319354 intvec leitexp;
     
    337372         [1]: Hamburger-Noether matrix
    338373            each row contains the coefficients of the corresponding line of the
    339             Hamburger-Noether extension (HNE). The end of the line is marked in
     374            Hamburger-Noether expansion (HNE). The end of the line is marked in
    340375            the matrix as the first ring variable (usually x)
    341376         [2]: intvec indicating the length of lines of the HNE
    342377         [3]: int:
    343            0  if the 1st ring variable was transverse (with respect to f),
     378           0  if the 1st ring variable was transversal (with respect to f),
    344379           1  if the variables were changed at the beginning of the computation
    345380           -1 if an error has occurred
     
    352387         n columns. Otherwise the number of columns will be chosen minimal s.t.
    353388         the matrix contains all necessary information (i.e. all lines of the
    354          HNE but the last (which is in general infinite) appear).
     389         HNE but the last (which is in general infinite) have place).
    355390         If n is negative, the algorithm is stopped as soon as possible, i.e.
    356391         the information computed is enough for 'invariants', but the HN-matrix
     
    369404EXAMPLES: example develop; shows an example
    370405          example param;   shows an example for using the 2nd parameter
    371 "{
     406"
     407{
    372408 //--------- Abfangen unzulaessiger Ringe: 1) nur eine Unbestimmte ------------
    373409 poly f=#[1];
     
    390426
    391427 if (charstr(basering)=="real") {
    392   "The algorithm doesn't work with 'real' as coefficient field.";
     428  " The algorithm doesn't work with 'real' as coefficient field.";
    393429                     // denn : map from characteristic -1 to -1 not implemented
    394430  return(return_error);
     
    400436    int primit=(tststr==string(char(basering)));
    401437    if (primit!=0) {
    402       "such extensions of Z/p are not implemented.",
    403       "Please try (p^k,a) as ground field.";
     438      " Such extensions of Z/p are not implemented.";
     439      " Please try (p^k,a) as ground field or use `reddevelop'.";
    404440      return(return_error);
    405441    }
     
    422458 map m=altring,x,y;
    423459 if (ringwechsel) { poly f=m(f); }
    424  if (defined(Protokoll))
     460 if (defined(HNDebugOn))
    425461 {"received polynomial: ",f,", where x =",namex,", y =",namey;}
    426462
     
    515551        if (str<>"c") {
    516552          setring altring;kill guenstig;kill zweitring;
    517           if(system("with","Namespaces")) { kill Top::guenstig; }
    518553          return(return_error);}
    519554        else { "if the algorithm doesn't terminate, you were wrong...";}
     
    522557    nm = getnm(f);             // N,M haben sich evtl. veraendert
    523558    N = nm[1]; M = nm[2];      // Berechne Schnittpunkte Newtonpoly mit Achsen
    524     if (defined(Protokoll)) {"I continue with the polynomial",f; }
     559    if (defined(HNDebugOn)) {"I continue with the polynomial",f; }
    525560   }
    526561   else {
     
    537572    setring altring;
    538573    kill guenstig;
    539     if(system("with","Namespaces")) { kill Top::guenstig; }
    540574    return(return_error);}
    541575   if (test_sqr != f) {
     
    548582    nm = getnm(f);              // N,M haben sich veraendert
    549583    N = nm[1]; M = nm[2];       // Berechne Schnittpunkte Newtonpoly mit Achsen
    550     if (defined(Protokoll)) {"I continue with the polynomial",f; }
     584    if (defined(HNDebugOn)) {"I continue with the polynomial",f; }
    551585   }
    552586
     
    555589  if (N==0) {
    556590    " Sorry. The remaining polynomial is a unit in the power series ring...";
    557     if(system("with","Namespaces")) { kill Top::guenstig; }
    558591    setring altring;kill guenstig;return(return_error);
    559592  }
     
    564597    M = M+N; N = M-N; M = M-N;  // M, N auch vertauschen
    565598  }
    566   if (defined(Protokoll)) {
     599  if (defined(HNDebugOn)) {
    567600   if (getauscht) {"x<->y were exchanged; poly is now ",f;}
    568601   else           {"x , y were not exchanged";}
     
    580613    " The given polynomial is not irreducible";
    581614    kill guenstig;
    582     if(system("with","Namespaces")) { kill Top::guenstig; }
    583615    setring altring;
    584616    return(return_error);       // Abbruch der Prozedur!
     
    595627    if (p==0) {
    596628      delta = koeff(f,M/ e,N - N/ e) / (-1*e*c);
    597       if (defined(Protokoll)) {"quasihomogeneous leading form:",
     629      if (defined(HNDebugOn)) {"quasihomogeneous leading form:",
    598630         leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?";}
    599631      if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e)
    600         { " The given Polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
     632        { " The given polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
    601633    }
    602634    else {                     // p!=0
    603635      if (e%p != 0) {
    604636        delta = koeff(f,M/ e,N - N/ e) / (-1*e*c);
    605         if (defined(Protokoll)) {"quasihomogeneous leading form:",
     637        if (defined(HNDebugOn)) {"quasihomogeneous leading form:",
    606638           leit(f,N,M)," = ",c,"* (y -",delta,"* x^"+string(M/ e)+")^",e," ?";}
    607639        if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e)
    608          { " The given Polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
     640         { " The given polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
    609641      }
    610642
     
    612644        eps = e;
    613645        for (l = 0; eps%p == 0; l=l+1) { eps=eps/ p;}
    614         if (defined(Protokoll)) {e," -> ",eps,"*",p,"^",l;}
     646        if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l;}
    615647        delta = koeff(f,(M/ e)*p^l,(N/ e)*p^l*(eps-1)) / (-1*eps*c);
    616648
     
    632664        }
    633665
    634         if (defined(Protokoll)) {"quasihomogeneous leading form:",
     666        if (defined(HNDebugOn)) {"quasihomogeneous leading form:",
    635667          leit(f,N,M)," = ",c,"* (y^"+string(N/ e),"-",delta,"* x^"
    636668          +string(M/ e)+")^",e,"  ?";}
    637669        if (leit(f,N,M) != c*(y^(N/ e) - delta*x^(M/ e))^e)
    638           { " The given Polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
     670          { " The given polynomial is reducible !"; Abbruch=1; Ausgabe=1;}
    639671      }
    640672    }
     
    643675      "a("+string(zeile)+","+string(Q)+") =",delta;
    644676      a(zeile)[Q]=delta;
    645       if (defined(Protokoll)) {"transformed polynomial: ",f;}}
     677      if (defined(HNDebugOn)) {"transformed polynomial: ",f;}}
    646678
    647679      nm=getnm(f); N=nm[1]; M=nm[2];        // Neuberechnung des Newtonpolygons
     
    655687                                     // Anpassung der Sp.zahl der HNE-Matrix
    656688    f = T_Transform(f,Q,N);
    657     if (defined(Protokoll)) {"transformed polynomial: ",f;}
     689    if (defined(HNDebugOn)) {"transformed polynomial: ",f;}
    658690    zeile=zeile+1;
    659691 //------------ Bereitstellung von Speicherplatz fuer eine neue Zeile: --------
     
    672704  }
    673705  else {if (M<N) {"Something has gone wrong: M<N";}}
    674   if(defined(Protokoll)) {"new M,N:",M,N;}
     706  if(defined(HNDebugOn)) {"new M,N:",M,N;}
    675707
    676708 //----------------- Abbruchbedingungen fuer die Schleife: --------------------
     
    709741 }
    710742
    711  if(system("with","Namespaces")) { kill Top::guenstig; }
    712743 kill guenstig;
    713744 if (Ausgabe == 0) { return(list(amat,hqs,getauscht,f));}
     
    731762  hne[2]; pause;
    732763  param(hne);
    733   // returns the parametrisation x(t)= -t14+O(t21), y(t)= -3t98+O(t105)
     764  // returns the parametrization x(t)= -t14+O(t21), y(t)= -3t98+O(t105)
    734765  // (the term -t109 in y may have a wrong coefficient)
    735766  displayHNE(hne);
    736767}
    737768
     769///////////////////////////////////////////////////////////////////////////////
     770//               procedures to extract information out of HNE                //
    738771///////////////////////////////////////////////////////////////////////////////
    739772
     
    741774"USAGE:  param(l) takes the output of develop(f)
    742775        (list l (matrix m, intvec v, int s[,poly g]))
    743         and gives a parametrisation for f; the first variable of the active
     776        and gives a parametrization for f; the first variable of the active
    744777        ring is chosen as indefinite. If the ring contains more than
    745778        two variables, the 3rd variable is chosen (remember that develop takes
    746779        the first two variables and therefore the other vars should be unused)
    747780RETURN: ideal of two polynomials: if the HNE was finite, f(param[1],param[2])
    748         will be  zero. If not, the real parametrisation will be
     781        will be  zero. If not, the real parametrization will be
    749782        two power series; then param will return a truncation of these series.
    750 EXAMPLE: example param;      shows an example
     783EXAMPLE: example param;     shows an example
    751784         example develop;   shows another example
    752 
    753 "{
     785"
     786{
    754787 //-------------------------- Initialisierungen -------------------------------
    755788 matrix m=#[1];
     
    850883"USAGE:  invariants(l) takes the output of develop(f)
    851884        (list l (matrix m, intvec v, int s[,poly g]))
    852         and computes some invariants:
     885        and computes the following irreducible curve invariants:
    853886RETURN:  a list, if l contains a valid HNE:
    854887    - invariants(l)[1]: intvec         (characteristic exponents)
    855     - invariants(1)[2],[3]: 2 x intvec (puiseux pairs, 1st and 2nd components)
    856     - invariants(l)[4]: int            (degree of the conductor)
    857     - invariants(l)[5]: intvec         (sequence of multiplicities)
     888    - invariants(l)[2]: intvec         (generators of the semigroup)
     889    - invariants(l)[3],[4]: 2 x intvec (Puiseux pairs, 1st and 2nd components)
     890    - invariants(l)[5]: int            (degree of the conductor)
     891    - invariants(l)[6]: intvec         (sequence of multiplicities)
    858892         an empty list, if an error occurred in the procedure develop
    859893EXAMPLE: example invariants; shows an example
    860 "{
     894"
     895{
    861896 //-------------------------- Initialisierungen -------------------------------
    862897 matrix m=#[1];
     
    868903   return(ergebnis);
    869904 }
    870  intvec beta,s,svorl,ordnung,multips,multseq,mpuiseux,npuiseux;
     905 intvec beta,s,svorl,ordnung,multseq,mpuiseux,npuiseux,halbgr;
    871906 int genus,zeile,i,j,k,summe,conductor,ggT;
    872907 string Ausgabe;
     
    912947 }
    913948 conductor=summe;
     949 //------------------- Erzeuger der Halbgruppe: -------------------------------
     950 halbgr=puiseux2generators(mpuiseux,npuiseux);
     951
    914952 //------------------- Multiplizitaetensequenz: -------------------------------
    915953 k=1;
    916  multips=multiplicities(#);
    917954 for (i=1; i<size(v); i++) {
    918955   for (j=1; j<=v[i]; j++) {
    919      multseq[k]=multips[i];
     956     multseq[k]=ordnung[i];
    920957     k++;
    921958 }}
    922959 multseq[k]=1;
    923960 //------------------------- Rueckgabe ----------------------------------------
    924  ergebnis=beta,mpuiseux,npuiseux,conductor,multseq;
     961 ergebnis=beta,halbgr,mpuiseux,npuiseux,conductor,multseq;
    925962 return(ergebnis);
    926963}
     
    931968 list erg=invariants(hne);
    932969 erg[1];                   // the characteristic exponents
    933  erg[2],erg[3];            // the puiseux pairs in packed form
    934  erg[4] / 2;               // the delta-invariant
    935  erg[5];                   // the sequence of multiplicities
     970 erg[2];                   // the generators of the semigroup of values
     971 erg[3],erg[4];            // the Puiseux pairs in packed form
     972 erg[5] / 2;               // the delta-invariant
     973 erg[6];                   // the sequence of multiplicities
    936974                           // To display the invariants more 'nicely':
    937975 displayInvariants(hne);
     
    948986RETURN:  nothing
    949987EXAMPLE: example displayInvariants;  shows an example
    950 "{
     988"
     989{
    951990 int i,j,k,mul;
    952991 string Ausgabe;
     
    959998   if (size(ergebnis)!=0) {
    960999    " characteristic exponents  :",ergebnis[1];
     1000    " generators of semigroup   :",ergebnis[2];
    9611001    if (size(ergebnis[1])>1) {
    962      for (i=1; i<=size(ergebnis[2]); i++) {
    963        Ausgabe=Ausgabe+"("+string(ergebnis[2][i])+","
    964        +string(ergebnis[3][i])+")";
     1002     for (i=1; i<=size(ergebnis[3]); i++) {
     1003       Ausgabe=Ausgabe+"("+string(ergebnis[3][i])+","
     1004       +string(ergebnis[4][i])+")";
    9651005    }}
    966     " puiseux pairs             :",Ausgabe;
    967     " degree of the conductor   :",ergebnis[4];
    968     " delta invariant           :",ergebnis[4]/2;
    969     " generators of semigroup   :",puiseux2generators(ergebnis[2],ergebnis[3]);
    970     " sequence of multiplicities:",ergebnis[5];
     1006    " Puiseux pairs             :",Ausgabe;
     1007    " degree of the conductor   :",ergebnis[5];
     1008    " delta invariant           :",ergebnis[5]/2;
     1009    " sequence of multiplicities:",ergebnis[6];
    9711010 }}
    9721011 //-------------------- Ausgabe aller Zweige ----------------------------------
     
    9761015    " --- invariants of branch number",j,": ---";
    9771016    " characteristic exponents  :",ergebnis[1];
     1017    " generators of semigroup   :",ergebnis[2];
    9781018    Ausgabe="";
    9791019    if (size(ergebnis[1])>1) {
    980      for (i=1; i<=size(ergebnis[2]); i++) {
    981        Ausgabe=Ausgabe+"("+string(ergebnis[2][i])+","
    982        +string(ergebnis[3][i])+")";
     1020     for (i=1; i<=size(ergebnis[3]); i++) {
     1021       Ausgabe=Ausgabe+"("+string(ergebnis[3][i])+","
     1022       +string(ergebnis[4][i])+")";
    9831023    }}
    984     " puiseux pairs             :",Ausgabe;
    985     " degree of the conductor   :",ergebnis[4];
    986     " delta invariant           :",ergebnis[4]/2;
    987     " generators of semigroup   :",puiseux2generators(ergebnis[2],ergebnis[3]);
    988     " sequence of multiplicities:",ergebnis[5];
     1024    " Puiseux pairs             :",Ausgabe;
     1025    " degree of the conductor   :",ergebnis[5];
     1026    " delta invariant           :",ergebnis[5]/2;
     1027    " sequence of multiplicities:",ergebnis[6];
    9891028    "";
    9901029  }
     
    10301069         sive blowing up of the curve corresponding to f
    10311070EXAMPLE: example multiplicities;  shows an example
    1032 "{
     1071"
     1072{
    10331073 matrix m=#[1];
    10341074 intvec v=#[2];
     
    10651105proc puiseux2generators (intvec m, intvec n)
    10661106"USAGE:   puiseux2generators (m,n);
    1067          m,n intvecs with 1st resp. 2nd components of puiseux pairs
     1107         m,n intvecs with 1st resp. 2nd components of Puiseux pairs
    10681108RETURN:  intvec of the generators of the semigroup of values
    10691109EXAMPLE: example puiseux2generators;  shows an example
    1070 "{
     1110"
     1111{
    10711112 intvec beta;
    10721113 int q=1;
     
    10851126example
    10861127{ "EXAMPLE:"; echo = 2;
    1087   // take (3,2),(7,2),(15,2),(31,2),(63,2),(127,2) as puiseux pairs:
     1128  // take (3,2),(7,2),(15,2),(31,2),(63,2),(127,2) as Puiseux pairs:
    10881129  puiseux2generators(intvec(3,7,15,31,63,127),intvec(2,2,2,2,2,2));
    1089 }
    1090 ///////////////////////////////////////////////////////////////////////////////
    1091 
    1092 proc generators
    1093 "USAGE:   generators(l); takes the output of develop(f)
    1094          (list l (matrix m, intvec v, int s[,poly g]))
    1095 RETURN:  intvec of the generators of the semigroup of values
    1096 EXAMPLE: example generators;  shows an example
    1097 "
    1098 {
    1099  list inv=invariants(#);
    1100  return(puiseux2generators(inv[2..3]));
    1101 }
    1102 example
    1103 { "EXAMPLE:"; echo = 2;
    1104   ring r=0,(x,y),dp;
    1105   poly f=x15-21x14+8x13y-6x13-16x12y+20x11y2-1x12+8x11y-36x10y2+24x9y3+4x9y2
    1106          -16x8y3+26x7y4-6x6y4+8x5y5+4x3y6-1y8;
    1107   list hne=develop(f);
    1108   generators(hne);
    11091130}
    11101131///////////////////////////////////////////////////////////////////////////////
     
    11351156 //--------- die jeweils erste Zeile gehoert zum gleichen Parameter -----------
    11361157   unterschied=0;
    1137  //h1[1],h2[1];size(h1),size(h2);
    11381158   for (s=1; (h1[s]==h2[s]) && (s<size(h1)) && (s<size(h2))
    11391159              && (unterschied==0); s++) {
     
    11751195         matrix ma2[1][j]=a2[s,1..j];          // Teil (der evtl. y's enth.)
    11761196       }
    1177  // print(ma1);print(ma2);
    11781197       for (i=1; (ma1[1,i]==ma2[1,i]) && (i<j) && (ma1[1,i]!=var(2)); i++) {;}
    11791198       if (ma1[1,i]==ma2[1,i]) {
     
    12271246///////////////////////////////////////////////////////////////////////////////
    12281247
     1248proc multsequence
     1249"USAGE:   multsequence(l);
     1250         l is the output of either develop(f) or reddevelop(f)
     1251RETURN:  - if l=develop(f) or l=reddevelop(f)[i] :
     1252           intvec of the sequence of multiplicities of the curve
     1253           resp. of the i-th branch (the same as invariants(l)[6]; )
     1254
     1255         - if l=reddevelop(f) : list of two integer matrices:
     1256           multsequence(l)[1][i,*] contains the multiplicities of the branches
     1257           at their infinitely near point of 0 in its (i-1) order neighbour-
     1258           hood (i.e. i=1: multiplicity of the branches themselves,
     1259                      i=2: multipl. of their 1st quadratic transformed etc.,
     1260                 or to say it in another way: multsequence(l)[1][*,j] is the
     1261                 sequence of multiplicities of the j-th branch).
     1262           multsequence(l)[2][i,*] contains the information which of these
     1263           infinitely near points coincide.
     1264NOTE:    The order of elements of the list obtained from reddevelop must not
     1265         be changed (because then the coincident infinitely near points
     1266         couldn't be grouped together, cf. meaning of 2nd intmat in example).
     1267         Hence it is not wise to compute the HNE of several polynomials
     1268         separately, put them into a list l and call multsequence(l).
     1269
     1270         Use displayMultsequence to produce a better readable output for
     1271         reducible curves on the screen
     1272EXAMPLE: example multsequence;  shows an example
     1273"
     1274{
     1275 //-- entferne ueberfluessige Daten zur Erhoehung der Rechengeschwindigkeit: --
     1276 #=stripHNE(#);
     1277 int k,i,j;
     1278 //----------------- Multiplizitaetensequenz eines Zweiges --------------------
     1279 if (typeof(#[1])=="matrix") {
     1280  intvec v=#[2];
     1281  list ergebnis;
     1282  if (#[3]==-1) {
     1283    "An error has occurred in develop, so there is no HNE.";
     1284   return(intvec(0));
     1285  }
     1286  intvec multips,multseq;
     1287  multips=multiplicities(#);
     1288  k=1;
     1289  for (i=1; i<size(v); i++) {
     1290    for (j=1; j<=v[i]; j++) {
     1291      multseq[k]=multips[i];
     1292      k++;
     1293  }}
     1294  multseq[k]=1;
     1295  return(multseq);
     1296 }
     1297 //---------------------------- mehrere Zweige --------------------------------
     1298 else {
     1299   list HNEs=#;
     1300   int anzahl=size(HNEs);
     1301   int maxlength=0;
     1302   int bisher;
     1303   intvec schnitt,ones;
     1304   ones[anzahl]=0;
     1305   ones=ones+1;                  // = 1,1,...,1
     1306   for (i=1; i<anzahl; i++) {
     1307     schnitt[i]=separateHNE(HNEs[i],HNEs[i+1]);
     1308     j=size(multsequence(HNEs[i]));
     1309     maxlength=maxlength*(j < maxlength) + j*(j >= maxlength);
     1310     maxlength=maxlength*(schnitt[i]+1 < maxlength)
     1311               + (schnitt[i]+1)*(schnitt[i]+1 >= maxlength);
     1312   }
     1313   j=size(multsequence(HNEs[anzahl]));
     1314   maxlength=maxlength*(j < maxlength) + j*(j >= maxlength);
     1315
     1316//-------------- Konstruktion der ersten zu berechnenden Matrix ---------------
     1317   intmat allmults[maxlength][anzahl];
     1318   for (i=1; i<=maxlength; i++)  { allmults[i,1..anzahl]=ones[1..anzahl]; }
     1319   for (i=1; i<=anzahl; i++) {
     1320     ones=multsequence(HNEs[i]);
     1321     allmults[1..size(ones),i]=ones[1..size(ones)];
     1322   }
     1323//---------------------- Konstruktion der zweiten Matrix ----------------------
     1324   intmat separate[maxlength][anzahl];
     1325   for (i=1; i<=maxlength; i++) {
     1326     k=1;
     1327     bisher=0;
     1328     if (anzahl==1) { separate[i,1]=1; }
     1329     for (j=1; j<anzahl; j++)   {
     1330       if (schnitt[j]<i) {
     1331         separate[i,k]=j-bisher;
     1332         bisher=j;
     1333         k++;
     1334       }
     1335       separate[i,k]=anzahl-bisher;
     1336     }
     1337   }
     1338  return(list(allmults,separate));
     1339 }
     1340}
     1341example
     1342{
     1343  if (nameof(basering)=="HNEring") {
     1344   def rettering=HNEring;
     1345   kill HNEring;
     1346  }
     1347  "EXAMPLE:"; echo = 2;
     1348  ring r=0,(x,y),dp;
     1349  list hne=reddevelop((x6-y10)*(x+y2-y3)*(x+y2+y3));
     1350
     1351  multsequence(hne[1]),"  |  ",multsequence(hne[2]),"  |  ",
     1352  multsequence(hne[3]),"  |  ",multsequence(hne[4]);
     1353  multsequence(hne);
     1354  // The meaning of the entries of the 2nd matrix is as follows:
     1355  displayMultsequence(hne);
     1356  kill HNEring,r;
     1357  echo = 0;
     1358  if (defined(rettering)) { // wenn aktueller Ring vor Aufruf von example
     1359   setring rettering;       // HNEring war, muss dieser erst wieder restauriert
     1360   def HNEring=rettering;   // werden
     1361   export HNEring;
     1362  }
     1363}
     1364///////////////////////////////////////////////////////////////////////////////
     1365
     1366proc displayMultsequence
     1367"USAGE:   displayMultsequence(l);
     1368         l is the output of either develop(f) or reddevelop(f)
     1369RETURN:  nothing
     1370DISPLAY: the sequence of multiplicities:
     1371         if l=develop(f) or l=reddevelop(f)[i] : just the sequence a,b,c,...,1
     1372         if l=reddevelop(f) : a sequence of the following form:
     1373
     1374         [(a_1,....,b_1,....,c_1)],
     1375         [(a_2,...),...,(...,c_2)],
     1376            ...................
     1377         [(a_n),(b_n),.....,(c_n)]
     1378
     1379         with a_1,...,a_n the sequence of multiplicities of the 1st branch
     1380         [...] the multiplicities of the j-th transformed of all branches
     1381         (...) the multiplicities of those branches meeting in the same
     1382               infinitely near point
     1383NOTE:    The same restrictions for l as in `multsequence' apply.
     1384EXAMPLE: example displayMultsequence;  shows an example
     1385"
     1386{
     1387 //-- entferne ueberfluessige Daten zur Erhoehung der Rechengeschwindigkeit: --
     1388 #=stripHNE(#);
     1389 //----------------- Multiplizitaetensequenz eines Zweiges --------------------
     1390 if (typeof(#[1])=="matrix") {
     1391   if (#[3]==-1) {
     1392     "An error has occurred in develop, so there is no HNE.";
     1393   }
     1394   else {
     1395     "The sequence of multiplicities is  ",multiplicities(#);
     1396 }}
     1397 //---------------------------- mehrere Zweige --------------------------------
     1398 else {
     1399   list multips=multsequence(#);
     1400   int i,j,k,l;
     1401   string output;
     1402   for (i=1; i<=nrows(multips[1]); i++) {
     1403     output="[";
     1404     k=1;
     1405     for (l=1; k<=ncols(multips[1]); l++) {
     1406       output=output+"(";
     1407       for (j=1; j<=multips[2][i,l]; j++) {
     1408         output=output+string(multips[1][i,k]);
     1409         k++;
     1410         if (j<multips[2][i,l]) { output=output+","; }
     1411       }
     1412       output=output+")";
     1413       if ((k-1) < ncols(multips[1])) { output=output+","; }
     1414      }
     1415     output=output+"]";
     1416     if (i<nrows(multips[1])) { output=output+","; }
     1417     output;
     1418   }
     1419 }
     1420}
     1421example
     1422{ // example multsequence; geht wegen echo nicht (muesste auf 3 gesetzt werden)
     1423  if (nameof(basering)=="HNEring") {
     1424   def rettering=HNEring;
     1425   kill HNEring;
     1426  }
     1427  "EXAMPLE:"; echo = 2;
     1428  ring r=0,(x,y),dp;
     1429  list hne=reddevelop((x6-y10)*(x+y2-y3)*(x+y2+y3));
     1430
     1431  displayMultsequence(hne[1]);
     1432  displayMultsequence(hne);
     1433  kill HNEring,r;
     1434  echo = 0;
     1435  if (defined(rettering)) { // wenn aktueller Ring vor Aufruf von example
     1436   setring rettering;       // HNEring war, muss dieser erst wieder restauriert
     1437   def HNEring=rettering;   // werden
     1438   export HNEring;
     1439  }
     1440}
     1441///////////////////////////////////////////////////////////////////////////////
     1442
     1443proc separateHNE (list hn1,list hn2)
     1444"USAGE:    separateHNE(hne1,hne2);  list hne1,hne2: output of develop
     1445RETURN:   number of quadratic transformations needed to separate both curves
     1446EXAMPLE:  example separateHNE;  shows an example
     1447"
     1448{
     1449 int i,j,s,unterschied,separated;
     1450 matrix a1=hn1[1];
     1451 matrix a2=hn2[1];
     1452 intvec h1=hn1[2];
     1453 intvec h2=hn2[2];
     1454 if (hn1[3]!=hn2[3]) {
     1455 //-- die jeweils erste Zeile von hn1,hn2 gehoert zu verschiedenen Parametern -
     1456 //---------------- d.h. beide Kurven schneiden sich transversal --------------
     1457   separated=1;
     1458 }
     1459 else {
     1460 //--------- die jeweils erste Zeile gehoert zum gleichen Parameter -----------
     1461   unterschied=0;
     1462   for (s=1; (h1[s]==h2[s]) && (s<size(h1)) && (s<size(h2))
     1463              && (unterschied==0); s++) {
     1464     for (i=1; (a1[s,i]==a2[s,i]) && (i<=h1[s]); i++) {;}
     1465     if (i<=h1[s]) {
     1466       unterschied=1;
     1467       s--;                    // um s++ am Schleifenende wieder auszugleichen
     1468     }
     1469   }
     1470   if (unterschied==0) {
     1471     if ((s<size(h1)) && (s<size(h2))) {
     1472       for (i=1; (a1[s,i]==a2[s,i]) && (i<=h1[s]) && (i<=h2[s]); i++) {;}
     1473     }
     1474     else {
     1475 //-------------- Sonderfall: Unterschied in letzter Zeile suchen -------------
     1476 // Beachte: Es koennen undefinierte Stellen auftreten, bei abbrechender HNE
     1477 // muss die Ende-Markierung weg, h_[r] ist unendlich, die Matrix muss mit
     1478 // Nullen fortgesetzt gedacht werden
     1479 //----------------------------------------------------------------------------
     1480       if (ncols(a1)>ncols(a2)) { j=ncols(a1); }
     1481       else                     { j=ncols(a2); }
     1482       unterschied=0;
     1483       if ((h1[s]>0) && (s==size(h1))) {
     1484         a1[s,h1[s]+1]=0;
     1485         if (ncols(a1)<=ncols(a2)) { unterschied=1; }
     1486       }
     1487       if ((h2[s]>0) && (s==size(h2))) {
     1488         a2[s,h2[s]+1]=0;
     1489         if (ncols(a2)<=ncols(a1)) { unterschied=1; }
     1490       }
     1491       if (unterschied==1) {                   // mind. eine HNE war endlich
     1492         matrix ma1[1][j]=a1[s,1..ncols(a1)];  // und bedarf der Fortsetzung
     1493         matrix ma2[1][j]=a2[s,1..ncols(a2)];  // mit Nullen
     1494       }
     1495       else {
     1496         if (ncols(a1)>ncols(a2)) { j=ncols(a2); }
     1497         else                     { j=ncols(a1); }
     1498         matrix ma1[1][j]=a1[s,1..j];          // Beschr. auf vergleichbaren
     1499         matrix ma2[1][j]=a2[s,1..j];          // Teil (der evtl. y's enth.)
     1500       }
     1501       for (i=1; (ma1[1,i]==ma2[1,i]) && (i<j) && (ma1[1,i]!=var(2)); i++) {;}
     1502       if (ma1[1,i]==ma2[1,i]) {
     1503         "//** The two HNE's are identical!";
     1504         "//** You have either tried to compare a branch with itself,";
     1505         "//** or the two branches have been developed separately.";
     1506         "//   In the latter case use `extdevelop' to extend the HNE's until",
     1507         "they differ.";
     1508         return(-1);
     1509       }
     1510       if ((ma1[1,i]==var(2)) || (ma2[1,i]==var(2))) {
     1511         "//** The two HNE's are (so far) identical. This is because they",
     1512         "have been";
     1513         "//** computed separately. I need more data; use `extdevelop' to",
     1514         "extend them,";
     1515         if (ma1[1,i]==var(2)) {"//** at least the first one.";}
     1516         else                  {"//** at least the second one.";}
     1517         return(-1);
     1518       }
     1519     }
     1520   }
     1521   separated=i;
     1522   for (j=1; j<s; j++) { separated=separated+h1[j]; }
     1523 }
     1524 return(separated);
     1525}
     1526example
     1527{ "EXAMPLE:"; echo = 2;
     1528  ring r=0,(x,y),dp;
     1529  list hne1=develop(x);
     1530  list hne2=develop(x+y);
     1531  list hne3=develop(x+y2);
     1532  separateHNE(hne1,hne2);  // two transversal lines
     1533  separateHNE(hne1,hne3);  // one quadratic transformation gives 1st example
     1534}
     1535///////////////////////////////////////////////////////////////////////////////
     1536
    12291537proc displayHNE(list ldev,list #)
    12301538"USAGE:   displayHNE(ldev,[,n]); ldev=list
     
    12411549     represented in the HN-matrix as 'x'
    12421550         the 1st line (HNE[1]) means that y==[]*z(0)^1+... ,
    1243          the 2nd line (HNE[2]) means that x==[]*z(1)^1+...
     1551         the 2nd line (HNE[2]) means that x==[]*z(1)^2+...
    12441552     so you can see which indeterminate corresponds to which line
    12451553     (it's also possible that x corresponds to the 1st line and y to the 2nd)
     
    12681576   return(ideal(0));
    12691577 }
     1578 def altring=basering;
    12701579 if (parstr(basering)!="") {
    12711580   if (charstr(basering)!=string(char(basering))+","+parstr(basering)) {
    1272      "Sorry -- not implemented for rings of type (p^k,a),...";
    1273      return(ideal(0));
    1274    }
    1275  }
    1276  def altring=basering;
    1277  ring dazu=char(altring),z(0..size(v)-1),ls;
     1581     execute
     1582       "ring dazu=("+charstr(basering)+"),z(0.."+string(size(v)-1)+"),ls;";
     1583   }
     1584   else { ring dazu=char(altring),z(0..size(v)-1),ls; }
     1585 }
     1586 else   { ring dazu=char(altring),z(0..size(v)-1),ls; }
    12781587 def displayring=dazu+altring;
    12791588 setring displayring;
     
    13241633///////////////////////////////////////////////////////////////////////////////
    13251634
    1326 
    1327 proc newtonhoehne (poly f)
    1328 "USAGE:   newtonhoehne(f);   f poly
    1329 ASSUME:  basering = ...,(x,y),ds  or ls
    1330 RETURN:  list of intvec(x,y) of coordinates of the newtonpolygon of f
    1331 NOTE:    This proc is only available in versions of Singular that know the
    1332          command  system(\"newton\",f);  f poly
    1333 "
    1334 {
    1335  intvec nm = getnm(f);
    1336  if ((nm[1]>0) && (nm[2]>0)) { f=jet(f,nm[1]*nm[2],nm); }
    1337  list erg=system("newton",f);
    1338  int i; list Ausgabe;
    1339  for (i=1; i<=size(erg); i++) { Ausgabe[i]=leadexp(erg[i]); }
    1340  return(Ausgabe);
    1341 }
     1635// proc newtonhoehne (poly f)
     1636// USAGE:   newtonhoehne(f);   f poly
     1637// ASSUME:  basering = ...,(x,y),ds  or ls
     1638// RETURN:  list of intvec(x,y) of coordinates of the newtonpolygon of f
     1639// NOTE:    This proc is only available in versions of Singular that know the
     1640//         command  system("newton",f);  f poly
     1641// {
     1642// intvec nm = getnm(f);
     1643//  if ((nm[1]>0) && (nm[2]>0)) { f=jet(f,nm[1]*nm[2],nm); }
     1644//  list erg=system("newton",f);
     1645//  int i; list Ausgabe;
     1646//  for (i=1; i<=size(erg); i++) { Ausgabe[i]=leadexp(erg[i]); }
     1647// return(Ausgabe);
     1648// }
    13421649///////////////////////////////////////////////////////////////////////////////
    13431650
    13441651proc newtonpoly (poly f)
    13451652"USAGE:   newtonpoly(f);   f poly
    1346 RETURN:  list of intvec(x,y) of coordinates of the newtonpolygon of f
     1653RETURN:  list of intvec(x,y) of coordinates of the Newton polygon of f
    13471654NOTE: There are many assumptions: (to improve speed)
    13481655      - The basering must be ...,(x,y),ls
     
    13531660 intvec A=(0,ord(subst(f,x,0)));
    13541661 intvec B=(ord(subst(f,y,0)),0);
    1355  intvec C,D,H; list L;
     1662 intvec C,H; list L;
    13561663 int abbruch,i;
    13571664 poly hilf;
     
    13791686
    13801687   H=leadexp(xytausch(hilf));
    1381    D=H[2],H[1];
     1688   A=H[2],H[1];
    13821689
    13831690 // die Alternative waere ein Ringwechsel nach ..,(y,x),ds gewesen
    1384  // D ist der naechste Eckpunkt (unterster Punkt auf Geraden durch A,C)
    1385 
    1386    L[i]=D;
    1387    A=D;
    1388  //----------------- alle Monome auf oder unterhalb DB raus -------------------
    1389    f=jet(f,D[2]*B[1]-1,intvec(D[2],B[1]-D[1]));
     1691 // A_neu ist der naechste Eckpunkt (unterster Punkt auf Geraden durch A,C)
     1692
     1693   L[i]=A;
     1694 //----------------- alle Monome auf oder unterhalb AB raus -------------------
     1695   f=jet(f,A[2]*B[1]-1,intvec(A[2],B[1]-A[1]));
    13901696 }
    13911697 L[i]=B;
     
    14071713proc charPoly(poly f, int M, int N)
    14081714"USAGE:  charPoly(f,M,N);  f poly in x,y,  M,N int: length and height
    1409                           of newtonpolygon of f, which has to be only one line
     1715                          of Newton polygon of f, which has to be only one line
    14101716RETURN:  the characteristic polynomial of f
    14111717EXAMPLE: example charPoly;  shows an example
     
    14851791///////////////////////////////////////////////////////////////////////////////
    14861792proc redleit (poly f,intvec S, intvec E)
    1487 "USAGE:   redleit(f,S,E); f poly,
    1488          S,E intvec(x,y): two different points on a line in the newtonpolygon
    1489          of f (e.g. the starting and the ending point)
    1490 RETURN:  poly g: all monomials of f which lay on that line
    1491 NOTE:    It is not checked whether S and E really belong to the newtonpolygon!
     1793"USAGE:   redleit(f,S,E);  f poly, S,E intvec(x,y)
     1794         S,E are two different points on a line in the Newton diagram of f
     1795RETURN:  poly g: all monomials of f which lie on or below that line
     1796NOTE:    The main purpose is that if the line defined by S and E is part of the
     1797         Newton polygon, the result is the quasihomogeneous leading form of f
     1798         wrt. that line.
    14921799EXAMPLE: example redleit;  shows an example
    14931800"
     
    15061813proc extdevelop (list l, int Exaktheit)
    15071814"USAGE:   extdevelop(l,n);  list l (matrix m, intvec v, int s, poly g), int n
    1508          takes the output l of develop(f) ( or extdevelop(L,n),
     1815         takes the output l of develop(f) ( or extdevelop(L,N),
    15091816         or one entry of the output of reddevelop(f))  and
    15101817RETURN:  an extension of the Hamburger-Noether development of f in the form
     
    15141821         Thus if f is irreducible, extdevelop(develop(f),n);
    15151822         (in most cases) will produce the same result as develop(f,n).
    1516          Type  help develop;  for more details
     1823         Type  help develop;  for more details.
     1824NOTE:    If the matrix m of l has N columns, the exactness of
     1825         param(extdevelop(l,n))  will be increased by at least (n-N) more
     1826         significant monomials compared to param(l).
    15171827EXAMPLE: example extdevelop;  shows an example
    15181828"
     
    15441854 }
    15451855 int zeile=nrows(m);
    1546  int spalten,i,lastside;
     1856 int spalten,i,M;
    15471857 ideal lastrow=m[zeile,1..Q];
    15481858 int ringwechsel=(varstr(basering)!="x,y") or (ordstr(basering)!="ls(2),C");
     
    15511861 if (ringwechsel) {
    15521862  def altring = basering;
    1553   int p = char(basering); // Ringcharakteristik
     1863  int p = char(basering);
    15541864  if (charstr(basering)!=string(p)) {
    15551865     string tststr=charstr(basering);
     
    15811891 }
    15821892 else { ideal a=lastrow; }
    1583  list Newton;
     1893 list Newton=newtonpoly(f);
     1894 int M1=Newton[size(Newton)-1][1];     // konstant
    15841895 number delta;
     1896 if (Newton[size(Newton)-1][2]!=1) {
     1897    " *** The transformed polynomial was not valid!!";}
     1898 else {
    15851899 //--------------------- Fortsetzung der HNE ----------------------------------
    1586  while (Q<Exaktheit) {
    1587   Newton=newtonpoly(f);
    1588   lastside=size(Newton)-1;
    1589   if (Newton[lastside][2]!=1) {
    1590     " *** The transformed polynomial was not valid!!";}
    1591   Q=Newton[lastside+1][1]-Newton[lastside][1];      // Laenge der letzten Seite
    1592 
    1593  //--- quasihomogenes Leitpolynom ist c*x^a*y+d*x^(a+Q) => delta=-d/c: --------
    1594   delta=-koeff(f,Newton[lastside+1][1],0)/koeff(f,Newton[lastside][1],1);
    1595   a[Q]=delta;
    1596   "a("+string(zeile-1)+","+string(Q)+") =",delta;
    1597   if (Q<Exaktheit) {
    1598    f=T1_Transform(f,delta,Q);
    1599    if (defined(Protokoll)) { "transformed polynomial:",f; }
    1600    if (subst(f,y,0)==0) {
    1601      "The HNE is finite!";
    1602      a[Q+1]=x; Exaktheit=Q;
    1603      f=0;                          // Speicherersparnis: f nicht mehr gebraucht
    1604    }
     1900  while (Q<Exaktheit) {
     1901    M=ord(subst(f,y,0));
     1902    Q=M-M1;
     1903 //------ quasihomogene Leitform ist c*x^M1*y+d*x^(M1+Q) => delta=-d/c: -------
     1904    delta=-koeff(f,M,0)/koeff(f,M1,1);
     1905    a[Q]=delta;
     1906    "a("+string(zeile-1)+","+string(Q)+") =",delta;
     1907    if (Q<Exaktheit) {
     1908     f=T1_Transform(f,delta,Q);
     1909     if (defined(HNDebugOn)) { "transformed polynomial:",f; }
     1910     if (subst(f,y,0)==0) {
     1911       "The HNE is finite!";
     1912       a[Q+1]=x; Exaktheit=Q;
     1913       f=0;                        // Speicherersparnis: f nicht mehr gebraucht
     1914     }
     1915    }
    16051916  }
    16061917 }
     
    16281939 }}}
    16291940 else { v[zeile]=Q; }               // HNE war exakt
    1630  if (ringwechsel) {
     1941 if (ringwechsel)
     1942 {
    16311943   if(system("with","Namespaces")) { kill Top::extdguenstig; }
    16321944   kill extdguenstig;
     
    16982010}
    16992011///////////////////////////////////////////////////////////////////////////////
    1700 
     2012static
    17012013proc extractHNEs(list HNEs, int transvers)
    17022014"USAGE:  extractHNEs(HNEs,transvers);  list HNEs (output from HN),
     
    17112023  maxspalte=0;
    17122024  HNEaktu=HNEs[hnezaehler];
    1713   if (defined(Protokoll)) {"To process:";HNEaktu;}
     2025  if (defined(HNDebugOn)) {"To process:";HNEaktu;}
    17142026  if (size(HNEs[hnezaehler])!=size(HNEs[hnezaehler][1])+2) {
    17152027     "The ideals and the hqs in HNEs[",hnezaehler,"] don't match!!";
     
    17572069     eps = e;
    17582070     for (l = 0; eps%p == 0; l=l+1) { eps=eps/ p;}
    1759      if (defined(Protokoll)) {e," -> ",eps,"*",p,"^",l;}
     2071     if (defined(HNDebugOn)) {e," -> ",eps,"*",p,"^",l;}
    17602072     delta = koeff(f,(M/ e)*p^l,(N/ e)*p^l*(eps-1)) / (-1*eps*c);
    17612073
     
    17632075 //------ coefficient field is not Z/pZ => (p^l)th root is not identity -------
    17642076       delta=0;
    1765        if (defined(Protokoll)) {
     2077       if (defined(HNDebugOn)) {
    17662078         "trivial factorization not implemented for",
    17672079         "parameters---I've to use 'factorize'";
     
    17702082   }
    17712083 }
    1772  if (defined(Protokoll)) {"quasihomogeneous leading form:",f," = ",c,
     2084 if (defined(HNDebugOn)) {"quasihomogeneous leading form:",f," = ",c,
    17732085        "* (y^"+string(N/ e),"-",delta,"* x^"+string(M/ e)+")^",e," ?";}
    17742086 if (f != c*(y^(N/ e) - delta*x^(M/ e))^e) {return(0);}
     
    17912103         data for one of the branches of f.
    17922104         For more details type 'help develop;'
    1793 NOTE:    as the Hamburger-Noether development of a reducible curve normally
    1794          exists only in a ring extension, reddevelop automatically changes
    1795          the basering to  ring HNEring=...,(x,y),ls; !
     2105CREATE:  a ring with name `HNEring', variables `x,y' and ordering `ls' over
     2106         a field extension of the current basering's ground field.
     2107         As the Hamburger-Noether development of a reducible curve normally
     2108         does not exist in the given basering, reddevelop always defines
     2109         HNEring and changes to it. The field extension is chosen minimal.
    17962110EXAMPLE: example reddevelop;  shows an example
    17972111"
     
    18572171 export HNEring;
    18582172
    1859  if (defined(Protokoll))
     2173 if (defined(HNDebugOn))
    18602174 {"received polynomial: ",f,", with x =",namex,", y =",namey;}
    18612175
     
    19232237     else {
    19242238       if (str<>"c") {
     2239         setring altring;
    19252240         if(system("with","Namespaces")) { kill Top::HNEring; }
    1926          setring altring;kill HNEring;kill zweitring;
     2241         kill HNEring;kill zweitring;
    19272242         return(list());}
    19282243       else { "if the algorithm doesn't terminate, you were wrong...";}
    19292244   }}
    19302245   kill zweitring;
    1931    if (defined(Protokoll)) {"I continue with the polynomial",f; }
     2246   if (defined(HNDebugOn)) {"I continue with the polynomial",f; }
    19322247  }
    19332248  else {
     
    19752290   if (str=="f") { f=allsquarefree(f,test_sqr); }
    19762291  }
    1977   if (defined(Protokoll)) {"I continue with the polynomial",f; }
     2292  if (defined(HNDebugOn)) {"I continue with the polynomial",f; }
    19782293
    19792294 }
     
    20172332 list HNEs=ideal(0);
    20182333 list aneu=ideal(0);
     2334 list faktoren=ideal(0);
    20192335 ideal deltais;
    20202336 poly delta;                   // nicht number, weil delta von a abhaengen kann
    2021  export f,azeilen,HNEs,aneu,deltais,delta;
     2337 export f,azeilen,HNEs,aneu,faktoren,deltais,delta;
    20222338 //----- hier steht die Anzahl bisher benoetigter Ringerweiterungen drin: -----
    20232339 int EXTHNEnumber=0; export EXTHNEnumber;
     
    20252341
    20262342 // -------- Berechne HNE von allen Zweigen, fuer die x transvers ist: --------
    2027  if (defined(Protokoll))
    2028    {"1st step: Treat newton polygon until height",grenze1;}
     2343 if (defined(HNDebugOn))
     2344   {"1st step: Treat Newton polygon until height",grenze1;}
    20292345 if (grenze1>0) {
    20302346  hilflist=HN(f,grenze1,1);
     
    20332349  Ergebnis=extractHNEs(hilflist[1],0);
    20342350  if (hilflist[2]!=-1) {
    2035     if (defined(Protokoll)) {" ring change in HN(",1,") detected";}
     2351    if (defined(HNDebugOn)) {" ring change in HN(",1,") detected";}
    20362352    poly transfproc=hilflist[2];
    20372353    map hole=HNE_noparam,transfproc,x,y;
     
    20462362 }
    20472363 // --------------- Berechne HNE von allen verbliebenen Zweigen: --------------
    2048  if (defined(Protokoll))
    2049     {"2nd step: Treat newton polygon until height",grenze2;}
     2364 if (defined(HNDebugOn))
     2365    {"2nd step: Treat Newton polygon until height",grenze2;}
    20502366 if (grenze2>0) {
    20512367  map xytausch=basering,y,x;
     
    20582374  if (not(defined(Ergebnis))) {
    20592375 //-- HN wurde schon mal ausgefuehrt; Ringwechsel beim zweiten Aufruf von HN --
    2060     if (defined(Protokoll)) {" ring change in HN(",1,") detected";}
     2376    if (defined(HNDebugOn)) {" ring change in HN(",1,") detected";}
    20612377    poly transfproc=hilflist[2];
    20622378    map hole=HNE_noparam,transfproc,x,y;
     
    20782394  setring HNEring;
    20792395  export HNEring;
    2080   if(system("with","Namespaces")) { kill Primitiv::EXTHNEring(1..EXTHNEnumber);}
    20812396  kill EXTHNEring(1..EXTHNEnumber);
    20822397 }
    2083  if(system("with","Namespaces")){kill Top::HNE_noparam;}
    20842398 kill HNE_noparam;
    20852399 kill EXTHNEnumber;
     
    21272441static
    21282442proc HN (poly f,int grenze, int Aufruf_Ebene)
    2129 "NOTE: This procedure is only for internal use, it is called via reddevelop
    2130 "
     2443"NOTE: This procedure is only for internal use, it is called via reddevelop"
    21312444{
    21322445 //---------- Variablendefinitionen fuer den unverzweigten Teil: --------------
    2133  if (defined(Protokoll)) {"procedure HN",Aufruf_Ebene;}
     2446 if (defined(HNDebugOn)) {"procedure HN",Aufruf_Ebene;}
    21342447 int Abbruch,ende,i,j,e,M,N,Q,R,zeiger,zeile,zeilevorher;
    21352448 intvec hqs;
     
    21552468  zeiger=find_in_list(Newton,grenze);
    21562469  if (Newton[zeiger][2] != grenze)
    2157     {"Didn't find an edge in the newton polygon!";}
     2470    {"Didn't find an edge in the Newton polygon!";}
    21582471  if (zeiger==size(Newton)-1) {
    2159     if (defined(Protokoll)) {"only one relevant side in newton polygon";}
     2472    if (defined(HNDebugOn)) {"only one relevant side in Newton polygon";}
    21602473    M=Newton[zeiger+1][1]-Newton[zeiger][1];
    21612474    N=Newton[zeiger][2]-Newton[zeiger+1][2];
     
    21702483                      /x^Newton[zeiger][1],M,N);
    21712484    if (delta==0) {
    2172       if (defined(Protokoll)) {" The given polynomial is reducible !";}
     2485      if (defined(HNDebugOn)) {" The given polynomial is reducible !";}
    21732486      Abbruch=1;
    21742487    }
     
    21802493        if (N>1) { f = T1_Transform(f,delta,M/ e); }
    21812494        else     { ende=1; }
    2182         if (defined(Protokoll)) {"a("+string(zeile)+","+string(Q)+") =",delta;}
     2495        if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta;}
    21832496        azeilen=set_list(azeilen,intvec(zeile+1,Q),delta);
    21842497      }
    21852498      else {
    21862499 //------------- R > 0 : transformiere f mit T2 -------------------------------
    2187         erg=T2_Transform(f,delta,M,N);
     2500        erg=T2_Transform(f,delta,M,N,referencepoly(Newton));
    21882501        f=erg[1];delta=erg[2];
    21892502 //------- vollziehe Euklid.Alg. nach, um die HN-Matrix zu berechnen: ---------
    21902503        while (R!=0) {
    2191          if (defined(Protokoll)) { "h("+string(zeile)+") =",Q; }
     2504         if (defined(HNDebugOn)) { "h("+string(zeile)+") =",Q; }
    21922505         hqs[zeile+1]=Q;  //denn zeile beginnt mit dem Wert 0
    21932506 //------------------ markiere das Zeilenende der HNE: ------------------------
     
    21982511         M=N; N=R; R=M%N; Q=M / N;
    21992512        }
    2200         if (defined(Protokoll)) {"a("+string(zeile)+","+string(Q)+") =",delta;}
     2513        if (defined(HNDebugOn)) {"a("+string(zeile)+","+string(Q)+") =",delta;}
    22012514        azeilen=set_list(azeilen,intvec(zeile+1,Q),delta);
    22022515      }
    2203       if (defined(Protokoll)) {"transformed polynomial: ",f;}
     2516      if (defined(HNDebugOn)) {"transformed polynomial: ",f;}
    22042517      grenze=e;
    22052518 //----------------------- teste Abbruchbedingungen: --------------------------
     
    22392552 //---------- Variablendefinitionen fuer den verzweigten Teil: ----------------
    22402553  poly leitf,teiler,transformiert;
    2241   list faktoren=ideal(0); list aneu=ideal(0);
     2554  list aneu=ideal(0);
     2555  list faktoren;
     2556  list HNEakut=ideal(0);
    22422557  ideal deltais;
    22432558  intvec eis;
     
    22472562
    22482563  zeiger=find_in_list(Newton,grenze);
    2249   if (defined(Protokoll)) {
    2250     "Branching part reached---newton polygon :",Newton;
     2564  if (defined(HNDebugOn)) {
     2565    "Branching part reached---Newton polygon :",Newton;
    22512566    "relevant part until height",grenze,", from",Newton[zeiger],"on";
    22522567  }
     
    22552570 //======= Schleife fuer jede zu betrachtende Seite des Newtonpolygons: =======
    22562571  for(i=zeiger; i<size(Newton); i++) {
    2257    if (defined(Protokoll)) { "we consider side",Newton[i],Newton[i+1]; }
     2572   if (defined(HNDebugOn)) { "we consider side",Newton[i],Newton[i+1]; }
    22582573   M=Newton[i+1][1]-Newton[i][1];
    22592574   N=Newton[i][2]-Newton[i+1][2];
     
    22642579   letztringname=nameof(basering);
    22652580   lastRingnumber=EXTHNEnumber;
     2581   faktoren=list(ideal(charPoly(redleit(f,Newton[i],Newton[i+1])
     2582                       /(x^Newton[i][1]*y^Newton[i+1][2]),M,N)  ),
     2583                 intvec(1));                  // = (zu faktoriserendes Poly, 1)
    22662584
    22672585 //-- wechsle so lange in Ringerw., bis Leitform vollst. in Linearfakt. zerf.:-
     
    22782596         { " ** I cannot proceed, will produce some error messages...";}
    22792597     }
    2280      else
    2281       {
     2598     else {
    22822599 //------------------ faktorisiere das charakt. Polynom: ----------------------
    2283       faktoren=factorize(charPoly(leitf,M,N));
     2600 // faktoren=factorize(charPoly(leitf,M,N));       wird ersetzt durch:
     2601       faktoren=factorlist(faktoren);
    22842602     }
    22852603
     
    22882606      teiler=faktoren[1][j];
    22892607      if (teiler/y != 0) {         // sonst war's eine Einheit --> wegwerfen!
    2290         if (defined(Protokoll)) {"factor of leading form found:",teiler;}
     2608        if (defined(HNDebugOn)) {"factor of leading form found:",teiler;}
    22912609        if (teiler/y2 == 0) {      // --> Faktor hat die Form cy+d
    22922610          deltais[zaehler]=-subst(teiler,y,0)/koeff(teiler,0,1); //=-d/c
     
    22962614        else {
    22972615          " Change of basering necessary!!";
    2298           if (defined(Protokoll)) { teiler,"is not properly factored!"; }
     2616          if (defined(HNDebugOn)) { teiler,"is not properly factored!"; }
    22992617          if (needext==0) { poly zerlege=teiler; }
    23002618          needext=1;
     
    23042622    }
    23052623    else { deltais=ideal(delta); eis=e;}
    2306     if (defined(Protokoll)) {"roots of char. poly:";deltais;
     2624    if (defined(HNDebugOn)) {"roots of char. poly:";deltais;
    23072625                             "with multiplicities:",eis;}
    23082626    if (needext==1) {
     
    23242642        if (defined(translist)) { kill translist; } // Vermeidung einer Warnung
    23252643        if (numberofRingchanges>1) {  // ein Ringwechsel hat nicht gereicht
    2326          list translist=splitring(zerlege,"",list(transf,transfproc));
    2327          poly transf=translist[1]; poly transfproc=translist[2];
     2644         list translist=splitring(zerlege,"",list(transf,transfproc,faktoren));
     2645         poly transf=translist[1];
     2646         poly transfproc=translist[2];
     2647         list faktoren=translist[3];
    23282648        }
    23292649        else {
     
    23542674 //------ Neudef. von Variablen, Uebertragung bisher errechneter Daten: -------
    23552675      poly leitf,teiler,transformiert;
    2356       list faktoren; list aneu=ideal(0);
     2676      list aneu=ideal(0);
    23572677      ideal deltais;
    23582678      number delta;
     
    23622682      else                  { def letztring=HNEring; }
    23632683      f=imap(letztring,f);
     2684      faktoren=imap(letztring,faktoren);
    23642685      setring EXTHNEring(EXTHNEnumber);
    23652686      map hole=HNE_noparam,transf,x,y;
    23662687      poly f=hole(f);
     2688      if (not defined(faktoren)) {
     2689        list faktoren=hole(faktoren);
     2690      }
    23672691    }
    23682692   }    // end (while needext==1) bzw. for (numberofRingchanges)
     
    23702694   if (eis==0) { i++; continue; }
    23712695   if (ringischanged==1) {
    2372     list erg,hilflist            // dienen nur zum Sp. von Zwi.erg.
     2696    list erg,hilflist,HNEakut;            // dienen nur zum Sp. von Zwi.erg.
    23732697    ideal hilfid;
    2374     erg=ideal(0); hilflist=erg;
     2698    erg=ideal(0); hilflist=erg; HNEakut=erg;
    23752699
    23762700    hole=HNE_noparam,transf,x,y;
     
    23932717    if (R==0) {
    23942718      transformiert = T1_Transform(f,number(deltais[j]),M/ e);
    2395       if (defined(Protokoll)) {
     2719      if (defined(HNDebugOn)) {
    23962720        "a("+string(zeile)+","+string(Q)+") =",deltais[j];
    23972721        "transformed polynomial: ",transformiert;
     
    24012725       hnezaehler++;
    24022726 //------------ trage deltais[j],x ein in letzte Zeile, fertig: ---------------
    2403        HNEs[hnezaehler]=azeilen+list(poly(0));
    2404        hilfid=HNEs[hnezaehler][zeile+2]; hilfid[Q]=deltais[j]; hilfid[Q+1]=x;
    2405        HNEs=set_list(HNEs,intvec(hnezaehler,zeile+2),hilfid);
    2406        HNEs=set_list(HNEs,intvec(hnezaehler,1,zeile+1),Q);
    2407                                   // aktualisiere Vektor mit den hqs
     2727       HNEakut=azeilen+list(poly(0));        // =HNEs[hnezaehler];
     2728       hilfid=HNEakut[zeile+2]; hilfid[Q]=deltais[j]; hilfid[Q+1]=x;
     2729       HNEakut[zeile+2]=hilfid;
     2730       HNEakut=set_list(HNEakut,intvec(1,zeile+1),Q);
     2731                                             // aktualisiere Vektor mit den hqs
     2732       HNEs[hnezaehler]=HNEakut;
    24082733       if (eis[j]>1) {
    24092734        transformiert=transformiert/y;
     
    24192744    else {
    24202745 //------------------------ Fall R <> 0: --------------------------------------
    2421       erg=T2_Transform(f,number(deltais[j]),M,N);
     2746      erg=T2_Transform(f,number(deltais[j]),M,N,referencepoly(Newton));
    24222747      transformiert=erg[1];delta=erg[2];
    2423       if (defined(Protokoll)) {"transformed polynomial: ",transformiert;}
     2748      if (defined(HNDebugOn)) {"transformed polynomial: ",transformiert;}
    24242749      if (subst(transformiert,y,0)==0) {
    24252750       "finite HNE found";
     
    24272752 //---------------- trage endliche HNE in HNEs ein: ---------------------------
    24282753       HNEs[hnezaehler]=azeilen;  // dupliziere den gemeins. Anfang der HNE's
     2754       HNEakut=HNEs[hnezaehler];
    24292755       zl=2;
    24302756 //----------------------------------------------------------------------------
     
    24382764       M1=M;N1=N;R1=R;Q1=M1/ N1;
    24392765       while (R1!=0) {
    2440         if (defined(Protokoll)) { "h("+string(zeile+zl-2)+") =",Q1; }
    2441         HNEs=set_list(HNEs,intvec(hnezaehler,1,zeile+zl-1),Q1);
    2442         HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl,Q1+1),x);
     2766        if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1; }
     2767        HNEakut=set_list(HNEakut,intvec(1,zeile+zl-1),Q1);
     2768        HNEakut=set_list(HNEakut,intvec(zeile+zl,Q1+1),x);
    24432769                                  // markiere das Zeilenende der HNE
    24442770        zl=zl+1;
    24452771 //-------- Bereitstellung von Speicherplatz fuer eine neue Zeile: ------------
    2446         HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl),ideal(0));
     2772        HNEakut[zeile+zl]=ideal(0);
    24472773
    24482774        M1=N1; N1=R1; R1=M1%N1; Q1=M1 / N1;
    24492775       }
    2450        if (defined(Protokoll)) {
     2776       if (defined(HNDebugOn)) {
    24512777         "a("+string(zeile+zl-2)+","+string(Q1)+") =",delta;
    24522778       }
    24532779       hilfid=ideal(0);           // = HNEs[hnezaehler][zeile+zl];
    24542780       hilfid[Q1]=delta;hilfid[Q1+1]=x;
    2455        HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl),hilfid);
    2456        HNEs=set_list(HNEs,intvec(hnezaehler,1,zeile+zl-1),Q1);
     2781       HNEakut[zeile+zl]=hilfid;
     2782       HNEakut=set_list(HNEakut,intvec(1,zeile+zl-1),Q1);
    24572783                                  // aktualisiere Vektor mit hqs
    2458        HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl+1),poly(0));
     2784       HNEakut[zeile+zl+1]=poly(0);
     2785       HNEs[hnezaehler]=HNEakut;
    24592786 //-------------------- Ende der Eintragungen in HNEs -------------------------
    24602787
     
    24782805       aneu=HNerg[1];  }
    24792806     else {
    2480        if (defined(Protokoll))
     2807       if (defined(HNDebugOn))
    24812808          {" ring change in HN(",Aufruf_Ebene+1,") detected";}
    24822809       list aneu=HNerg[1];
     
    24842811
    24852812 //- stelle lokale Var. im neuen Ring wieder her und rette ggf. ihren Inhalt: -
    2486        list erg,hilflist,faktoren;
     2813       list erg,hilflist,faktoren,HNEakut;
    24872814       ideal hilfid;
    2488        erg=ideal(0); hilflist=erg; faktoren=erg;
     2815       erg=ideal(0); hilflist=erg; faktoren=erg; HNEakut=erg;
    24892816       poly leitf,teiler,transformiert;
    24902817
     
    25202847       hnezaehler++;
    25212848       HNEs[hnezaehler]=azeilen; // dupliziere den gemeinsamen Anfang der HNE's
     2849       HNEakut=HNEs[hnezaehler];
    25222850       zl=2;
    25232851 //---------------- Trage Beitrag dieser Transformation T2 ein: ---------------
     
    25272855       M1=M;N1=N;R1=R;Q1=M1/ N1;
    25282856       while (R1!=0) {
    2529         if (defined(Protokoll)) { "h("+string(zeile+zl-2)+") =",Q1; }
    2530         HNEs=set_list(HNEs,intvec(hnezaehler,1,zeile+zl-1),Q1);
    2531         HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl,Q1+1),x);
     2857        if (defined(HNDebugOn)) { "h("+string(zeile+zl-2)+") =",Q1; }
     2858        HNEakut=set_list(HNEakut,intvec(1,zeile+zl-1),Q1);
     2859        HNEakut=set_list(HNEakut,intvec(zeile+zl,Q1+1),x);
    25322860                                 // Markierung des Zeilenendes der HNE
    25332861        zl=zl+1;
    25342862 //-------- Bereitstellung von Speicherplatz fuer eine neue Zeile: ------------
    2535         HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl),ideal(0));
     2863        HNEakut[zeile+zl]=ideal(0);
    25362864        M1=N1; N1=R1; R1=M1%N1; Q1=M1 / N1;
    25372865       }
    2538        if (defined(Protokoll)) {
     2866       if (defined(HNDebugOn)) {
    25392867         "a("+string(zeile+zl-2)+","+string(Q1)+") =",delta;
    25402868       }
    2541        HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl,Q1),delta);
     2869       HNEakut=set_list(HNEakut,intvec(zeile+zl,Q1),delta);
    25422870
    25432871 //--- Daten aus T2_Transform sind eingetragen; haenge Daten von HN an: -------
    2544        hilfid=HNEs[hnezaehler][zeile+zl];
     2872       hilfid=HNEakut[zeile+zl];
    25452873       for (zl1=Q1+1; zl1<=ncols(aneu[zaehler][2]); zl1++) {
    25462874        hilfid[zl1]=aneu[zaehler][2][zl1];
    25472875       }
    2548        HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl),hilfid);
     2876       HNEakut[zeile+zl]=hilfid;
    25492877 //--- vorher HNEs[.][zeile+zl]<-aneu[.][2], jetzt [zeile+zl+1] <- [3] usw.: --
    25502878       for (zl1=3; zl1<=size(aneu[zaehler]); zl1++) {
    2551         HNEs=set_list(HNEs,intvec(hnezaehler,zeile+zl+zl1-2),
    2552              aneu[zaehler][zl1]);
     2879         HNEakut[zeile+zl+zl1-2]=aneu[zaehler][zl1];
    25532880       }
    25542881 //--- setze die hqs zusammen: HNEs[hnezaehler][1]=HNEs[..][1],aneu[..][1] ----
    2555        hilfvec=HNEs[hnezaehler][1],aneu[zaehler][1];
    2556        HNEs=set_list(HNEs,intvec(hnezaehler,1),hilfvec);
     2882       hilfvec=HNEakut[1],aneu[zaehler][1];
     2883       HNEakut[1]=hilfvec;
    25572884 //----------- weil nicht geht: liste[1]=liste[1],aneu[zaehler][1] ------------
     2885       HNEs[hnezaehler]=HNEakut;
    25582886      }                     // end(for zaehler)
    25592887     }                      // endelse (R<>0)
     
    25792907static
    25802908proc constructHNEs (list HNEs,int hnezaehler,list aneu,list azeilen,int zeile,ideal deltais,int Q,int j)
    2581 "NOTE: This procedure is only for internal use, it is called via HN
    2582 "
     2909"NOTE: This procedure is only for internal use, it is called via HN"
    25832910{
    25842911  int zaehler,zl;
     
    26092936///////////////////////////////////////////////////////////////////////////////
    26102937
     2938proc referencepoly (list newton)
     2939"USAGE:   referencepoly(newton);
     2940         newton is list of intvec(x,y) which represents points in the Newton
     2941         diagram (e.g. output of the proc newtonpoly)
     2942RETURN:  a polynomial which has newton as Newton diagram
     2943EXAMPLE: example referencepoly;  shows an example
     2944"
     2945{
     2946 poly f;
     2947 for (int i=1; i<=size(newton); i++) {
     2948   f=f+var(1)^newton[i][1]*var(2)^newton[i][2];
     2949 }
     2950 return(f);
     2951}
     2952example
     2953{ "EXAMPLE:"; echo = 2;
     2954 ring exring=0,(x,y),ds;
     2955 referencepoly(list(intvec(0,4),intvec(2,3),intvec(5,1),intvec(7,0)));
     2956}
     2957///////////////////////////////////////////////////////////////////////////////
     2958
     2959proc factorlist (list L)
     2960"USAGE:   factorlist(L);   L a list in the format of `factorize'
     2961RETURN:  the nonconstant irreducible factors of
     2962         L[1][1]^L[2][1] * L[1][2]^L[2][2] *...* L[1][size(L[1])]^...
     2963         with multiplicities (same format as factorize)
     2964EXAMPLE: example factorlist;  shows an example
     2965"
     2966{
     2967 // eine Sortierung der Faktoren eruebrigt sich, weil keine zwei versch.
     2968 // red.Fakt. einen gleichen irred. Fakt. haben koennen (I.3.27 Diplarb.)
     2969 int i,gross;
     2970 list faktoren,hilf;
     2971 ideal hil1,hil2;
     2972 intvec v,w;
     2973 for (i=1; (L[1][i] == jet(L[1][i],0)) && (i<size(L[1])); i++) {;}
     2974 if (L[1][i] != jet(L[1][i],0)) {
     2975   hilf=factorize(L[1][i]);
     2976 // Achtung!!! factorize(..,2) wirft entgegen der Beschreibung nicht nur
     2977 // konstante Faktoren raus, sondern alle Einheiten in der LOKALISIERUNG nach
     2978 // der Monomordnung!!! Im Beispiel unten verschwindet der Faktor x+y+1, wenn
     2979 // man ds statt dp als Ordnung nimmt!
     2980   hilf[2]=hilf[2]*L[2][i];
     2981   hil1=hilf[1];
     2982   gross=size(hil1);
     2983   if (gross>1) {
     2984       // faktoren=list(hilf[1][2..gross],hilf[2][2..gross]);
     2985       // -->  `? indexed object must have a name'
     2986     v=hilf[2];
     2987     faktoren=list(ideal(hil1[2..gross]),intvec(v[2..gross]));
     2988   }
     2989   else         { faktoren=hilf; }
     2990 }
     2991 else {
     2992   faktoren=L;
     2993 }
     2994
     2995 for (i++; i<=size(L[2]); i++) {
     2996 //------------------------- linearer Term -- irreduzibel ---------------------
     2997   if (L[1][i] == jet(L[1][i],1)) {
     2998     if (L[1][i] != jet(L[1][i],0)) {           // konst. Faktoren eliminieren
     2999       hil1=faktoren[1];
     3000       hil1[size(hil1)+1]=L[1][i];
     3001       faktoren[1]=hil1;
     3002       v=faktoren[2],L[2][i];
     3003       faktoren[2]=v;
     3004     }
     3005   }
     3006 //----------------------- nichtlinearer Term -- faktorisiere -----------------
     3007   else {
     3008     hilf=factorize(L[1][i]);
     3009     hilf[2]=hilf[2]*L[2][i];
     3010     hil1=faktoren[1];
     3011     hil2=hilf[1];
     3012     gross=size(hil2);
     3013       // hil2[1] ist konstant, wird weggelassen:
     3014     hil1[(size(hil1)+1)..(size(hil1)+gross-1)]=hil2[2..gross];
     3015       // ideal+ideal does not work due to simplification;
     3016       // ideal,ideal not allowed
     3017     faktoren[1]=hil1;
     3018     w=hilf[2];
     3019     v=faktoren[2],w[2..gross];
     3020     faktoren[2]=v;
     3021   }
     3022 }
     3023 return(faktoren);
     3024}
     3025example
     3026{ "EXAMPLE:"; echo = 2;
     3027 ring exring=0,(x,y),ds;
     3028 list L=ideal(x,(x-y)^2*(x+y+1),x+y),intvec(2,2,1);
     3029 L;
     3030 factorlist(L);
     3031}
     3032///////////////////////////////////////////////////////////////////////////////
     3033
    26113034proc extrafactor (poly leitf, int M, int N)
    26123035"USAGE:   factors,flag=extrafactor(f,M,N);
    26133036         list factors, int flag,M,N, poly f in x,y
    26143037ASSUME:  basering is (0,a),(x,y),ds or ls
    2615          Newtonpolygon of f is one side with height N, length M
     3038         Newton polygon of f is one side with height N, length M
    26163039RETURN:  for some special f, factors is a list of the factors of
    26173040         charPoly(f,M,N), same format as factorize
     
    26213044NOTE:    This procedure is designed to make reddevelop able to compute some
    26223045         special cases that need a ring extension in char 0.
    2623          It becomes obsolete as soon as factorize works also in such rings.
     3046         It becomes obsolete as soon as `factorize' works also in such rings.
    26243047EXAMPLE: example extrafactor;  shows an example
    26253048"
  • Singular/LIB/primitiv.lib

    ra3600c r81fb58d  
    1 // $Id: primitiv.lib,v 1.7 1998-10-21 10:28:26 krueger Exp $
     1// $Id: primitiv.lib,v 1.8 1999-04-14 12:11:53 Singular Exp $
    22// author:  Martin Lamm,  email: lamm@mathematik.uni-kl.de
    3 // last change:           11.3.98
    4 ///////////////////////////////////////////////////////////////////////////////
    5 version="$Id: primitiv.lib,v 1.7 1998-10-21 10:28:26 krueger Exp $";
     3// last change:            19.03.99
     4///////////////////////////////////////////////////////////////////////////////
     5// This library is for Singular 1.2 or newer
     6
     7version="$Id: primitiv.lib,v 1.8 1999-04-14 12:11:53 Singular Exp $";
    68info="
    79LIBRARY:    primitiv.lib    PROCEDURES FOR FINDING A PRIMITIVE ELEMENT
    810
    9  primitive(ideal i);   finds minimal polynomial for a primitive element
     11 primitive(ideal i);   find minimal polynomial for a primitive element
     12 primitive_extra(i);   find primitive element for two generators
    1013 splitring(f,R[,L]);   define ring extension with name R and switch to it
    1114 randomLast(b);        random transformation of the last variable
     
    1720
    1821proc randomLast(int b)
    19 "USAGE:   randomLast
    20 RETURN:  ideal = maxideal(1) but the last variable exchanged by
     22"USAGE:   randomLast(b);  b int
     23RETURN:  ideal = maxideal(1), but the last variable is exchanged by
    2124         a sum of it with a linear random combination of the other
    22          variables
     25         variables. The coefficients are in the interval [-b,b].
    2326EXAMPLE: example randomLast; shows an example
    2427"
     
    4144
    4245proc primitive(ideal i)
    43 "USAGE:  primitive(i); i ideal of the following form:
     46"USAGE:   primitive(i); i ideal of the following form:
    4447 Let k be the ground field of your basering, a_1,...,a_n algebraic over k,
    45  m_1(x1), m_2(x_1,x_2),...,m_n(x_1,...,x_n) polynomials in k such that
     48 m_1(x_1), m_2(x_1,x_2),...,m_n(x_1,...,x_n) polynomials in k such that
    4649 m_j(a_1,...,a_(j-1),x_j) is minimal polynomial for a_j over k(a_1,...,a_(j-1))
    4750                                                        for all j=1,...,n.
     
    5356 j[2],...,j[n+1] polynomials in k[x_n] : j[i+1](b)=a_i for i=1,...,n
    5457NOTE:    the number of variables in the basering has to be exactly the number n
    55          of given algebraic elements (and minimal polynomials)
     58         of given algebraic elements (and minimal polynomials).
     59
     60         If k has few elements it can be that no one of the linear combinations
     61         of a_1,...,a_n is a primitive element. In this case `primitive'
     62         returns the zero ideal. If this occurs use primitive_extra instead.
    5663EXAMPLE: example primitive;  shows an example
    5764"
     
    6370 ideal i=fetch(altring,i);
    6471
    65  int k,schlecht;
     72 int k,schlecht,Fehlversuche,maxtry;
    6673 int nva = nvars(basering);
     74 int p=char(basering);
     75 if (p==0) {
     76   p=100000;
     77   if (nva<3) { maxtry= 100000000; }
     78   else       { maxtry=2147483647; }
     79 }
     80 else {
     81   if ((nva<4) || (p<60)) {
     82     maxtry=p^(nva-1); }
     83   else {
     84     maxtry=2147483647;          // int overflow(^)  vermeiden
     85   }
     86 }
    6787 ideal jmap,j;
    6888 map phi;
    6989 option(redSB);
    70  int Fehlversuche;
     90
    7191 //-------- Mache so lange Random-Koord.wechsel, bis letztes Poly -------------
    7292 //--------------- das Minpoly eines primitiven Elements ist : ----------------
    73  for (Fehlversuche=0; 1; Fehlversuche++) {
     93 for (Fehlversuche=0; Fehlversuche<maxtry; Fehlversuche++) {
    7494   schlecht=0;
    75    if (Fehlversuche==0) { jmap=maxideal(1);}
     95   if ((p<60) && (nva==2)) {  // systematische Suche statt random
     96      jmap=ideal(var(1),var(2)+Fehlversuche*var(1));
     97   }
    7698   else {
    77      if (Fehlversuche<3) { jmap=randomLast(10);}
    78      else                { jmap=randomLast(100);}
     99    if (Fehlversuche==0) { jmap=maxideal(1);}
     100    else {
     101      if (Fehlversuche<5) { jmap=randomLast(10);}
     102      else {
     103       if (Fehlversuche<20) { jmap=randomLast(100);}
     104       else                 { jmap=randomLast(100000000);}
     105    }}                        // groessere Werte machen keinen Sinn
    79106   }
    80107   phi=lexring,jmap;
     
    100127       ideal extra=maxideal(1);extra=phi(extra);
    101128                               // sonst: "argument of a map must have a name"
    102        erg=j[1]+chi(extra);    // j[1] = Minimalpolynom
     129       erg=j[1],chi(extra);    // j[1] = Minimalpolynom
    103130       setring altring;
    104131       return(fetch(lexring,erg));
    105132     }
    106133   }
    107    "The random coordinate change was bad!";
    108  }
     134   dbprint("The random coordinate change was bad!");
     135 }
     136 if (voice==2) {
     137   "// ** Warning: No primitive element could be found.";
     138   "//    If the given ideal really describes the minimal polynomials of";
     139   "//    a series of algebraic elements (cf. `help primitive;') then";
     140   "//    try `primitive_extra'.";
     141 }
     142 setring altring;
     143 return(ideal(0));
    109144}
    110145example
     
    126161///////////////////////////////////////////////////////////////////////////////
    127162
     163proc primitive_extra(ideal i)
     164"USAGE:   primitive_extra(i);  ideal i=f,g;  with the following properties:
     165 Let k=Q or k=Z/pZ be the ground field of the basering, a,b algebraic over k,
     166 x the name of the first ring variable, y the name of the second, then:
     167 f is the minimal polynomial of a in k[x], g is a polynomial in k[x,y] s.t.
     168 g(a,y) is the minimal polynomial of b in k(a)[y]
     169
     170RETURN:  ideal j in k[y] such that
     171 j[1] is minimal polynomial over k for a primitive element c of k(a,b)=k(c)
     172 j[2] is a polynomial s.t. j[2](c)=a
     173
     174NOTE: - While `primitive' may fail for finite fields, this proc tries all
     175        elements of k(a,b) and hence finds by assurance a primitive element.
     176        In order to do this (try all elements) field extensions like Z/pZ(a)
     177        are not allowed for the ground field k.
     178      - primitive_extra assumes that g is monic as polynomial in (k[x])[y]
     179EXAMPLE: example primitive_extra;  shows an example
     180"
     181{
     182 def altring=basering;
     183 int grad1,grad2=deg(i[1]),deg(jet(i[2],0,intvec(1,0)));
     184 int countx,countz;
     185 ring deglexring=char(altring),(x,y,z),dp;
     186 map transfer=altring,x,z;
     187 ideal i=transfer(i);
     188 if (size(i)!=2) {
     189   "//** Error -- either wrong number of given minimal polynomials";
     190   "//**          or wrong choice of ring variables (must use the first two)";
     191   setring altring;
     192   return(ideal(0));
     193 }
     194 matrix mat;
     195 ring lexring=char(altring),(x,y),lp;
     196 ideal j;
     197 ring deglex2ring=char(altring),(x,y),dp;
     198 ideal j;
     199 setring deglexring;
     200 ideal j;
     201 option(redSB);
     202 poly g=z;
     203 int found=0;
     204
     205 //---------------- Schleife zum Finden des primitiven Elements ---------------
     206 //--- Schleife ist so angordnet, dass g in Charakteristik 0 linear bleibt ----
     207 while (found==0) {
     208   j=eliminate(i+ideal(g-y),z);
     209   setring deglex2ring;
     210   j=std(imap(deglexring,j));
     211   setring lexring;
     212   j=fglm(deglex2ring,j);
     213   if (size(j)==2) {
     214     if (deg(j[1])==grad1*grad2) {
     215       j[2]=j[2]/leadcoef(j[2]);    // Normierung
     216       if (lead(j[2])==x) {         // Alles ok
     217          found=1;
     218       }
     219     }
     220   }
     221   setring deglexring;
     222   if (found==0) {
     223 //------------------ waehle ein neues Polynom g ------------------------------
     224     dbprint("Still searching for primitive element...");
     225     countx=0;
     226     countz=0;
     227     while (found==0) {
     228      countx++;
     229      if (countx>=grad1) {
     230        countx=0;
     231        countz++;
     232        if (countz>=grad2) {
     233         "//** Error: No primitive element found!! This should NEVER happen!";
     234         setring altring;
     235         return(ideal(0));
     236        }
     237      }
     238      g = g +x^countx *z^countz;
     239      mat=coeffs(g,z);
     240      if (size(mat)>countz) {
     241        mat=coeffs(mat[countz+1,1],x);
     242        if (size(mat)>countx) {
     243          if (mat[countx+1,1] != 0) {
     244            found=1;         // d.h. hier: neues g gefunden
     245      }}}
     246     }
     247     found=0;
     248   }
     249 }
     250 //------------------- primitives Element gefunden; Rueckgabe -----------------
     251 setring lexring;
     252 j[2]=x-j[2];
     253 setring altring;
     254 map transfer=lexring,var(1),var(2);
     255 return(transfer(j));
     256}
     257example
     258{ "EXAMPLE:"; echo = 2;
     259 ring exring=3,(x,y),dp;
     260 ideal i=x2+1,y3+y2-1;
     261 primitive_extra(i);
     262 ring extension=(3,y),x,dp;
     263 minpoly=y6-y5+y4-y3-y-1;
     264 number a=y5+y4+y2+y+1;
     265 a^2;
     266 factorize(x2+1);
     267 factorize(x3+x2-1);
     268}
     269///////////////////////////////////////////////////////////////////////////////
     270
    128271proc splitring
    129272"USAGE:  splitring(f,R[,L]);  f poly, univariate, irreducible(!), R string,
    130273                     L list of polys and/or ideals (optional)
    131 ACTION: defines a ring with name R, in which f is reducible, and changes to it
     274CREATE: defines a ring with name R, in which f is reducible, and changes to it
    132275        If the old ring has no parameter, the name 'a' is chosen for the
    133276        parameter of R (if a is no variable; if it is, the proc takes 'b',
     
    221364  ideal maxid=nach_splt1_2(mipol),nach_splt1_3(f);
    222365  ideal primit=primitive(maxid);
    223   "new minimal polynomial:",primit[1];
     366  if (size(primit)==0) {             // Suche mit 1. Proc erfolglos
     367    primit=primitive_extra(maxid);
     368  }
    224369 //-- erzeuge einen String, der das Minimalpolynom des neuen Rings enthaelt: --
    225370  setring splt2;
    226371  map nach_splt2=splt1,0,var(1);     // x->0, y->a
    227372  minp=string(nach_splt2(primit)[1]);
     373  "// new minimal polynomial:",minp;
    228374 //--------------------- definiere den neuen Ring: ----------------------------
    229375  execute("ring "+@R+" = ("+charakt+","+algname+"),("+varnames+"),("
     
    252398 }
    253399 if (defined(altrname)) {
    254    if(system("with","Namespaces")) { kill Top::`altrname`; }
     400   if(system("with","Namespaces"))
     401   { kill Top::`altrname`; kill Top::splt_temp; }
    255402   execute("kill "+altrname+";");
    256403   execute("def "+altrname+" = splt_temp;");
    257404   @R=altrname;
    258405   execute("export "+altrname+";");
    259    if(system("with","Namespaces")) { kill Top::splt_temp; }
    260406   kill splt_temp;
    261407 }
  • Tst/Long/hnoether_l.res.gz.uu

    ra3600c r81fb58d  
    1 begin 644 hnoether_l.res.gz
    2 M'XL("(>9-#8``VAN;V5T:&5R7VPN<F5S`.P]:V\C-Y+?_2LX^1+);'J:;[:#
    3 M&2"WN;T=X#!8)`L<[H),T);;4L.RI--CIGMPR&^_*O:[U;+EL3QQ-NLD+3;)
    4 M)NO%8K%89'[ZQP_OWA-"^%OR^C7Y:SI/+LELL4RVLV3]Z_QBN]F>_516$1=8
    5 MY=UBFRPVZ<>$;)/-=D-NENOZ`S)/K^KJ\H+\Y[M_(]]`$Q>0_\UW=8EZ2R#S
    6 MUW21;D?C[\[PE[PM\C;;>+O;7"QW3;?Z;=%.U4FO,>,!9ZT_#QA9WI#KY&,R
    7 M7ZXN.Z7E7_V]O2#K=#$EGW>W\R1=O`F#++A>->V[MU4[HTQ0D4F`F/RT7*_S
    8 M"_*.+)+DFFP_+<G'>)W&5_-D0](%`3!]HQ=G/_-?+L^@E5]_Y@'_Y4UV]K,H
    9 M,L*SGV618OSL9U5E5KU&;PNHU@#/*`OR<7"]J6'B80\F*FF.8/T#^IT":Q9D
    10 MM9SGB^5=&L])NB$QV2&-XPWD?P(V;9)UFFQ>O>J#EQ\)'N<-`"%T_-_+'9G%
    11 M'ZO.[Q)/@<_)>LE:@'QY=Z*#;RZZN/Z]@^LZN=Y-4N#$$_J3W?Z*'N-1&(@Q
    12 M>>,_Z38<5FGQRQLL%4W;LNZP[`5;8R(3.<U4W:%J.H0B*K.<JBR7#*I!SXCJ
    13 MW][_.V*70?_A?=TW$M9T/H0BC"ID#5G]RJ')7-!,-O)EZD(!A5#E@R"49#IO
    14 MJMBZBO151%'E`P_).7S05'1U1>4KRK*B\!5%4S&J*VI?4945E:_80"=`^E?Q
    15 M.KX;522#9L9`IAG((GS)@5.\YM1LQ#$E(%/4F9B6/BW.0'F<GY/_BM<+&&^7
    16 M(#Z;W7R+I$ZR>+(ENQ79+LER?0W#1N/8SDB\N"86DSF(&)`=>)XI)C,-/+.0
    17 M@5PP5&>6FLPQE47,9;RFO("QDRZVY/.;;7J7K!NTQ#Y:ZG%HS4:BRI2M3%EE
    18 MJA8!5$D`\Q@"<-M00.@>";AA2F7<,B?@QS&G%.`=,1U*8S,1,FZLDU$F.!,F
    19 MM,9E0C!N5035A&0\-%J$4!%(R:7D.LR$ICQ22F-50Z6,+%>0:YE0$;<VU)EP
    20 ME(?*"2,@'5'AI`NU<)D,F17"1LZH3'(JI(DD-Y')I&#:**,5P"@E,]"[YM!O
    21 M)A7E-C)&1`+@D9I)A%9'(=0S3(M(N[+(4F6U,59H#K.!HS**`!MK.+0>,:-E
    22 M*)4-0Y>ID`H.)4Y(:3+%2]$0BAI3X&:$1TQICQ:T!%11B)3D7$G+$2=NX"_2
    23 MT%5(=:0`!ALB3EQJ``D``9R@'\F5,4`1*0$\SH7C``$B!7AHQ96%!J!+8:TU
    24 M0F%SA@D!!4)'1B)6TDGH$U`)$2L>`0A`YC#T:,G0*N<`:64!+Z:@T"GH57-`
    25 MC$)-H0%+%_(P4\A59ZU4D=2(N`1^1\`,$X8`;Z84M=)!2PXP`<25!LD(.9`Q
    26 M@B:Q@J%0$&F`1$I@IK+4<F>YT"$7420RY1B@I9V2`*25P`85,2C6D9,`AW)A
    27 MID.J%!?*TS9",#0'28R@`P`=.`ZRH`53UD4VXDX#*B"\6@*%N`.&149KW[)6
    28 M3#@4*RX`:`1':^9`GD`:0`042IM&@#605@'_C`JA>PLX1<(8X)A2%KMW]4"7
    29 MI?DS72S7R<AK`?8Y^`83W\!XA_'8%%]B+KF\!$-CM;S;36XO[F*86^&1WE[`
    30 MI,YNYQ?7R:6)ZM9A*ME3+:#LYRG81+-%\J:E70+&GTF_5!V;TZ,J&E1Q#@(K
    31 M:3M*LFV%%J`8J#%H)#]C-UH.TZI0^=$9VG@D]/]"FO'R]?XT,P%K=>Y.CYJS
    32 M=>O1/A=E6*';9F&%ZW//$J>FG^2GIQ\,T;IY45H34"MYD^6.PK^9R@W,T1*>
    33 M,+!S#?.SR17DN%Q2F*+!"H+9.D>+FG.PSWACG4@8M.W1@\T^D>K<)SU]3=V-
    34 MJG@,G16,+6E=T;/URP-B2/VE+E<,/[Z1(@QEM6IH5C*RL>KTF_0N7HW6`23'
    35 M304[('1N7^@TZHWGD[K92%69NLX\3(6!W[RA2G1Z*4.57[6O8$S>IO,Y:2BF
    36 M>+UT:S-BWBS?E&@QXB;93F:C'[N<4'*?$TK]H3FA]#-P0CI=MV\J3@0_-C2S
    37 M-2^$YT.P[2RD5;4XN7F#*R`+8SZBF6O*H[Y-?H,6>64LOR+UPO<ZN4D7Z`I8
    38 M+LE=O,@;?\"K,_(]@-7X!Y)LDJRV?H5\DZYA5D;WP2<$_2HA!?[7K_QJ4Q4<
    39 M+5FK&M;R+URU<-ZQV;>B,$FWCFYKQ:SW15HW(FWW]8H6-1'%^2B'A9`=?^"J
    40 M*6^MIF]0J>9<E<MIB\C("D%;R2M_UM6]5AUX;`'.(=?)\J;@U')]1Z8?;(!O
    41 MZP1>DP:6B[._SY-XDY#M.B?Q-$X7>XZ?HX'3^]0W-?6!9.DX&,7!59<#ML$H
    42 M%C2]D@<4PNM1.FY[$V[0]9;L4;+M3XBKM*SS1:N.*%P>ON$R0^)'M1,B$/>Y
    43 M(73+NQ9KFHKS6%&1GL?BBEYUG"XC!CV4.(F.DGL</KZ=!J7X($J#Z(@6.N$`
    44 M.M$>]TS8<,]Z[O7'CVDYTS+OQ]OL)C,8R-[/NEQX&?R?URL2@\PMEC#*[U9S
    45 M,#\6V^3Z@K0D;[3Z<!O$8W3S3=?+'8SWFS297W^Q+!JQCXU\$!L877?I`@?1
    46 MFU30QA%D=`O-%X2DV4>RF35&*@IN`<MI,!L'/[2P;,GM5-*9Z@\X^47".=T?
    47 M;#Q0AP=>V!+21F(5-M0,0'G?`#11@\AH"I;O;/S!TEG4'GJWKAEXM88NK8B6
    48 M$7O+S7VX02L-<M,#"$U;")7YLE5'MNK(5AW5JJ-:A%%8Q\-5CU^`*QCTRT*U
    49 M\ZF,Z*V#'S-C4ZGIK0KA1<X$O(D9+:J$,TFGDA>%(IH)>BL%I-R,3KF;V:*`
    50 MZYGS;7$ULVS*Q:QHFG/(GT8S'A:?\1"+'99BZ[;ZBE/(+/.*FAI[PG<U\U4$
    51 MP.$+`+Q9Q4^[/WO;9O9>)_%\?\C:MGN=50[G>#Y=KM/M[(Y<+Y/-XMLM^;1<
    52 MWX*ALIV1;[&A;W$,3I;)S4TZ26&@/G$@6KD/N6H&(N<!3'O!!`;C=9`$-QV+
    53 MVK9T2WPM*$P?,I%47$U4HKZ2P?;,^BPYEHS[^LR"/JO3[N+@=AF@<<R.F8TN
    54 MR";9MC?-ZJX<SG9U,U[/D^]Q\\E3<YNTC2O?P%U\"Q1>+*'%Q0:-NN1NM<V]
    55 MMZINLV-]]FT?)SH]QH9>>8[_918OI@FB=17C=A=\OT@FR683K_-7K\X*9>Q5
    56 M\PU2?3^#D-]^^ZTTK"^)(.1J'2]@J99LQ@1XC4W=[.9@]DZ6=ZL=L!7KUURK
    57 M?GNZL+U/T[S*=JGH5O9J<12/6QFR_+H2B-+,PAQ9Y_@6*NDHI$8\"VCL%+!5
    58 MS*QT`+`!618T0NS4_HYH2PIT5^X,RU$*_EA<+F;PE\CD$P!6,0K44Z4\6LRU
    59 M7;XW!:[#UY*QL,HT+/.;8P]S^+$RH'Y7&7BQ(G`2X90O@F1\'S#U,DBV#UDU
    60 M#J+VL!D<*E%WZAWE+,--?1PLD&*0>@D*D7<)V'Y5^Q22IQ/V7L?LR3U79.=#
    61 M"BT2!Q1:)'L*S3*1*70^YHKQ7`.[($OY+%7E`>.006#++!=)R9"278?R6WS]
    62 M@N)3:T3>Y043/6JSA\B=PW))9WD$-!&Y8[C#GUL6.;^C8^!I&=?*[^G($'X,
    63 MPT@!W-R!7)-K9DUF<XF%%H@JX*F9D)G+!8,\W/_!%XSBB'*FBUT@*>!'8CD/
    64 M<ZJ=WR%B)H.UF?([1#X-%3G/N&!<H&\3\W`S2=TCFJI'#OY:?0E!I*>(5IXF
    65 M5$4%5:C`;?J&,``=YV%!&ZX-$J>H4M"'6_@,*(1!#5P65.*A-BU"4:6=U0*)
    66 M1:7#[6V@%Q,6"89!#"9T0"CJ1*0\X1CGGG(T<A(Z!JHQ(&6QO19QC:2C&/[1
    67 MIJ!P(=(0(T:`AE%#Q&>9,L2`8B9=9P.I_0V\]3JLQ8^9^IYEAAF:8)X7CTJ-
    68 MJ4&MIP]I/=.;F_Q\=%[\[EMR#VBL^S7?2[+H7X0UUW@0CX6S7:JJN;(#-],/
    69 MZ2?JM]$[48Z1'10:=TAHH@&A06%!N0'+AA9R\]B9\?>2CR/8T#<83\`'AL&F
    70 MH*U!4WMN&'@(/XM*AM.#?R"G,##"@*7H_J@2UV#JHVN9QY3U,84RPRI,"T'C
    71 M83@@ESSDPW+)PZ['"6PXP?+Q!Q!)M-XP?K=^?91:^QV$M6<49X^2SKXV.VH:
    72 M/%:VQ->&K&*N')0%=4@6>GXGL&1H+N_93BXC\<LS`NUH?._=&O!_\G#(9<+#
    73 M`RX3'G9=)N$]P&"`_F"/T2$W'.=A9V]L8`>0X^&`O@_8?X);Z?DJJ5W>/;?X
    74 M`"!\;P>2\X=V(#D&T]?1CFU`),T-`H.!$]__^/[=^_^X).^7N-&1P+!*)XWW
    75 MOMCU3[LN>:38:KG9X([_JZ*5PH6_75:;#\5'#9$#<K4#'(L0`G]4!$_+Q(NF
    76 M)]_.<C+9K3?D>N<1P[J3>#[9S>,MU`C()WQ?(+56Z^4$6_&;,%#/?SU9KD%!
    77 MK):+:_RZ4!`@3A<7%T]WALDC-4Y%>NVCY+X[7@.Q(174'KJ]@3O@NSE6I<@G
    78 M]W3L6H0-::]'=571$X;^=;I9S>,<.(0Q@46DU-_BNZO=>IJLV?ORX%4I@#B2
    79 M_)Y',8DLUA?\$BVA(D*??09U\$'X#`0SIYAQ]L@61:M%*L]/TJ9L0RD.M5E1
    80 M9<B.Y/R`'<EYSX[$$SUH1&;X\^?2!P_MBA5(?/LQ(;/X&JI<D_EN<ON*5%$,
    81 M9;<X].?)-@$M<-7`AIN@#Z@3?FH#)NP.M)X)VE$N>G\<JF/'H1BT$,4A"U&(
    82 MOE7@=Z/^)6BG$[2N7(5'RM6^A2'JJ(-@CXNMZ(,P2"I+8]Y8&J)O_;'B:.*?
    83 MA\]??S^AYTK><ZD\80G"GMQV)1?FD&(8G+F$ZXM1\F>3HS^.OH@.Z@O96AH5
    84 MD?]#JQ,\]S(4'\GE\*3QN^_8M6-/GMM$[P23/,UTQ@,[-8?`&"5D,HO7\60+
    85 MPK79PAB"Q0TRJ2CC19@_B,X:6[F$=7I14+**E'^7!`.L^;@H7.SNKN`#$-J/
    86 M,0P+('Z1[_^NYLO)K6_ZL@C$1]&8;UHUFK]+LH#.-YC,2$X&6A'M5OY2(ZD.
    87 M2Z,^2AI-1QK3MCS:%RJ/C(<JBF+*0ZO%5Y3-HEMVFFXK(H/JKQ3>R<4T?D&"
    88 M>EAMJD9M#H:G<C7@3_H)/@#5OJX4_PU0;+E./\,,\A$0;>)3V_/B@#I7^PXF
    89 MU7(P]8-.@VD7L@.>IEA<70MZ-4DDC<5$=D)0@6<8.+KKQY,VX:88,5I'E?Z)
    90 M;(#C?.#'+B$K%CW:(_6470V8O\3X]6C2BXCL[6Y`+0.UKL9]^W)_DZ.O.$97
    91 MD_%Y3D<H5I`0=,1$K"9B?(Z;.Z/80'&]X<;5GONH."O8N&_0KW+^>01ZHO&U
    92 M`'@?"BQ\R0?A<PJ(BYRF`_NP^N*\*)#[NNN*3`[IK_"%*"[E#BNNZ)"B&`<_
    93 MU+'I7'?CL@9UP[\&^3/[B?Z)!K7F!R423V*V);(P^(+/X^#3"@_,!7+<U)6-
    94 MY0>V@FH*#FV?@$'AM[:^<"9[U$[G([6\/IV6'Y0`^?@8]X,FG_XRI2S/XTH?
    95 MURT]0OL^SG)4+\5NU(?5KXZ.%W83]M<R3Q+E/Y&^?I91^US')UY_P3F9@^/4
    96 M\(.;X'@P]O7KWO$H/'F/WJ=-0=M)X=`"SGJ6-.RJVI#EO8-_%>7=!)VE!1ZC
    97 M;4EL^W:">V*>?M?=EJ'-EO+5/"T<J/VJNZ^F_+:]JQ,P^X"G-J=XX0O^)WPH
    98 M&3X4D%?#?P8H77/AH4M5N#GDZC6VM^MH*`;B@_&,\6LT&XS&/_6IM6.W[P]+
    99 MP--]XH<=+$--'SO83W,B[N"&_I-`.^&).(X'S:L=@Q\;X8H.2!T>_RWOXL"K
    100 M]_`>/BHS;JG+N,D9QTOZ>)AQG6,91OX9_*&8)S%RVV#\M:#"8+RV9#J+,"@^
    101 M]*'>13"X,#Z@GILRQ%Q@['WN&A"Z[IJ;(PYC/C:$\VDAGR<_X+7OM1Z!Q1'R
    102 MF+DP#/L+`M;?==X/9'1TY&)JO/UO836@1$PY+@>0XB,5HA,23$0?MB_./5=&
    103 M+H0Z"G.15>@DC9F&MZAX4RIF`E2/9RL="2@56)ES?-4F9LKA*S(?2ZEO"F6"
    104 M<G..,L+4>2$Q`$\88R%H2X33?V=\FGDH.<+L?!5'00P?X6/=(R1[,B59FY1=
    105 M2K)A4K(>+3ND[%.2]4C)>K1D#Q"S14O6)B9K4[-#S&.CD!X5W-D[$;%W0D<$
    106 M#U(;L!?GQ80*&@62VC^MCRD^]OC#0:`?'U/<?E7MIHXX',%DZ[WJN$,.>01!
    107 MJ#S/_$/XIT1+`Q,*+(U:78HA!6_E(04/=B'H=A%A?+,#*<5[0SE>(PK:':])
    108 M!?G+A/;ASRA?7/J;1D&_PRO%RT51S6N\914O"(4W)AQ\CK'2^"7*L%;X3F7D
    109 MWP4DX&L4=NB-XWP@\/Y2/`OE5(@YDDF<0'"PV,@GH"Z7>!DLGA"2?O*!*4-;
    110 MC2GL&OH&F=?^<!6.12&$3VFJG<.A@E?T<9Q;A##^4)!A@OO30H"OB?QY(DL5
    111 M3E".15S#4,6[=FT>4:GQ:%/$`!2%YZ202#GG,$LU%_IQJX?='%]SOGJ64W@5
    112 M?B<-'?1>8:K&960>OA4JN<B0M:<B>VI((3J\FFY\+^I$O<AV+V4/Q4_7VY)1
    113 M47I:6)F0C^U*'=U5Z6(O?J!0%(6@@S#M2T11(HL2A242W4`UJVW-ZG<+[[)8
    114 M;#<EQ_$B#Y+6N6TH"]\.>F_P<H^^ZRC)5B"0^`EZD<[(:I=NDEU&5G&ZWI#V
    115 MWR4Y`T),UTE2798V62ZN=[@A1PI7/A3/MW$#1N=C*)XFBV0=0WT/WR:Y2]%K
    116 MLB)EUYOD?W?)8N*;OX.QD*[FZ23=ILD&BQ]&4?SSHRB/01$6S_<CZ6]YO!]3
    117 M=3^FXGY,/03WX0KS>'`,ONH8?%T@PD!`D_((M-&'"$\A'R0!6(;W$\$^P&\/
    118 MEQ*!>X`8+G"!@G]:1&G[F](%H+U))NCBZWU+^A?XD+.SDH#_AS`J#ZDL3!E\
    119 MG)7UZ/ZM/UC,B?^.F\!_[9^%Q2BZ)6=ENYBGZD6L'5S$VD.+V/XE0F`+@.&D
    120 M&)YAEA2/*..YK@@OZ.4O;G6IG[RZ["Z"ONRX/"QN#*X9T.I2:'_Z1:#/DG@P
    121 M^]R?A5/X@ZM!S/<K$%XF\40V+HJHP2<N4S`?5B)%!0OVY3G^OPUPA83K*,R,
    122 M\`KE>]9ZO67R%R/&]C`[B!BK,3N(&*LP8X.HM3%[EH77OK>HVFUZY.I+($KE
    123 MYN'_MW>LO7$CM^_^%<JA0-:6Y&B>DG)U@/O0^W0%"C0?6A1)L'$VR<:/3;V;
    124 M9/>*_O>2G*=>J[6M)$YQ-FR-I-$\2`[)F>&09N>0*3,=<UV#R0<O3FBU<P:*
    125 M]YRFP90+809?*S^W5P0@A2M"\%K[_!H72/$49=&"&6:K7-T5P;#."6KWGOD=
    126 MM/P'#;P?U#I`Z\)L`&0#$.L%6!M>77"IVVR-[%F('=S7J%C,C`<X<-,6%291
    127 M.;I-K\AANB;F*U.SP`$3N@?'@Q^>"Z=D:-VA,?S%P/#'W<P?EP%\,X]DPT#N
    128 MP+B'6]P2R`^%7QPJE'H6J7D'!N/]9X596Z;.UR@E!:Z[4`>A?<**V=+(5XT]
    129 ML/U"1S2TPDK$I$U'5,I9@0F-19FU:LZ-T`4)7Q>TS$I/%14-=\H)?%QPS7E5
    130 M4,KQ(U<APW/_5#A#'8%+NP`[L\4S$10$W`&AJF1<@-$@;%6`+FH^4V;PF*>`
    131 M+>PZTT;GH(5O`P)F]`A6>7"QRJSZ`M[X+<1BSY+X7?$VC+:\B[>\%W%[\-:+
    132 MM@;6\GUHR\?PEC<0UX.WO(&X7KP-HZV#M3ZD.>DH#I"@S?W[41%Z8ET;'F9A
    133 M_Z"DK?[#:>97<_[SS1PF)E]?0>$GM!]A=11IY:?03D?A=A:7*N5TE));":H*
    134 M(T%Q*!,G84Z(\M)(42R'V%;AY&A%,[P<2T.^K,Q$;Y?2^@$66'F6!*,<RZF=
    135 M0*AW>85<"T0L>PBNNZ938!I(Z."@BX(A#`PB8`C^O>!O0[\'^(?.AZ;1;_(=
    136 MHSU>`Q@F4I*4C*<UP^XSHMS*])RQ'#4WHQ()+4VW&48WE-A3?*X*T\$:Z9)A
    137 M"I]656$Z6J><*Q*/J-L5A1.6=<IJ*R"K5)$HI(6/PHG(,A5%(2A)XIOIRLK&
    138 MTJOJN)L&U2HC($GKDL+)S9+$FD+C#EUK2NJ\U"04$0)<%U94XAX=5674.6WE
    139 M)(A87RONFJ.H1.6ID%9NDAO!XL1L"X;.D>Y`(A4)T?32ZGT$]`((A]&5AQZ;
    140 MW4>"("^BM2S.:*?<@).;_7=AD,>!J!"VG%N%S3T6V',N#)9H-Q2I7SI<<;G+
    141 M$=G<[,Y3!SF0.1:E/6F@!G&"6Z];7AW]2W]37<[0:+Z72/MH=(!$\WX:S?N)
    142 M-!^ETB$B;=+H`(D>3J'Y((GF,8WF?42:#U%I/DZF/50Z1*01C39(M)="#R#0
    143 MO(]"\PZ)YGTTZM32EH?&$"N+57J/4:NQ:;W"J$<;T#U))22UTYBY^C)<,.U?
    144 MQ5F/L21Z\^[;<Y^A7S_HS`Y]0IH`SW"5.4HBM-*T?EK&SH@_\/?7BR]H;;^\
    145 MFE]&!MY/$R`5=%N7LM$2\+0[:-IO5E>@6:]NWBRO,:2"M33^,E_CP?@]]3`.
    146 MK(.E.+PQ'F*9VIHY53Z%)_6O\J`YVZAO9P:!CK.OYA^3YS]3T.6EI\4Z6$H>
    147 M0'[A,_:,+/!GRS,&1?[Y;+W\?6'VVI-EFAXG__$Y^6F2/#]SB,Q,'#D\[K%\
    148 M$94G,1=9G;@G^C3Y[U'1^76ORXGM.N8O@2;F+VOXJ^"OA#^%)P#I^#`97DQK
    149 MW&&J:U0U236B74V!O8+BJ]Q4I7-3G82T2*?LH>ST,,?Z7=VYK1OJE+FK>YJ:
    150 M5<M$ASHL0!6>HG#=+IQ`2IC#+J51EQ"+^3R?IE-EIUX6@5(Y]$U25]6M*XT[
    151 MFMJ..KHQ(V.BCM:]':U;G=T'6,<4JLZ9,O$B8X8S>%&RQ$`[7Y+'-B<^>XRV
    152 M#9OY\IK>OUF`R'@,)3RV,=UO/Y!>Q<USK7,;_5'%CMWQHNBW`N!%M$_UJPB/
    153 M6]Y7B7=+].SX@%6'<='_C43I)`K&%&H(J"`U.B6^N_)Q-[5@C]E%/@?"!IJ&
    154 M,6Z&7,_JSD0G7V9S$+<BG:22P25"J"3NDG$'<M_:!M?"J$O`*D$<X,GV*7HV
    155 MN/3C>T:8NG]%@_-WH(DF#"?H57GP8D'=I,C[N[JI[EIUL]]WJ[R^:^7Y_2MW
    156 MLD/TBY0![\Z\Y=VY(VNTES42A`V#)TP?(FZ^&^<>Y,D:!&6.XA+ZD!_"CN\K
    157 M$:>2(2DV'>>P![;[V\N5[CIU/<V`NH53M7H*[G$+2X-ZDE%[\,9+ZUSR;!_S
    158 M.B#64T]+#MV%:+<DDHAM:7^WAARZU+S_J/9>87TG1[D'B[71ACG)3LB;H&&'
    159 M"KV1AN61SM%&Y=T:=JA`'&]8`Y<M>K^'VV->#!QNYQA\H!5%-L^3U\MW,.UM
    160 M^4'8+(&!OUO[+ZO3X3">'`,/T*+<QU<L.4OH;+Y_R0K_DL-+R/*2)VFR5;N0
    161 MA?DL@K)PDP7FL,D)?!`R<I]14D9A,W+*R$-&X3,JRBAM1DD9H]:!$O'[&?1V
    162 M<1.>#9PQ@Y9@)?@]_+6\*MXK^-&WL9MTW0/RV*PWKXQ?E!GU/?\]^PD3/YFU
    163 MA_#Z*3Y-GCX%+>#CZNK3^<7IU7SS?@'_EA>GGZZ7^<7EZ9O%4\&Y+[YL%']Q
    164 MM;A:W>QFQ]E/)F6K,#?)IS4T[O4NF9]OEI\7D>>6&5#PZO5NLSA^VFJ1_7*T
    165 M34SKTC>J`GH``M[811;CNZ?(MEE29$4&J9S!33?%T2N%*Z2."Y'-0I+PK4_F
    166 M\+5P7Z,S\J][W(MG8R=FQD_)\/UG9-C802$Q=E!HNI-?.N,RXU4FBDR,'`.C
    167 MCL]*.B]$IX8$&X6$J$;."[%Z[(`8M5!!GPM(L1'00.Z>DT/W/SY690Q*DQD;
    168 M.T76@M%^Z%0C)\KDR)$R:A77F1J!RNT`<M#Y,IGIK#P4%B-GRO1^*%3[@8`M
    169 M&2.+AW2.3.!I,4YGQE1\C@SI.TF(PA-_CDP%SM<7:Y7S@5BK''W[MT4R'_!N
    170 M!^)]<K]*KDHUO9A4.H**?B!R4DCA54?T=!]$'&N*."??]E]9**SZVA)/\$Q6
    171 MF=*9+C+-,WV(_.N(@9D^X/"H9B.2L2KT_L%NVLH*&-#`^B0,HVJ,^<$G(!6Z
    172 M@L'!MQZ`K\':'Y#K0,X"3@QM7J&7_]8$*=DLUK3_M]AN+-=I<U?#*%T1_+2'
    173 MV:%;>\^_8M_L@E;P%`P<P-C[67$,LQ5V-$=/B)C,0YN!`X8F()8S##;AIJ'Q
    174 M'#1>Y(ZM6(/IM9M5@HK*_`I1,)G=ZER08S69"@K'2)$9[3JC;Y#J-`BG1-AT
    175 M:9L^WK@P-8Y=Q?0W.O%6M_Z%G*XWNM,;5K2Z@VE-:4'IRCPOZ(85YDUUCUXS
    176 M[R8/TSI*EU&ZBM)UE&;%W<!G;U3T0CM7.GA31B\J_,+?U7&%!7Y3C2&#%07Z
    177 MM$EKO/!4E>BC)E5%N645F@/2*0\A2O)X5A7&RYE";V=Y5:))8EJB6YF\I+#>
    178 M*?JH*5)R=,9SR?#L;TWFRXRC+;,@VV>%V-^#^K+M3)ZC?_^^<(F7ZY"E[AG1
    179 M.*27.W'\LDRW3/6.Z"47\)1ADD."F\0<&*R@U_[X/4</^RV2K(@BA:'"94WI
    180 MVI2JOQ/==4@-.QAH;1O16C%`:L4`I?70F8AJ$WZ5+0Z-'7M^PK2*TCI*EU&Z
    181 MBM*A+AG5):.Z)-:%>+)W,GJCHC34!BBR-V7THHK2-0),1Z,&!57OR%F6)SOR
    182 M1+6L3[:U)Q+6(5[)AX486;/URJ^&$)-BWW(?QD\P9G%>DF'\5$Y[:",15.?K
    183 M1O341X^.?KE.%C<WH"V\AW?D$!?T>XRT:@O/DO4*]0KTY(N6,"BT3XVA2V'L
    184 M5L*(49V&D7G@D&AU88B@7+-4]\@:T&R%LXCQRUKHE+]9-BUSWJ%L[LKV4P'T
    185 MQ]\&*%I84.GS6>$+!;2B]V'G_=C,;+"*Q184O03TI<W*N&.&F1F`<)NT:]WZ
    186 M.JM>6%G+F]XNW:)V86J?7[\Q#=DE^T!;MYLRVV),:(K&[&$@',NDELFX94\J
    187 MNE-&`C]AO+I-6^O05M5H:\6><%U)H22Y6$MY^42R&F9+Y)\3[D`EK50)P@F=
    188 MI#W12@GTPPGM42!^:KAR^%#;_E*[M@I;&[J.409:5)5NI\"\[\2V`V[T1-\"
    189 M]PX$HP%WV0]N<5O:+C%BMZ^1=V?TZ,A^J!4[U=^*LH%TP6\#E2I@F;5($HOR
    190 M+8<;P'A=BDJ@`SO$%].BDE%OY/0+`R5CE2]?=5@Z.I]W^@@OLP^@CUQDE]DF
    191 M#FO(T:]\5R.Y$/F'R^.7.KTL054(OM,?)?]<?0*>^WD!C!:P"#QWLUHE5_/K
    192 M75A=>'24_`(-":L-B^WYXF/;W?H7;.SKR-&ZQ]P'KGHHB`4%:#[C-B<S-]I]
    193 MAC>UNW$]]#S+VT\?BGZ#\PO#D22F+QW^/W!YLF%U:JY5^H$QN&I[5?8J[)7;
    194 M?(6YVL]*<[%C_0.K(0TE:+@(NJC27"1=)-8">41MK]I>"W.-B*$>%N;!='3O
    195 MC%07IUW3\[^O;FYV\%4[FC=9R2.IK=MQOS/T*V_%KBNYJWSH$,M"]!&I[IL(
    196 M`Y&FWXU&<W8@B;)`H#D+]!FFZ.C\O0-H9RE\::(X"^-/4#3]"5Z,^1,4.5VT
    197 MN7CM#QV=C\8A&X@)(49C0GP<BPEQ`8-H<W!4"*X[OBTGL'7NA>NK8:B^&H7I
    198 M`>$YAF"J[Q]G`[N18(,3;-8H<.^!)-&/I*IK]9U%XSN$[^B9&91%`\,A]AN@
    199 M.5(:MC!LBA`YI1TPW!7&>@O;M0K;-0K;M6WM76&\MS#V'>8LKD5BE+.'5=TF
    200 M@_=%R-.!@WE.E:=PZ9Q,[>A&I;NRUUG%_2P0#@U8X-JM[KYPK4;W[DJ8"(QL
    201 M<H]L7K*1S4MJP[[E9]5<;XZ<^K;ZRT?[^X-LZKN>?G6?MC\4_B<R=?A!:&`B
    202 M@X4'[](WYMCWV(4?V7^/=]Z3$O?<F8SVW-'LU`VZ:F`[J^Q.'N[[XXJN8%(1
    203 MBO:"*R`_BP"=-<"4)3T_<=&L4;3[66]NEA^AAYFC#AY7T`1]!M/M+YN5"9$6
    204 M%\U/_='XT%32\C#"5DR[;V]65R!<7X-L-><!3^'FZ"__^.6O?_OM+T^/7'@H
    205 MO#0TH>[LAD*P4*PBC:&*AE;7&A,.'LTRS"R%VY(7-^_.EAW6"D]!=O[<`UA<
    206 MC7B_&!QP1]8:!@O@+S*\B&8YMH#FD`15Y^/\_,+,%Z^.1%:B#VA3C'R1/$EX
    207 MNRVV&!J<N>_`466^4?O:/CPDC]S&;A])A4*>KYQ0HO(B+)-KA,?7R_/%Y>XQ
    208 M8'50=OT?&A2Y,2&>^3$1R@YC(JIO;$STS0R2$-A(Y9QMF4PI4$2NX;\-7)1B
    209 M$`F&NW9PAZ_9+A<4RHBG'%VNB13_\X!F_!"]@'!T*RUS=,Z&Y:J=2M%=FS:A
    210 MC9+N8'S;._SZ1A][(IO[<V9,5F&O#M>9DP@^EE8BTS8/8]EG`54-V!G/S`KP
    211 M2=B]^%K1VUU#0#^-.;15Q3.OH?JUSZH,Q.(8<B`5]^2.A#)H(#'$,I-F]-!I
    212 M;2`D;1:;G>(@?2R.OTJ51:`77.CL2+D9X.CSXAS(K\R8R@3+M`!:*X\S^X)G
    213 M_A>I1LNLUADOJDQRF55HB%H6.A.2>=4!_6QT"1.=;#391IC*NQFD1TBOW.K9
    214 M(5#QC`C]<3@Z"J(Z4%(DO@^CI98DQHWZP'D4">"<G*6)+?`(8!"[$G.$>H@S
    215 M.+066=B21;GF<`7@]MA2&6)W<?Y^A0L0`7:-W5>O&+U;;*ZOLN3YJ^<P+M<H
    216 M-.&&->YX?'>Q6KQ]FR4-G:L6O8H1<([+Q7*3)>M_?YK?+-Z"<,DP,&I\"SA^
    217 M1<,K_#2+EJ>1$("FQOP?;L>Q8(<TPL(-:L*!10(\!S2@>W<Z]"?I%15-@.>)
    218 M\L1?`UN,X&3V63-&YD[;R&ZC!JX5@Q#C-,991905V%8,7UMFSC+1L*+:>:R'
    219 M55UTTD#80';$,3#4%B05VI'PG:O+CR?TF>#@:/$2(&D?[(?E`$$;#FE+F&%H
    220 M!0SH%$)@ZLPS!^[Y@<QH?0LRN*P[Z<`LBB)BY9Y4(F;NG]U*%X[]1T5ES!`=
    221 M#BO-Y_"4-1\1^IJ/,/0F/(1+XSDN;^&J[VR;PQ6^PP%B'R+SN5RM-T?PKN<C
    222 MV?PH;![1:_/R""4Q#R!C/JXH;L-=''=60`7ZN>AVQ;T4C9<[TW7W4CYK-I(W
    223 MND8K>81-:I+[",:*3^LPAAO#/^"T\?AVG+7LT^D,)$O;QLJ_N3R+>D*AN9)+
    224 M@C+D,PI+\GIQ/O^T7B1E\F:U6-,VU)OEY^6;!>BXA+!F8V=OLTN#*`SY_'9^
    225 M3@IIA"JK![40YK9$?SO#RXP8/>;.:".!>G0<<&?BG1"CG/T6A"H[SA`99<0H
    226 ML(6.5="R[@[]M5EI#W>^R-KL%:\W\\VG-4C*G_]TQ))G\</3U:?-T?\`/JAH
    227 %2\_)````
     1begin 640 hnoether_l.res.gz
     2M'XL("#Q($S<``VAN;V5T:&5R7VPN<F5S`.P\:V\C-Y+?_2MZ\B62*7K(XK,=
     3M>(#<9O=V@,-@D2QPN`LRN9;<E@3+DJ''3/=\R&^_*O93+<F67QEGL\:,NIMD
     4M%^O%8K%8[)_^^</[#U$4R7?1V[?1WZ:S]#R:S!?I>I(N?YV=K5?KDY_*)G!&
     5M3=[/U^E\-?V41NMTM5Y%5XME_4(TFP[KYNHL^J_W_Q%]@R#.L/R;[^H:_2["
     6MPE^G\^FZU__NA*[1NZ)LM4[6F]798M-T:]X5<*I..L!L0)RW_@)BT>(JNDP_
     7MI;/%[?E6;?E7O^_.HN5T/HZ^;*YGZ71^(0;9X/*V@>_?57!Z&3#(%&(<_;18
     8M+O.SZ'TT3]/+:/UY$7U*EM-D.$M7T70>(9H!Z-G)S_*7\Q.$\NO/<B!_N<A.
     9M?H:B0)S\K(H[+D]^UE5AU6O\KL!JB?CTLD'>'URN:IRDZ.#$%,L)K7]BOV,4
     10MS3RZ7<SR^>)FFLRBZ2I*H@WQ.%EA^6<4TRI=3M/5FS==]/(CT9.R04!@Q_^S
     11MV$23Y%/5^4T:./`E72YX"Y''=P=;].9P%ZW+]'(SFJ(DGM"?VNZOZ#'IB0'T
     12MHXOPRC9@4=W#+Q=4"PUL57=8]D+0.&20LTS7'>JF0ZQB*LN9SG+%L1GV3*3^
     13M_<-?B;H,^Q=W==]H6-/Y/A)Q5!'?HMM?)8+,@66JT2];5P)68I./$+$H,WG3
     14MQ-5-5&@"19./4D2G^$+3T-<-=6BHRH80&D+3,*X;FM!0EPUU:-A@!ZC]M\DR
     15MN>E5+$,P?633!'41WY0H*5E+:M*3=`=8"'4AW:MP#R=H/$Y/H_].EG,<;^>H
     16M/JO-;$VL3K-DM(XVM]%Z$2V6ESAL#(WM+$KFEY&CVQQ5#-F.,L\T5YE!F3DL
     17M("E89C+';.:YSF+N,UES'G#L3.?KZ,O%>GJ3+ANR8)<L_3"R)CVH"E6K4%6%
     18MNL4`73+`/H0!TC4<`--A@;1<ZTPZ[@$OGGNMD>Z8&Z&LRT!P:9U7<0:2@Q7.
     19M^@R`2Z=C;`:*2V$-"&R(K)1*22,R,$S&6AMJ:IE2L9,:2QT''4OGA,G`,RFT
     20M!PMX'S/PR@L#/E.".P`7>ZLS)1DH&RMI8YLIX,9J:S3BJ!2WV+N1V&^F-),N
     21MMA9B0'R4X8JP-;'`=I8;B(TOJQS3SECKP$B<#3Q3<8S4."L1>LRM44)I)X3/
     22MM&`@L<:#4C;3LE0-T,S:@C8+@3!M`ED(";FBB2@EI59.$DW2XE]LL"O!3*P1
     23M!R>()JD,HH2(($W8CY+:6N2(4HB>E.`E8D!$(1U&2^T0`'8)SCD+FL!9#H`5
     24M8&*KB"KE%?:)I`BB2L:(`K)9B$"6$DY[CT1KAW1QC95>8Z]&(F$,6X)!*KV0
     25M(M,D5>^<TK$R1+A"><<H#"L$XIMIS9SR",DC)4BX-J@90B(;8P1)#2S#BM@@
     26M)DJA,+5C3GHGP0@)<0R9]AS),EXK1-(I%(...5:;V"O$0WN1&<&TEJ`#;V-"
     27MPTC4Q!@[0-11XJ@+!KAV/G:Q]`9)0>4U"CDD/0HLML8$R$9S\*16$A!I0L<8
     28M[E&?4!M0!31IFR&$#;)6H_RL%MB]0YIBL!8EIK6C[GT]T%7I_HSGBV7:"U:`
     29M?QE\0S??X'C'\=A4GU-I='Z.CL;MXF8SNCZ[27!NQ9_I]1E.ZOQZ=G:9GCNH
     30MH>-4LF-:T-C/IN@33>;I1<NZ#+A\(?M2=6R?GU2P-72:@]!+6O?2;%V1A20.
     31M=!\M4IBQ&RM'][HP^?$)^7B1"/_PGLOR\>Y[;@?T;M6Y?P$I-J3%NU)4HB*W
     32M+<**UI>>)9Z;?TH^/_]DHQL*2F\"6Z476>X9_LMT;G&.5OB+`SLW.#_;7&.)
     33MSQ7#*1J]()RM<_*HI43_3#;>B<)!VQX]!/:)7)?A-O"W05M7,L;."L&6O*[X
     34MV;K*062C^DU3KAA^O%`@A*I6#<U*1C5>G;F8WB2WO>4`;_M-`[='Z?RNTAFR
     35M&R^G=9.>K@I-77B8"WNN><.5^/FU#">UVI9K')/7T]DL:CBF9;UT:PMBUBS?
     36M-+0$<96N1Y/>C]N2T&I7$EK_H26AS0M(0LIZY&A;26+P8\,S5\L"@AP&ZZV%
     37MM*X6)U<7M`)R..9CEOFF/N[ZY%?DD5?.\INH7OA>IE?3.84"%HOH)IGG33S@
     38MS4GT/:+5Q`?2;)3>KL,*^6JZQ%F9P@>?"?5A&A7T7[X)JTU=2+04K6Y$*Q^Y
     39M:I%RRV=?0^&2KCU;UX;9[*JT:53:[=H5`S43X;27XT+(]3]*W=2W5M-79%1S
     40MJ<OEM"-B5$6@J_15ONCJWN@M?%R!SJ$.%U>%I!;+FVC\T0WH:9GB8]K@<G;R
     41MCUF:K-)HO<RC9)Q,YSN!GZ.1,[O<MS7WD673_J"7#(;;$G`-10FPZ5`=,`AO
     42M>]-^.YIP1:&W=(>3[7A"4MVKNAQ:;:`(>03`98&BE^H@Q`#N"D.85G0M,6P*
     43MIXEF,#U-8,B&6T&7'L<>2II@R\@]C)X`IR$I.4C27G*@18[80TZ\(STK[I.>
     44MQ=%U,YV3VEU,@36A$PM'B?5E9/I(@5KU+R50V[(5O83!L/^1!&%*0F0YK&`/
     45M(3U<D7I$K8-Z:-U@+XY`O8+4X"]:^.\-,O8XKHV]T!97NU+H:?\TD8Z!L))6
     46MS0*$QP(S9#TMP!HEO1:AC1H"]\;',:Z;8Q!8HG&M'^,KFA[D4+$>5\H8K<FY
     47M">^@9'L<-"W7Z3D>:H9K<%PT"WI%#('AJO@T<4/#>M9)X6F)'-Z4U#^%!>C)
     48M$VRZ,4/+0<2.PC($CJ(#>&,1;KL?AX![W+P%>M`('"Q(36AZ7,1[08`0HJ4R
     49M:F(1S;*U&B)5U$(7,"2$%B;`"\P"?)4:J/"2M%06VLJWBD#4NQQVUU[;EKUV
     50M8<1W9TS;LM=9$;G_:3.:X-P=ME86\S#M_._;VRC!:6:^P(G]YG:&*X[Y.KT\
     51M.XE:LTWO]N/U(.E3:'^\7&QPCK^:IK-+G/JC#3;Y/YRCRIZ^??2<9/TNC?%]
     52M-#IQP*JYUMY!]MI)=[!#NE,-Z3H>7"/MX\&D/_BA17O+:HP5F^BNW5:/LG3C
     53M7;,M!_JP"1<MB]&8/TV`&FNN[K+FSK3,WQC7Q9/^1\<F<=N.7_O&^-7^6[G&
     54M:"UQK]%5OX,VA-(0-SY`T'C+!(9[U6JC6FU4JXUNM=$MQFAJ$_"JC2GBM=^@
     55M8K/3L8K9M<>+G?"Q,NP:C<U8J0G@$TQ8T41,%!LK651"/`%VK0#O_(2-I9^X
     56MHD*:B0^PI)XX/I8P*4!+B>7C>")%\9H45.VIEJ"[ZBW)L+`L*UH:ZHF>]20T
     57M`<0C5"!ZDUJ>=E>=FR72,DUF>P9R>P.4U]N,R6R\6$[7DYOH<I&NYM^NH\^+
     58MY36N8]:3Z%N"]"T-S-$BO;J:CJ8X?(O1^?B1N.M:^99K)>4`_:K!"$?CY2`=
     59M7&TMN'W+Y"27P,B\IPIG\Y%.]>^TGOLJ9BX]DKE^U\QY-'/UO3X[N,?>='_G
     60M-KLW9]$J7;=WVINN:,*LP123PO>T8QUXO$[;*[(`X":Y1K[/%PAQOJ*58'IS
     61MN\Y#B+N&Z=I+UJ[+[?U6CXEEPZ`'?YDD\W%*9`T3VB/']^?I*%VMDF7^YLU)
     62M8:.#Q;XB2>P61-%OO_U6KL;/(XBBX3*9CR:]=-6/5IL1@;K:S'"M/%K<W&Y0
     63MUM2^EEIU[9C(]N9N\ZC:M;#=N'`;DWZK0)5O5PI1NO)4HNJ2`*'2CD)KX$50
     64MX\^!6R7,RC*@&$AD@T:)8[&;1M%H02RW]<[RG+3@CR7E8F)_C4)^!L0J0:%Y
     65MJHQ'2[AJ6^Y-A=Z2:RG8TUYN>19VU.^7\$-U0']5'7BU*O`LRJE>!<OD+F+Z
     66M=;!L%[-J')CVL-D_5+:GWE[.,\H$HL&"=QSO7H-!E-L,;#_J70ZIYU/V3L?\
     67MR3U7;'=[#9H_9-#BCD%S'#)-.Q:YYC(W*"XLTJ%(5V4H.!(0^C*+>5H*I!37
     68MH?*67!]1_=P646[+@D.'V_P^=N>XBC)9'B-/(/><TH)RQV,?MH$M_CHNC0X;
     69MP4K@Q7)*+Z(=82RUN>'.9BY75.F0J8"_AH/*?`X<RVC3F!XH]2O.N2FVCA7@
     70M15&]%#DS/FPK<YOADDV';>5PCPVES"1P";0A0F6T`ZWO4$W=88=\JQ_#$!4X
     71M8G3@"=-QP14&E-O3,`:QH[AAX(TTEIA3-"GX(QV^AARB3"BI"BY)86R+44P;
     72M[PP0LYCRE!.#_.+@B&&4^62%1T8Q#[$.C.-2!LZQV"OL&+G&D97%GGPL#;&.
     73MXHA;'`0OB(>49H8\C!LFOLB4`7L,<[0=@XCJ,(1L/>ZWXL=,?2\RP^R;8%Z6
     74MCL*,22'V6#TIY'ZK)P5TYJ8P'YT6UUU/[AZ+=;?E>TT>_:OPYIK`XK%XMFMU
     75M-5=NX<W-??:)A=R;=FJT%&JOTNA#2F/V*`TI"^D->C:LT)N'SHQ?2S^.$$/7
     76M87P&.7#*4$=KC98Z2,/B#X195'&:'L(/28JRJ2QZBOZ/JG$-I2$EGP=*>9=2
     77MK+.\HK12-+M7+]TAO=R..*$/!SRGS<2,O#=*^J\?'V36OH*R=ISB[$':V;5F
     78M1TV#Q^H6_-Z85<*-]^F"%`=T07;B3NC)L%S=D8-2'M\I#Q:UC_"$Z-:>^*>4
     79M^T(F4AX(F4BY'3(1=R!#IWKV]F@.A>&DM%M;9GNV"R6=)^G&@,,KE'^3WZ9U
     80M&+P3*]^'R,YVI93W;5=*.E12ITBW$5$LMX0,95M]_^.']Q_^\SSZL*#MCQ2'
     81MU734A/2+5*%I)TP_I3-7JQ6E";TIH!1A_?6BVI(H7FJ8/(B&&Z2QR#L*Y\OH
     82MB%TR;WH*<!:CT6:YBBXW@3!J.TIFH\TL66.+0?29GN?$K=OE8D10PM8,M@MO
     83MCQ9+-!"WB_DEO5T8"%2GL[.SIP?#U)$6IV*]#*FUWQUO@?@^$]0>NIV!NR=V
     84M<ZQ)44_NZ=BU"-]GO1[45<5/2AN:KFYG28X2HD3B(KWR[\G-<+,<ITO^H3RM
     85M62H@C:2PYU%,(O/EF3PG3Z@XUL._H#GX"*&`T,P9%9P\$"*T(#)U^BPP51M+
     86M.`2SXLI>/Q(.^9'0\2/I&"`YD1E=_ESVX+Y=L8*(;S^ET22YQ":7T6PSNGX3
     87M5<D-9;<T]&?I.D4K,&QPHZW1>\R)?&X'1FP/M(X+NF5<S.XXU$>/P[T>(ASR
     88M$,%WO8*P&_5O17L^1=O6*W&D7NUZ&%#G(@RZ4E1;Z9YIY6G,&D]#=;T_7IQG
     89M_O/(^???3^B$DG="*D]8@O`GPZ[T`@X8!K5WYE*ZJT;IGTV/_C#V0IG#]J*U
     90M-"J."^U;G=#)K'W)E%+MGS2^^HY=._?DI5WTK622I[G.=%RLEA`ZHU$TFB3+
     91M9+1&Y5JM<0SAXH:$5-3)XFP0JLZ2H)SC.KVH*$45E7_G$:7ORWY1.=_<#/$%
     92M5-I/"0X+9'Y1'OZ&L\7H.H`^+T[OD&K,5JT6S=]Y-,?.5W2;17FT!PJTH?RE
     93M(K(YL[:CC:VS:W=H(YU?:VGCM*6/='#M5>HCET+'<<*D<`9^1]TLNN7/TVW%
     94M9#3]E<%[=C5-7I&B'C:;NC&;>[-6I=X33_H)7T#3OJP,_Q5R;+&<?L$9Y!,2
     95MVF2MMN?%/>9<[P:8="O`U$U%'8RW,#,'(DT)#"^!#4>I8@F,U%9B*LJ,TDDW
     96MW2S3)@F5TDB;7-,_CP]P7`S\V"5D):('1Z2>LJN!\Q?TW_9&G8S(SNX&MK+8
     97M:MCO^I>[FQQ=P]$;COJG.>N16N$-'6.!1(^@?TJ;.[W$8G6SX69VPD?%`>,F
     98M?$-QE=,O/;033:P%T?M84!%J/D(H*3`N2IH.U/WF2\JB0NW:KF$T.F2_Q"LQ
     99M7$8?-%S&'#(4_<$/JZ;9=E[67MOP[T'^PG&B?Z5![0YKI-_6R,+A&WSI#S[?
     100MTEG&@>HW;>/&\T-?H3[C+>VA[1-T*,+6UB-GL@?M=#[0RMOGL_)[-4`]/,?]
     101MH,MG'V>4U6E2V>,:T@.L[\,\1_U:_$9[V/Q:<[RR6]M=RSQ)E?]$]OI%1NU+
     102M'9]X^XAS,H?'J3NX"4ZG:-^^[1R/HL]U4/1I5?!V5`2T4+)!)(VX*AAQ^;'2
     103MOT'Y09.MI06=N6UI;/N3)G?D/'W5W99]FRWEHWU:.E#[T6P_VO+=]J[.@+M[
     104M(K4YHZ]$T7\(J63THY&]!O];Y'0MA2J(<NA+3-(="O4ZU=EUM(P2\=%YIOPU
     105MENW-QG_N4VO';M\?UH"GQ\0/!UCV@3YVL#_/B;B#&_I/0NT93\1).G]>[1C\
     106MV"B7.:1UMOZ`#WVODS[>R50F'?.9M#F7]&5/*3)I<JJCS#]+%T9EBC*W+>5?
     107M`P-+^=J*FRRFI'@14KV+9'"P(:%>VC+%'"CW/O<-"MOAFJLC#F,^-(7S:2F?
     108MSW[`:S=JW:/O7,B$>R%$=T'`N[O.NXF,GO5\PFSP_QVN!C0D3-)R@#C>TX*"
     109MD.@BAK1].`U2Z7F!;325DJ@H2)IP@T]Q\:1UP@%-3Q`KZP'6`C66DAZ-3;CV
     110M]$C"IUH60)%.,&E/24>X/BTT!O$1"56BM20\PWLVW/.`I22<?6CB&:KA`V*L
     111M.XSD3^8D;[-RFY-\/RMYAY=;K.QRDG=8R3N\Y/<PL\5+WF8F;W-SBYG'9B$]
     112M*+FS<R)BYX0.#.[E-E(/I\6$BA8%;TWX=2&G^-CC#P>1?GA.<?M1MT$=<3B"
     113MJ]9SU?$6.]01#&'J-`L_$'X5>1ITH]'3J,VEWVO@XP,&GCZ4@+8=8LIO]JBE
     114M]+%A2=\>1NM.WU9&_<O`A/1GTB^IPN>)T;[C(Z,O$I.9-_1I9OJJ,#YQ\/@Z
     115MY4K3FZ3#1M,S4W%X!KS!MTG9L3=)\P'01X_I+)37@DH45S2!T&!Q<;C!ME+1
     116M%Z3IA)`*DP].&<89NJ.NL6_4>1,.5]%8!(!P9YCQGH8*?==3TMP"8,.A(,M!
     117MAM-"2*^-PWDBQS1-4)['TN!0I0]TNSQFRM#1II@C*IK.21&3<BEQEFJ^`BKI
     118M0Q+[PAR_YWSU(J?P*OJ>-74P1(69[I>9>?14F.2B0-61BNRI*844\&JZ";WH
     119M9^I%M7LI>R@NV]&6C$$9:>'EC7IH5_KHKLH0>W'!2B@JT0;1?:B!HD85-9IJ
     120M%(6!:E&K6M3OYR%D,5^O2HG3ASRB:5W:QK*([5#TAC[NT0T=I=DM*B2]0E&D
     121MDVB<SM-ELEXL`XQ5>C.ER,9M5%;_8S-=I9LLNDW^O[TCVXW<.+[/5W"-`#L2
     122M22W[8+.YC@SX(7ER@#SL0X+`6LQJ9]>S.B.-[!DG^?=459^\1YK16@XB06*3
     123M;'9W'5U5?56M[NZ3^.=M,@,\?;Y;+IT#QO.;ZX\/N%Z7F)E^>'VY7H16-CZ&
     124MU_?+?SXLK\_I^ROH"ZO;R]7Y:KU:WF/5TR#R_WT0Q2X@PN!Y'$C*,`8F^8X=
     125MAU6.P\K'804]GNT"K]P%7IWQ(N-0I!@'F_))GNE=H,>Y1OC/Q20FP((<QT4U
     126M07B=Z4S";X24>+YI=0U@WR_/<8JO]6W2=N"3S&86@?_&NB6U0!A3!O_-;+ZT
     127MZ_4'7[.$OF,JHZ_IO[$8>?/-S):+SZ0?Q.K>0:P>&L2VG0B!+0"&D\SQ#+-(
     128M\8@RGNNJT:LW>W&CRW+OT65S$/2TX_(PN%$X9D"K2Z+]28-`>B3P8/8QG863
     129M>,'1(#ZG$0BS23R1C8.B5.%_'*;@<QB)F`P5V)?'&!`%1T@XCL*'-?I='QGK
     130MM8;)3P8L[T`V"%CN(1L$+'>0Y;V@Q9`]R\"K.UOD5IL>.?KB"))=/#0KAZPT
     131MPS$'&@P^>'%,LYUS,+P7-`RF7(@S^+KT8_N2$%3BC!"\5CZ_P@E2/$59M'"&
     132MV;2K6Q,.ZYRPMO?(;Z?I/VC@?ECK(*V+LP&4#6"L%V%M?'7153YF:61D(G9P
     133M74-7L3`>D,#-O:@PB,HQUH*F*`N*A*],S00'#.A>G`Q^>2Z<DJ%YAT;W%P/=
     134M'U<S?[\"X*MY)!M&<@?'/=+BD4A^*?)B5Z74,TG-.SB8AI\59FZ9@*]12PJ<
     135M=R$`H7W"JMG*Z%>%$%BXT!$-S;`2,RD#2)ER5F!"85%FKIISHW1!P]<%3;/2
     136MTY**AKO2*7R<<,W1/32FG#QR%3(\]T^%,[01N+03L'-;/!/!0,`5$*I*Q@48
     137M"\)6!>2BYK/2=![S%*B%H#-E;`Z:^#8H8,:.8-JCBVDSZPMTXX]0BSU3XD^E
     138MVS#9\B[=\E["C="MEVP-JN5C9,NGZ)8W"-=#M[Q!N%ZZ#9.M0[4^HCGM6$]K
     139MT+JY?C^I0H^M:\/==MB_*&VK_N\T\]F<_WPUAXG)\QLH_)C6(ZR-(JW^%,K9
     140M*-R.XM*R=#9*Q:T&+0NC0;$KDR1A3HGRRFA1+(?$5N'TJ*817HZEH5PNS4!O
     141MF]+\`1:HO4B"7H[EU$XAU-M<H]0"%<M>@NNNPQDP#2)T:-`EP1`%!@DPA/]>
     142M]+>QWX/\7<=#A[%O\BVC-5Z#&"92TI2,IS5#\!EQKC:0,Y:CY69,(J&D`9MA
     143M2%2)D.+SLC``ULB7#%/X5.O"`%JGG)>D'M&V*PJG+.N4U59!ZK0D54@3'X53
     144MD54JBD)0DM0W4]KJQLJ;ZKB:!M661D&2U26%TYL5J;42-W>H6E%2Y94BI8@8
     145MX*JPJA+7Z*@J8\XIJR=!Q?I:<=4<524:3X6T>I/<"!;'9EDP`$>V`ZE49$0#
     146MI;7[".D%,`ZC*P\0F]5'PB`OHKDLSFBEW*"3F_5W88C'@:D0MYQ;@\T]%@@Y
     147M%X9*M!J*W"\=K;C<YDAL;E;G"4`.;(Y%*<\::$$<X]+KANO9/]17M>4,C^:C
     148M3-K'HP,LFO?S:-[/I/DDEPXQ:9-'!UAT=P[-!UDTCWDT[V/2?(A+\VDV[>'2
     149M(2:->+3!HKT<N@.#YGT<FG=8-._C46>6MCPTA@![##US#VYJ-7M:KS!4VAIL
     150M3S()R>PTVUQ]&<)M:A6G/9LET9MWWYK['/WZ`3!;]`EIHL+#5>:HB7"7IO73
     151M,G5&_(6_?_,&;G_!#?>KJ\5EM,?[;;)0Z:),%S)=B'2!%NTS5@7B80$28`$*
     152M=E&G"YV[RO.%R/%P\T%\JC_+@^:XHW[<A@ATH7VUN$W>?4LQVU>!*\.>R1T8
     153M,7Q6?4=[\>>K4P9%_O'T?O7KTJRZ)ZLT/4K^Y7/JDR1Y=^HHE9DPE'CP8_6C
     154M+P\D#^:B_2?N"3])_C,K.K_NM3CX#H\S9(PS$/^+,V"-,XWG_N`/^/),T*E`
     155MVHAQV,T>4&>*=4+Y-?QIN`&&/`-V/(/.<*`Z1:=.!Z<.=1VD)ME!J<>FA<P<
     156MS#Y$7>4`^?(!\AT(1-6MUE%0N^H.!F/5IARA,P_0\?PP4.E^MDQ;;)E:MLP/
     157M!6#=JK=.QYC1]7W9.40F?LR8$0!>):PPLLXOR6N;$Y^]QDT*Z\7JFMY_7()V
     158M>`TEO#919*<[Q_NX-:XQ;B$_JB<(,=6_RL^+:!WJSR(\;GE7)8DLT7/C"S8-
     159MQO0M*G5DEJ^E(_<R#=`L2!?`\-!J_M16/TU-CVV(@#ZAC(6"S6*M;02'/),"
     160MX@R@5[DE&_EZV;>RP4F\>5Q3OC@$8(-S5?,67(M#0#8X.4,D(UMV_TH&1]<>
     161M),+>_A55.P_CZR;AFJA\FAL:_=3*]Z^Z?FK5^?YP.ZE?]RJ#(;_+O.5WN:,E
     162ME-<2$M0$#'FV3.VB*+ZRP%5NS$?(/$!E!Y'^)&R-D-BI45]?(W3G?NO#],)'
     163M."JK#]'U'K%Z7Q^DO^V\F-$ZZSL?DW@[Q$_J:<FN,_OMED2F0%O!/*TANT[?
     164MCA]_GN<M,Z6%I"?YG]U9)TVT;<R">EK#=M57TTCS.KQ-S:<U;%=M-HDQUR[B
     165M^/T;YC37P(%QC@[]6Y%9\SSYL/H,H\B6;X'U"@3XYWO_I3P9#HW)T9D_36_=
     166MOF?):4+GW<-+Y5]R>`E9SGB2)IMR&[)4/HN@+-QD@1%B<@P?A(S:9Y244=B,
     167MG#+RD+'V&4O**&U&21E#Z]"3_Z^G`.WR+CP;.+<%+<%*\'OX:WDJW"N@T-?9
     168MB^C``_98WZ_?&U\C<X(]_S7[!A/?F.%]>/T6GR9OWX).O[VY>CB_.+E:K']:
     169MPK_5Q<G#]2J_N#SYN'P+UI4O7C2*O[A:7MW<;>='V3<F9:LP-QB4^&/R89LL
     170MSM>KGY>1-Y0Y</#-A^UZ>?2VU2+[Y62;2J%]FR2P`_#OVDYC&'<X1;;)DB(K
     171M,DCE#&ZZ*8Z.'EPA95R(;!:2A&]],H>OA?]:/?<)*IY-'$*A#*.G3Z9/G/#Q
     172M\R9LZNS-X0Y3J8S+C.M,%)F8.EE%>4NHO8`4VP4+\XH.XM!Q',$FT2+TQ$$<
     173M5D\=P5)9SV&<_4]DZ8Q!:3)C$P>S*!]76?E([(SC14^<U9(3A[4>AY"=CFS)
     174M3&75."XPR^Y<,G%$2XUC0(\CX"4=S1)X`(O3,:PR/IJ%O2I)J%\E_FA6&21?
     175M7_A2S@?"EW)TE]_6R&+`81QH]X.[*G)5LL-K2<FU5Y."OQ`UR;0L?:-$K.)8
     176M4\4Y_39^9=X,%?*Y-9[@F=19J3)59(IG:D+_F>RL@#X%LDX")^O'2CNC"^9J
     177MAZ.9BDWH2EVH\;X/[06MT%4,#K_E`'X-U?Z/N0[F'.*&UHO0<7YK?)2LE_>T
     178MFK;<K*W4:4M7(RA=$?JD1]BAIW@OOV)WY[BZE&]+Z#A`L9_FQ1$,5MAL@<X%
     179M,9G[-J,;]M`$I'*&\1O<$#0>?\:ST_'&T+";V0TJP41E?H(H[$+=J%R0KS*9
     180M"HIP2,$.L:W08M\@UFD0CHBPZ=(V?;IQ85@<>U_I;W3B-[+Z%_)PT/`.-*QH
     181M@8-I16E!:6V>%W3#"O-&[P$U\Y[G,*VB=!6E=92NHS0KGH8^>U-&+Y3S3H,W
     182M5?1"XQ?^KHXK+/`;/44,5A3H)B:M\<+3LD*W+VE95!NF<8<='9P0HB(G8KHP
     183MCL-*=""6ZPIW^:45>FK)*XJ4G:+;ER(EWV$\EPR/T]:T(YAQW!XL:#MQB=0?
     184M(;UH^V?GZ#*_+P+AY7W(4O;T:.S2JZTX.JO2#2M[>_2*"WC*,,DAP4UB`=)2
     185MT&M_HIVCT_H62VKB2&&X<%53NC:EJM^([SJLA@`&7MM$O%8,L%HQP&D]?":B
     186MVH2?88NC3<?.E#!=1FD5I:LHK:-TJ$M&=<FH+HEU(9WLG8S>E%$::@,2V9LJ
     187M>J&C=(T(4U&O0475VW-6U?&6G#NMZN.-MR)EU65>/:S$:%M8K_YJ*#%9C\WV
     188M84@"L[_,:S(,2<II\6LB*.GBOA&0]-6KV??7R?+N#E3_3_".?,R"?8_!2VWA
     189M67)_@T8".L?%O2:HM$_,5I+";!7Q/08=\;<:1OOLAE2KB^P#Y9J9NE=VB\I&
     190MN$THW)?-VV73+.<3RN:N;#]`0A?W;82"L#(M7\P+7RB0%1WZ.H?"9F2#52PW
     191M8.@E8*RM;XR'8QB9`0HW2;O6C:]3]N+*;G;I!>D1M0M3^^+ZHVG(-AE#;=EN
     192MRGR#898IP+''@7`BDUHFXY:]T717&@W\AG']F+;6H:UEHZV:O>%*2U%*\EJ6
     193M\NJ-9+44!;F\A#NPAW59@7)"OV-O5%D*=&T)[2E!_=1PY?"ALO!2NS8EMC8"
     194M776X*MT<@O(>B$T7W54'W5M0C`;=53^ZQ6-YN\(@V+Y&W1W1HV_XH59LR_Y6
     195M5`VB"_X8K.A`9=9B22S*MQQN@.)U);1`GW!(+Z:$E@$:=%Y_Z(F!JJP]?13K
     196MB'3TY^[L$5YE7\`>N<@NLW4<*9"CJ_:N17(A\B^71V<JO:S`5`CNR%\E?[]Y
     197M`)G[\Q($+5`19.[ZYB:Y6EQOP^S"JUGR/30DS#8L-^?+V[8'\U^PL1\BW^6>
     198M<E]XV<-!+!A`BSFW.9FY4>XSO*G=C8/0RRR_$7E7\AN:7QB))#%]Z>C_A<OC
     199M-:M3<]7I%\;@JNRUM%=AK]SF*\S5?E:9B^WK7U@-:2A!P470I:S,1=)%8BV0
     200M1]3VJNRU,%?F%R[0`_V0,@^;,T='I$J==/=PN^V@E^F7,UY:WW?&?9QHNH^[
     201M&'$?]^6,F0?PK2V'(Z^%M#=45-=042&4A.AEZ+Y!,S!T^IOQ<\YV9&<6F#EG
     202M@9?#<!Y]KP\3)7\B/0PI<D.%O$D`]#,^&09L("2#F`S)<#L5DN$".MQZYZ`,
     203MO.JXECS`SN->O+X?QNK[29SN$!UC"*=J_S`7"$:"#4ZP69/(W8-(HI](LKLI
     204M.X0PX%6(GM$SBJA4@\(A]!J0.3(P-M!MBA"XI!VOVQ56]1:V;16V;12V;>]\
     205M=X7IWL+8;S"^<2VJ)[5`F`%N*@-7A"Y.!L[%.;.?HI7C36YNRG1;]?J*V&^S
     206MPJ[Q`ER[V=,GN<NI=3[*,#J)7<&H8F)!?&*%DTVL<);-N>G(IVX+7CX)[^]D
     207M`X"#]-E=ROZNZ'^@;1&_$QXXT.:&%^]1-Y;8>ZS83ZS5QZOT287K\TQ&Z_.X
     208M0]5U.CFP]*6[`XU]?WS1,``)17O%%8B?-5`#"G%]M[J%!F;)K:$>#T0&X.*B
     209MJT;1[J>)W`SWHZ]O&C'(!G[BHO6)/YD>FDI6'@:XBGGWT]W-%2C7#Z!;S4F\
     210M$[B9_>EOW__EKS_\Z>W,16?"2\,2ZHYN*`(*A0I2&"EH:":N,>#@T2C#C%*X
     211M+7EY]_ETU1&M\!1TY[<]T./,!7:#@0XWLSMGL``^5D"S2^*3T"W)`+Y\6)K2
     212M<,L(%B=^S/`BFZ7:XII=&"RGV\7YA8E2=C43684>G4TQY8_)FX2W6V:+H<Z<
     213M>WS,M/E&C4$RW,-G;DUYA)N@D'<W3L=1>1'3D*.#U]>K\^7E]C4PR:`J_!_<
     214MR^2Z6-VW,:@>V.LS-Q.CQV%2_[GBA+N&@.D9"R9K=6;>&/-3@C6M'AM9X817
     215MD!3NR:2<Z!LM)</[!H:D0]*,4WG8K0&2UE#-`FKB0;.\^BQ5%IY?:EPGZ6B$
     216M.=#HY^4Y\'"5L3(3+%,B8[PZRNP+GOE?Y!HELUIEO-"9Y#+3N"NT*E0F)/-:
     217MLI:]C(G>'1HL'4:M;K#D"=(KHGLFSLO8^*]5X*.@LP(G17IL-UYJ*1U<OTY\
     218M\*Z2=$U.;KG$9@L@J'Q;88Y0#_F*<&0MLK!2B3+7T0K0[:E59DC=Y?E/-SC6
     219M#KAK[*SQ-L#GY?KZ*DO>O7\'_?(>!3K<L,8=C^\N;I:?/F5)P[Q`UQ>Q#0`B
     220MXW*Y6H,9\<^'Q=WR$TBS#&-OQK=`W/?8KS+(_0F&WB"PK'70++H.-@`U-9""
     221M;J>I8+LTXL)U:J*!)0(\!S*@(_$<>Y2D5U0T(9XGI6-^48!8C/!DEA\S1KN`
     222M-F$[@RA`:L4HQ(B`<581906Q%>/7E(D,@1OY0"=D#>S,([;P.8^.(@:A(Y)0
     223MOF,2/]\IT)$($0^E%\>(19LMQ^]QH<\V3?C,,G0#2\V`>/M@'/4#_&\$JBUA
     224MCC[_,=)0B,VH,B]+N!<?,J.9'\C@LFYEH$H927[/8)'L]\\>927&CHVB,N9(
     225M/4?$YG-XRIJ/B-K-1Q@3$A["I?$<)WYP/G2^R>$*WV%_L@]15EW>W*]G\*[G
     226M(]G\*"S!T&OS<H:*FP>4*1_P$A>S+HXZ<X."_#9T0'$O=>/EUH#N7M;?-1O)
     227M&Z#1'!=1DYID/\(CP#[-0I=O"(U`T\;CQPGBJL&(WB,0MK&R;=3^S>5I!`G%
     228MC$HN"<N0S]@WR8?E^>+A?IE4R<>;)<X>KL&._'GU<0FF&!&LV=CYI^S2$`IC
     229M$7]:G)/)&)'*FDU-@N%Q,C)"?CC%RYP$`.;.:(J=(/(>A02>,7/B=?Y#T,'L
     230M*$-B5+&XR(.HH`G/+3H2L\8!W/DBI5EQO5\OU@_WH%B__<.,)=_%#T]N'M:S
     231*_P*08Q%?G<P`````
    228232`
    229233end
  • Tst/Long/hnoether_l.stat

    ra3600c r81fb58d  
    11Status Output of tst_status.out
    2 init >> USER    :obachman
     2init >> USER    :hannes
    33init >> HOSTNAME:nepomuck.mathematik.uni-kl.de
    44init >> uname -a:Linux nepomuck.mathematik.uni-kl.de 2.0.33 #1 Wed Jan 21 18:50:57 MET 1998 i686 unknown
    5 init >> date    :Mon Oct 26 16:47:12 MET 1998
    6 init >> version :1300
     5init >> date    :Tue Apr 13 15:32:07 MET DST 1999
     6init >> version :1302
    77init >> ticks   :100
    8 1 >> tst_memory_0 :: nepomuck.mathematik.uni-kl.de:1810795
    9 1 >> tst_memory_1 :: nepomuck.mathematik.uni-kl.de:9102223
    10 1 >> tst_memory_2 :: nepomuck.mathematik.uni-kl.de:11497472
    11 1 >> tst_timer_1 :: nepomuck.mathematik.uni-kl.de:19742
     81 >> tst_memory_0 :: nepomuck.mathematik.uni-kl.de:318066
     91 >> tst_memory_1 :: nepomuck.mathematik.uni-kl.de:9174842
     101 >> tst_memory_2 :: nepomuck.mathematik.uni-kl.de:16056320
     111 >> tst_timer_1 :: nepomuck.mathematik.uni-kl.de:20420
  • Tst/Long/hnoether_l.tst

    ra3600c r81fb58d  
    5858develop(a5+i2*a4+2i*a2b+b2);
    5959kill r;
     60ring r=(0,i),(a,b),dp;
     61minpoly=i2+1;
     62develop(a2+ib3);
     63develop(a5+i2*a4+2i*a2b+b2);
     64develop((a+2b)^2+ib5);
     65kill r;
    6066ring r=(7,i),(x,y),dp;
    6167develop(x+y);
     
    276282kill HNEring;
    277283// ----------------------------------------------------------------------------
    278 // ------- test of invariants, generators, intersection,                    ---
    279 // -------         stripHNE, puiseux2generators, multiplicities, newtonpoly ---
     284// ------- test of invariants, intersection, stripHNE, puiseux2generators,  ---
     285// -------         multiplicities, newtonpoly                              ---
    280286example invariants;
    281 example generators;
    282287setring r;
    283288list hne=reddevelop((x2-y3)*(x2+y3));
     
    289294example newtonpoly;
    290295// ------- test of getnm, T_Transform, T1_Transform, T2_Transform, koeff, -----
    291 // -------         redleit, squarefree, allsquarefree, set_list           -----
     296// -------  redleit, squarefree, allsquarefree, set_list, referencepoly   -----
    292297example getnm;
    293298T_Transform(y2+x3,1,2);
    294299T1_Transform(y-x2+x3,1,2);
    295 T2_Transform(y2+x3,-1,3,2);
     300T2_Transform(y2+x3-x2y,-1,3,2,referencepoly(newtonpoly(y2+x3-x2y)));
    296301koeff(x2+2xy+3xy2-x2y-2y3,1,2);
    297302example redleit;
  • Tst/Short/hnoether_s.res.gz.uu

    ra3600c r81fb58d  
    1 begin 644 hnoether_s.res.gz
    2 M'XL("#P[IC4``VAN;V5T:&5R7W,N<F5S`.5;^X_<MA'^??\*.BB0/4LZBP^1
    3 MTKE[0!\):L`-@N:`MC!L0][3W0G9V]VLM+:4HOG;^PWUHO9Q#S_2%%TG%D4.
    4 MA^3,<.;C4/[AXL\OOF.,\7/V[!G[-E]D9^QFN<K*FVSSMC@MBW+R0TLB3HGD
    5 MAYO5IF1E5I0%NUIM>F*VR-_UI/*4O7SQ1_85NI^B_JOG?8LZ9ZA\FR_S<GKR
    6 M?$)/=M[4%65:;HO3U788,CIO^'2#[##3=M*!\[,38ZLK=IF]SQ:K]=FHM?WU
    7 M_<TIV^3+:[:9A?ZT\NL3_[(8N,?G'9=I);Q:8+KLXB9CU_G[;,F^7RWJY>HV
    8 M3Q<L+]@FN]S.\W>+C#V9O.*OSR;H__85]_GK63UY)9J*</)*-J6`3UZIKK(;
    9 M+QF/UXR83D-?G+"9[3)F''9E\7I&K6+@+?L!VU&(6R`J47N5Z@;DX3E;8Q5L
    10 M_99C@%IXE>Q7SWG?*-`(DC>">:R*ZH%$]"32DHB&Y`T/V5-T&`@E"--->COM
    11 MUH?6$RSN9AK2TCA6R?M5DHC_\MTW)-4K,H_LR02+Q!(K@0*MM9(]9[7/61[E
    12 M?#/E5!*H%$ZEZ"IE7TEEV53#P)X^97]/-TM8RAD476P7)4TNJ])YR;9K5J[8
    13 M:G.)'9"P?,DJEBXOL60JUZR?>^SQL$H")2H>HAA6G`=<1Q47GI"JXC(0B:ZX
    14 M\H0!211PA4KM2;R89MD@#3@ZR*:["F0"D@AOBH,T$*$P(/8DC\$HQE`QVA-/
    15 MQ6%<B3!0G,,`N"<4N@L1Q.`MP$R@=;"):#!"B-(/^*<+\PZSK;JR[.N%0R-:
    16 MTVY?9-]!.D32)9(.D7*(E$NDB&C8EI@)_@3RX+8158U](P.)O8,"-HFHI2<K
    17 MY:E*UH%"M<#?-2AJ!8((/50-J:)5>)S:I:>K6GDUE(IV<%&@$/20Z`;IVXYU
    18 M!([&XW&E:T]J$&(HXD7Z!J7R0!@%41533P,V1`DV(4@EZA5(=)5XW%0QYAV"
    19 M1E!7C5880AB0`=;T=TRL88`>K"FL`QA6KWX]5K_ZK%N)BLI6FT<:!??5XPQ$
    20 M.!T>9"S2Z7"WX8BNC`ZTD+$5'7:^9$5C"SIH/3"/0)/Y6-O8-1]/))4.DM!:
    21 MCXIWK(?L`>:C--F/")4U(!XI:T'"L2`)"XI":T*1;&TH$M:(=&BMB'K#CD02
    22 MD25Q:8F%)\$,QN3%9'$*AA1J,BMAC"+#$AI/F%:@8[(]+"D".;AI<F7<TR&W
    23 M]N;)!`XIH=D)2<8(XS58*;DW;F#YG-/,-'E*<.-"D]UB%W`>:>O^$D4>$[$L
    24 MAF\C<N$IB`7D\*)A;"1Y1Z$%5LTA9<XUE00M024)N5<40O*2$'42AY9,0"C&
    25 M1.1)%>A1AZTJE217BYX:[C,D]QH)'A-5'9@X-#%Y6FD,D1DPD]8WD_#"$%1Q
    26 M#7U%D*X(O<AHJ%60VT='>.!^TYDVCMYDM]FLJF,/_T$1VAJ)]D@WD:>M,$G"
    27 MTK.2\905(FUD1'4NAG`+X++(`8-NEMFLV\W$^Q,WL[.7=3\60,L:&*J<8C#L
    28 M:0P1^I7/0A_/@*/H/+G/-.MZ"J"/'_/%@FWZB0M@CA:/"8O'_'*$R$0'.*YF
    29 M!%8@;YAI%0_M>SCCBK!`%[R?L'^NMNPF?9_!QP%:9)<(W2MVFRYK]C[=Y"G@
    30 M6_%DPOZ`2?7O"//S;`W`"U1RE6\@U?+#BGV@B;_+6'Z]7`'Z/;$P335":D6L
    31 M!A'SQX"(R`$1?`0BRA;_E+%7)OV:U;X8H^.P&)-]"#(6>A\9KX<!8+`#HRF<
    32 M4DV!HD%K%KM=K;;+R_T*QG[YY9=V]6=,,/9NDR[G-].L.&'%=C[/BN)JNX""
    33 MYZO;];:$@D#?AXKNN1,U=@+'3NS8"1E#U.#.:Q<&.E_>N'-;(_L:V[]SZ8U_
    34 M%U]B8L%GF%FG*'B"(BL;30[J2UJ3@6*HJ6^0H>,X'`5/@1'H<'#RU):`OT^^
    35 MH+J[R?!#<Y?BV-SER":GE0D(/&':%*KJ"'-'E45><)QM'59!L\6^6"VS=G;M
    36 MW(_5.XO\B.:Q1-0G;P`^MK-`[-@*0.W=IE+C-!)5-4X)P`8Q80A9FR");?@A
    37 M*&("PA`4@"2%?8V#26@CD04#46`TQ7IJ-!:(&$(BTN*`)KA[](+#"D&$J`E9
    38 M.'@DA`]LR/:BN`GT%/@]9<.9+1-`X!85"`K>@8W]",9W;#NU(P[^3'V,0*25
    39 M2*2L3``M&JEX(M9&#((A0,+#1C:$3"(*U432R(<;"]"!ZDW$92,E'D;:$92G
    40 MHM@`'!`>ES$=RP@,"<+OZ)]H;7&2%XM$6<$%=((C*)3$A,D(NTO18H&$1Q;2
    41 M&QV/)"@((5FX2#),!B'*7\NILC$&9ST,Y\[K83_W$!^LOL0ZQ*^^CLZ-J6/^
    42 MS0;UG7!-\.%V32CE0U[>L/E-NKS."$I8KYE59;8L\M6RY]%%];_-)/"IW(_L
    43 M<C>R>S:RLS\UG.'2WJ5%9GDL,_)6Z:9^\N1_+/)/TY/?:NR?!I]C;ITRXV.V
    44 ME+0X^UO1`NV1$:AP9`0NU+XC8(XUS#^WAL-C8K2I`3<.1F.9ZT?Z++=5C5^C
    45 M\:MN^SK:47Y@[@LP'AW@Z']A,Z[T%XZA"!\>MEME>BWP(]I3X@Y/T#B"6QQ*
    46 M<&))EU9-5M6-;^AYR-83?"MG!]R`4D>`8"4#2F#4!`6;G#B>"H"PMDN"LWB`
    47 MM_BMMR^S#^P6#NPV7=CC9I/E/V.4A)%![?%[.5`*&]9_N;J%M>-8ER]3>,/6
    48 M/7]("_2ZO&,<Q.L:H9R@""4#C->.+.S@]SO;_U+%V`,DCX/["O'M-EVSB^<X
    49 M\^)H/-BB[@_]#S"_H1LB&5U/3?,9!\O?SXK\YXR2%"=X\[P3]J^>,CYE[&+6
    50 M*=)O,@B4SLA?#_RBD*BF5TZ-.&7_GH1[?[IF>63_1NKX\1PA^R''\R@Z/7`V
    51 MBO2!O`^)B203U-$=R?R.`X0V3(%DX-,=U/VYVD,YV2$QZB1%AWNO2N-,0(Y/
    52 M>=*F0>EV*J"Y8L;]A.*]"2E[*<;;1/)C;Q<>GDCN&]3G6TVRMQH>[BR'RMJ6
    53 MI2W'37UH7WC8M,2?L&K>AS$W.E+9..78*2=.F8<?)[Z="-J&S^8T1B_&:8BI
    54 M1_^6N`.&U">^3QD\I!LNY27VHLN+3&CSKZ&QR5I*T-(5BS24Z^6Q3?#:$QQ7
    55 M06QL8IGRNB(P<9.OIH=G3[,X2''*B2<V;8[3&#&R^7BZ?[E#];K+=D+I_8;5
    56 M_+@GL%[HH!,8>0(-)S1.>=H-_Q&7J[*[7.WSTGHOG6H!"VS\*/M'Y#G%D.?<
    57 MO2O=O^?5=_C,R[Q8+](:J[K39VKXS`XD#5V>TY37F]7<J6-7&P3N1?Z.N9\=
    58 M3+[YQQ_^^OW+;\C"#J1&61>D("![R5,+JFS]\6Q(2!^1'',F`,_0`&TKCMK[
    59 M&1V>_CSE)[;.2B:@US=BTJ]N_U.(3_WUK,VIP[H7>[ZT.?)E6?C=U%\X5=?9
    60 M,MNDY6J#,@)ZMBFR>8FSJ,]<UO&(=?<K$-G66*K/UMN\R+:5<+G=PJ3R]2*?
    61 MYV6>X1TPJEPMK?1=ULF@[F&J@[J'NGO5W1ZFZ3%6^5ZPI=NN!M%K`O2/NF^A
    62 MLKU;H22>Y9QMKF?#-!OL,J%:F,5SMO_#TNB6`C!S@\T&,%.4^1P37^,0``83
    63 MY6O?-`S$:Y\><LRG9=`*'7L_WQ2T-=?I_$>@-<"IVXGT#;/Y#.JO7K-G3.S.
    64 MI65SF2W*-.@7,(F;/M%=<R^RG[;9<FZ1]5C/F#W=KW:'M8,_,+E8=<9H^3E:
    65 MMF>BKY?Y/%O47T.K>S;;"?B8_!@[8ZT(QQ)R?V?,WI9-#?["&-GU)K.+L8I9
    66 M+2^W<QBQI>-ZTHAHF.2(#\0U6#VQ*++;_'JS@@_M9L(1/H]+C&@:D75[PH3G
    67 MNR[PQ8&ML=?T6]PA_X_JXX/Z!MZ#WISQ/BV"\2@0G+Y%BNW].>6,`ZXM,!+-
    68 M?7M`B7FOR333C3VEH(6RN6F;J1YV*76D6P"A;=Z[N<6.;=+<WFX'O(Z=0)G=
    69 M$RD/F09E^0]\>A(/U]5<0!V.?%I;B7T.%MJ/Y"!C<2SS@<-W=^S\-:Z_#,"7
    70 M&S?;^W6?'H+.I?T5O%&#6721<S"*KN8C3>+H>?(XCK$(]\L<&57S":,%U@-,
    71 M:+7Y188,!\N(S@_`D2ET]#Z;P]",SR-?XD0E857FQ&\;A-__(:O1RD^T+\+8
    72 M5T+Y<80IF5#[4O$>ZQI]Z.+3X&@^=A`#XH^\VHP@^4'W>0#Z1]:_="/$@QT-
    73 MF&JP)`=G/<R6=@+"HG!]3&3C0&"3H)(^?H,KJ`U1#.-8']"I-?1UKRP"()VN
    74 M(.Y>6Y%/VLWF-RLL.1QDEYP?0K#76;F\]=G%VPOLRX+0#5[XZ$VX;S^NLJLK
    75 MGXW`<1P>1+#P'(LL+WU6_+1--]D5PHC/TL7"?86.W]KM-?S&K/FIX^XQ5=?3
    76 MX_5^+;1;FF3A?-[,.B6@'FJ@[\,"VE'*-EG65O""1;WQQW"+CIR:@Z#/;7:H
    77 M<HZY,;R6*\+NRX&.5#JD<%NN?%N>`??E*.E4NQ\V=WVQ%ZTVR!WAM$46)`+[
    78 M?5W=C=7OIU@/=MWJ99!D6W&W+(\8=.,A6P[36MM/#<20T==^[QQ$[P^4;[]\
    79 M!D%'6JM!S,9QY;VI.,Z\KWL4)',S_`Z/*:FCT\JX'K5\7&75-Z["$JD2CU']
    80 MM`+7-Q*A,L`3_6B#M)7D?!:KHIR@[4`G->XTI`]L<],XH4@\''QCQVN--M@@
    81 MM5'UXWR7.82/FKF:=JYQW[*8.0NB'83P:=<!N@82L'?9/-T6&3/L<I45;+DJ
    82 M`63?YY<9\*(5R7BRTRM_T8@"U>PJG5MPYPBC11H[(DE:#/-R1H^I=:5$[6.@
    83 M=&%7-*2QD_"\=T73ET/8XB<^[6SC;$6:8;<9;:JF-E[5?@XKZ(OJCB5W_T$'
    84 38M'SWTWX@7_E\1\)I->'?#(`````
     1begin 640 hnoether_s.res.gz
     2M'XL(",%%$S<``VAN;V5T:&5R7W,N<F5S`.5;^8_<MA7^??X*.BB064M:BX=(
     3M:=U9H$>"&G"#H#'0%H9MR+.:72&S,Y.1QI92-'][OT==U!SK71]IBHX3BR(?
     4M'\EW?B3E'U[\^=EWC#%^R9X\8=_FR^R"W:S667F3;=\4YV513GYH2<0YD?QP
     5ML]Z6K,R*LF"+];8G9LO\;4\JS]GS9W]D7Z'[.>J_>MJWJ$N&RC?Y*B^G9T\G
     6M]&2735U1IN6N.%_OAB&CRX9/-\@>,VTG'3@_.S&V7K"K[%VV7&\N1JWMK^]O
     7MSMDV7UVS[2STIY5?G_E7Q<`]ONRX3"OAU0+392]N,G:=O\M6;+->UJOU;9XN
     8M65ZP;7:UF^=OEQE[-'G)7UU,T/_-2^[S5[-Z\E(T%>'DI6Q*`9^\5%UE-UXR
     9M'J\9,9V&OCAC,]MES#CLRN+5C%K%P%OV`[:C$+=`5*+V*M4-R,-+NPJV><,Q
     10M0"V\2O:KY[QO%&@$R6O!/%9%]4`B>A)I241#\IJ'[#$Z#(02A.DVO9UVZT/K
     11M&19W,PUI:1RKY/TJ2<1_^>X;DNJ"S"-[-,$BL<1*H$!KK63/61UREB<YWTPY
     12ME00JA5,INDK95U)9-M4PL,>/V=_3[0J6<@%%%[ME29/+JG1>LMV&E6NVWE[!
     13M`Q*6KUC%TM45EDSEFO5SCST>5DF@1,5#%,.*\X#KJ.+"$U)57`8BT157GC`@
     14MB0*N4*D]B1?3+!ND`4<'V717@4Q`$N%-<9`&(A0&Q)[D,1C%&"I&>^*I.(PK
     15M$0:*<Q@`]X1"=R&"&+P%F`FT#C81#48(4?H!_W1AWF&V55>6?;UP:$1KVNV+
     16M[#M(ATBZ1-(A4@Z1<HD4$0UNB9G@3R"/NHVH:OB-#"1\!P4XB:BE)ROEJ4K6
     17M@4*UP-\U*&H%@@@]5`VIHE5XG-JEIZM:>364BG9P4:`0])#H!NG;CG4$CL;C
     18M<:5K3VH08BCB1?H&I?)`&`51%5-/`S9$"38A2"7J%4ATE7C<5#'F'8)&4%>-
     19M5AA"&)`!UO1W3*QA@!ZL*:P#&%:O?CU6O_JLKD1%9:O-`XV"^^IA!B*<#O<R
     20M%NETN-MP1%=&!UK(V(J.!U^RHK$%';4>F$>@R7RL;>R;CR>22@=):*U'Q7O6
     21M0_8`\U&:[$>$RAH0CY2U(.%8D(0%1:$UH4BV-A0):T0ZM%9$O6%'(HG(DKBT
     22MQ,*38`9C\F*R.`5#"C69E3!&D6$)C2=,*]`QV1Z6%($<W#2%,N[ID%M[\V2"
     23M@)30[(0D8X3Q&JR4PALWL'S.:6::(B6X<:');N$%G$?:AK]$4<1$+HL1VXA<
     24M>`IB`3FB:!@;2=%1:(%5<TB9<TTE04M024+A%860HB1$G<2A)1,0BC$115(%
     25M>M3!5:62%&K14R-\AA1>(\%CHJH#$X<FID@KC2$R`V;2QF827AB"*JZAKPC2
     26M%:$7&0VU"@K[Z(@(W#N=:?/H37:;S:HZ]O`?%*&MD6B/=!-YV@J3)"P]*QE/
     27M62&2(R.K<S&D6P"790X8=+/*9ITW$^]/=&;'EW4_%D#+!ABJG&(P^#2&"/W*
     28M9Z&/9\!1=)[<9YIU/070QX_Y<LFV_<0%,$>+QX3%8WXY0F2B`QR+&8$5R!MF
     29M6L5#^P'.6!`6Z)+W(_;/]8[=I.\RQ#A`B^P*J7O-;M-5S=ZEVSP%?"L>3=@?
     30M,*G^'6E^GFT`>(%*%OD64BW?K]E[FOC;C.77JS6@WR,+TU0CI%;$:A`Q?PB(
     31MB!P0P4<@HFSQ3QE[9=*O61V*,3H-BS'9^R!CH0^1\688``8[,)HB*-64*!JT
     32M9K';8KU;71U6,/;++[^TJ[]@@K&WVW0UOYEFQ1DK=O-Y5A2+W1(*GJ]O-[L2
     33M"@)]GRJZYU[6V$L<>[EC+V4,68,[KUT:Z&)Y$\YMC>QK;/\NI#?Q77R)B06?
     34M86:=HA`)BJQL-#FH+VE-!HJAIKY!AD[@<!0\!4:@S<'98UL"_C[[@NKN)L./
     35MS5V*4W.7(YN<5B8@\(1I4ZJJ(\P=519Y(7"V=5@%S19^L5YE[>S:N9^J=Q;Y
     36M$<UCB:A/=@`^MK-`[-D*0.W=IE)C-Q)5-78)P`8Q80A9FR");?HA*&("PA"4
     37M@"2E?8V-26@SD04#46`TY7IJ-!:(&$(BTN*`)KE[](+-"D&$J$E9V'@DA`]L
     38MRO:BN$GTE/@]9=.9+1-`X!85"$K>@<W]2,9WN)W:$P=_HCY&(-)*)%)6)H`6
     39MC50\$6LC!L$0(.%A(QM")A&E:B)IY,.-!>A`]2;BLI$2#R/M",I346P`#@B/
     40MRYBV902&!.%W]$^TMCC)BT6BK.`"VL$1%$IBPF2$W:5HL4#"(POIC8Y'$A2$
     41MD"Q<)!DF@Q#EKQ54V1B#LQZ&<^?U>)R[3PQ67V(=XE=?1Q?&U*GX9I/Z7KHF
     42M^'"[(93R/B]OV/PF75UG!"5LU,RJ,EL5^7K5\^BR^M]F$OA4'F9VN9_9/9O9
     43MV9\:S@AI;],BLSQ6&46K=%L_>O0_EOFGZ=EO-?=/@\\QMTZ9\2E;2EJ<_:UH
     44M@?;("%0X,@(7:M^1,,<:YI];P^$I,=JC`3</1F.9ZP?&++=5C5^C\:MN^SK:
     45M47Y@/I1@/-K`T?_"GKC27]B&(GUX<+?*]%K@)[2GQ!V1H`D$M]B48,>2KJR:
     46MK*J;V-#SD&TD^%;.CH0!I4X`P4H&=(!1$Q1LSL3Q5`"$M5T2@L4]HL5OO1U[
     47MIU7VGMTBAMVF2^>@_X*EVDLC+U5>*KV4@/H7'(H++^4\2'D8I(F7QD$W>)#*
     48M($5JOT?8_2]5C&-!\C#@KY#I;M,->_$4NU]LD@>KU/WV_QZ&.'1#3J.+JFD^
     49MXV#Y^UF1_YS1<<49WCSOC/VKIXS/&7LQZS3E-V<)=+"1OQKX12%131=.C3AG
     50M_YZ$!W^Z9GG"DR-U>J..Y'V?C7H4G1_9)47ZR`D0B8DD$]31'<?Z'0<(;9@"
     51MR<"GVZ@/G]H>.YT=CDB=X]'A!JS2V!U0"%2>M`>B=$\5T%PQXWY"\<&$E+T>
     52MX^V1\D/O&>Y_I-PWJ,^WFN1@-3S<6PZ5M2U+6XZ;^M"^\+!IB3]AU;Q/:&Z>
     53MI+)QRK%33IPR#S].?'NYM$VDS;Z,7HS3$%./_BUQ!PRI3_PA9?"0[KJ4E]@K
     54M+R\RH3V)#8T]MJ6C6KILD89.?7ELCWKM7HZK(#;VB)E.>$5@XN;DFAZ>W==B
     55M2\7I=#RQ!^C8EQ$C>S)/-S%WJ%YWYYY0>N^PFI^.!#8*'0T"HTB@$83&AY_6
     56MX3_BFE5VUZS]";4^.%BUT`4V?I+]`TX\Q7#BN7]K>GCCJ^^(F5=YL5FF-59U
     57M9\S4B)D=7!JZ/*4I;[;KN5/'%MOU+7W8P-P/$";?_.,/?_W^^3=D84<.25F7
     58MI"`@>]U3"ZILX_%L.)H^(3GF3`"1H8'<5ARU]S,Z//YYRL]LG95,0*^OQ:1?
     59MW>%'$9_ZZUF;<X=U+_9\94_+5V7A=U-_YE0AB6?;(IN7V(GZK$"NVF#R/KS3
     60M91V/6'>_S2XOLETEKK-5MDW+]1;\;F%(^6:9S_,RS_`.`%6N5U;FP\]EG0SJ
     61M'J8ZJ'NH^Z"ZVVTU/<8J/TBV=._58'M-T/Y!-R]4MK<L=)QG.6?;Z]DPS0:[
     62M3*@69O&4'?ZP-+JO`.;?PMD`9HHRGV/B&VP'P&"B?.V;AH&XB\$@=M(SU139
     63M;7Z]7<-]4?$N7>ZRAAN7#3OYRJ>'&G-MV7W?:!.A)`='>/HFG?\(\`=T=CN1
     64MOF'VH(3Z1Z_8$R;V9]:RN<J691KT\IC$31]]UTJ*[*==MII;)#XV($R?+FZ[
     65M7>#1'YB\6'>V;?DY1F,W6U^O\GFVK+^&D1RX0*>O4^I@[(*U&AD+?!!V1T)B
     66M'DO1_5TP>U4W-?@+\\BNMUG6*6Z^7EWMYN!LZ;B>-&(<%C+B`Y&>EAA-I1%9
     67MYV(FO-R/J,^.>-I!TV_1X?X?U<=/;?=%T.^P?HT['R,N1^FBO53VZ2%H"];?
     68M.QLY6%R74@9#ZVH^,G^?W#J=3MD6S'V9W9%JOMNS&)+U2VNM\HL,&0Z60=_7
     69M'>3@*73T+IO#6HW/(U]B\R!]+LR9WS8(O_]#5J.5GVA?A+&OA/+C"%,RH?:E
     70MXCVL,]&QVSX#+#,VW@'<1EYM1NCSJ&L?0;F1M?UN!#/8T0`D!DMRP,7];&DO
     71M6"T+%Q!&-D8%]N1/TA=?M0YJ0Q3#.!88=FH-?=TKBY)CIRN(N]=6Y)-VL_G-
     72M&DL.!]G%E\?`VG56KFY]]N+-"_AE09D7+WST)MRW']?98N&S$0XTR1BL(60L
     73ML[P$N/MIEVZS!>*6S]+ETGV%<M^07_F@7F1;"DTM9!NQCL,!K-FI#JJPKQ_6
     74M0NO2)`OGFU[6*0'U4`-]%!601RG;9%E;P0L6]<8?(RPZ<FKV/#ZW!R&5LZ.+
     75M$;5<$7;7Y1VI=$@1MESYMCP#;-%AE?;%T7[M?M/;<5"#P8XD.0AJ+."/2K$D
     76ML1&;*>FN\WOZU&5P==F7(Y_W9>.'9^2>S5=GLCG?-H-LX>_6M"BV8I=$[B`"
     77M^X5<W0FN#PZQ=M=L;<U=K:VX>YTGO+,)]RV'::WMQP)B.)/7?A_I1+\RY=MO
     78MET'0D=9J6)<33P;S=S)37_<@Q;AG]`Z/*=E69V+C>M3R<96UQ7$5EDB5>(SJ
     79MIQ6XOI;(^P&>Z$?>WE92)%VNBW*"MB.=U+C3L.VWS4WCA&#%L&&-XT%DHZ`Q
     80M2&U4_;!`;([MS)NYFG:N<=^RG#D+HG``+&#7`;H&W["WV3S=%1DS[&J=%6RU
     81M+H$8W^57&4"7%<EXLM.%OVQ$@6JV2.<6'#K":&'3GDB2%I`]GUF_LQY(U#X&
     82M2I=V1</Q<Q)>]N%U^GQP3#@CA2GC1!2:81=3[!%+;>">+3B@;Z([EMS])QE(
     833K$]_-^%'_IW&?P`(#+9S/C(`````
    8584`
    8685end
  • Tst/Short/hnoether_s.stat

    ra3600c r81fb58d  
    11Status Output of tst_status.out
    2 init >> USER    :obachman
     2init >> USER    :hannes
    33init >> HOSTNAME:nepomuck.mathematik.uni-kl.de
    4 init >> uname -a:Linux nepomuck.mathematik.uni-kl.de 2.0.33 #1 Wed Jan 21 18:50:57 MET 1998 i586 unknown
    5 init >> date    :Fri Jul 10 18:03:01 MET DST 1998
    6 init >> version :1200
     4init >> uname -a:Linux nepomuck.mathematik.uni-kl.de 2.0.33 #1 Wed Jan 21 18:50:57 MET 1998 i686 unknown
     5init >> date    :Tue Apr 13 15:25:18 MET DST 1999
     6init >> version :1302
    77init >> ticks   :100
    8 1 >> tst_memory_0 :: urmel:421708  nepomuck.mathematik.uni-kl.de:397222
    9 1 >> tst_memory_1 :: urmel:355148  nepomuck.mathematik.uni-kl.de:355958
    10 1 >> tst_memory_2 :: urmel:606208  nepomuck.mathematik.uni-kl.de:401408
    11 1 >> tst_timer_1 :: urmel:1882  nepomuck.mathematik.uni-kl.de:616
     81 >> tst_memory_0 :: nepomuck.mathematik.uni-kl.de:228005
     91 >> tst_memory_1 :: nepomuck.mathematik.uni-kl.de:314357
     101 >> tst_memory_2 :: nepomuck.mathematik.uni-kl.de:385024
     111 >> tst_timer_1 :: nepomuck.mathematik.uni-kl.de:326
  • Tst/Short/hnoether_s.tst

    ra3600c r81fb58d  
    6363example displayHNE;
    6464// ----------------------------------------------------------------------------
    65 // ------- test of invariants, displayInvariants, generators, intersection, ---
    66 // -------         stripHNE, puiseux2generators, multiplicities, newtonpoly ---
     65// ------- test of invariants, displayInvariants, intersection, stripHNE,  ---
     66// -------         puiseux2generators, multiplicities, newtonpoly          ---
    6767example invariants;
    6868example displayInvariants;
    69 example generators;
    7069list hne=reddevelop((x2-y3)*(x2+y3));
    7170intersection(hne[1],hne[2]);
     
    7675example newtonpoly;
    7776// ------- test of getnm, T_Transform, T1_Transform, T2_Transform, koeff, -----
    78 // -------         redleit, squarefree, allsquarefree, set_list           -----
     77// -------  redleit, squarefree, allsquarefree, set_list, referencepoly   -----
    7978example getnm;
    8079T_Transform(y2+x3,1,2);
    8180T1_Transform(y-x2+x3,1,2);
    82 T2_Transform(y2+x3,-1,3,2);
     81T2_Transform(y2+x3,-1,3,2,y2+x3);
     82example referencepoly;
    8383koeff(x2+2xy+3xy2-x2y-2y3,1,2);
    8484example redleit;
Note: See TracChangeset for help on using the changeset viewer.