source: git/libfac/charset/charset.cc @ 9e9b7c

spielwiese
Last change on this file since 9e9b7c was 9e9b7c, checked in by Hans Schönemann <hannes@…>, 16 years ago
hannes: minor irras changes git-svn-id: file:///usr/local/Singular/svn/trunk@10732 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 18.0 KB
Line 
1/* Copyright 1996 Michael Messollen. All rights reserved. */
2////////////////////////////////////////////////////////////
3// emacs edit mode for this file is -*- C++ -*-
4/* $Id: charset.cc,v 1.15 2008-05-31 17:20:10 Singular Exp $ */
5/////////////////////////////////////////////////////////////
6// FACTORY - Includes
7#include <factory.h>
8#ifdef HAVE_IOSTREAM
9#define CIN std::cin
10#else
11#define CIN cin
12#endif
13// Factor - Includes
14#include <SqrFree.h>
15#include <Factor.h>
16#include <interrupt.h>
17// Charset - Includes
18#include "csutil.h"
19#include "algfactor.h"
20#include "alg_factor.h"
21// Some CC's need this:
22#include "charset.h"
23
24#ifdef BASICSETDEBUG
25#  define DEBUGOUTPUT
26#else
27#  undef DEBUGOUTPUT
28#endif
29
30#include "debug.h"
31#include "timing.h"
32TIMING_DEFINE_PRINT(subfactorize_time);
33
34
35// forward declarations:
36static CFList     irras(CFList & AS, int &ja, CanonicalForm & reducible);
37
38#ifdef BASICSETDEBUG
39#  define DEBUGOUTPUT
40#else
41#  undef DEBUGOUTPUT
42#endif
43#include "debug.h"
44
45#ifdef SINGULAR
46#define HAVE_SINGULAR_ERROR
47#endif
48
49#ifdef HAVE_SINGULAR_ERROR
50   extern "C" { void WerrorS(const char *); }
51   extern "C" { void WarnS(const char *); }
52#endif
53
54// the next computes a characteristic set (a basic set in Wang's sense)
55CFList
56BasicSet( const CFList &PS )
57{
58    CFList QS = PS, BS, RS;
59    CanonicalForm b;
60    int cb;
61
62    DEBOUTLN(CERR, "BasicSet: called with ps= ", PS);
63    if ( PS.length() < 2 ) return PS;
64    while ( ! QS.isEmpty() ) {
65        b = lowestRank( QS );
66        cb = rank( b );
67        DEBOUTLN(CERR, "BasicSet: choose b  = ", b);
68        DEBOUTLN(CERR, "BasicSet: it's rank = ", cb);
69        BS=Union(CFList(b),BS);//BS.append( b );
70        if ( rank( b ) == 0 )
71            return Union(PS, CFList(b)) ; // b should be the first elem!
72        else {
73            RS = CFList();
74            // QS:= {q \in QS -{B} | q is reduced wrt b}
75            // We can process whole QS, because b is not reduced wrt. b
76            for ( CFListIterator i = QS; i.hasItem(); ++i )
77                if ( degree( i.getItem(), cb ) < degree( b ) )
78                    //RS.append( i.getItem() );
79                    RS = Union(CFList(i.getItem()),RS);
80            QS = RS;
81        }
82    }
83    DEBOUTLN(CERR, "BasicSet: returning bs= ", BS);
84    return BS;
85}
86
87int
88checkok( const CFList & PS, CFList & FS2){
89  CanonicalForm elem;
90
91  for ( CFListIterator i=PS; i.hasItem(); i++){
92    elem= i.getItem();
93    for (CFListIterator j=FS2; j.hasItem(); j++){
94      if (elem == j.getItem()){
95         //        FS2= Difference(FS2,CFList(elem));
96         return 0;
97      }
98    }
99  }
100  return 1;
101}
102
103#ifdef MCHARSETNDEBUG
104#  define DEBUGOUTPUT
105#else
106#  undef DEBUGOUTPUT
107#endif
108#include "debug.h"
109
110// The modified CharSet (an extended characteristic set with certain factors
111// canceled; this is a characteristic set in Wang's sense)
112CFList
113MCharSetN( const CFList &PS, PremForm & Remembern ){
114  CFList QS = PS, RS = PS, CSet, OLDCS;
115
116  DEBOUTLN(CERR, "MCharSetN: called with ps= ", PS);
117  while ( ! RS.isEmpty() ) {
118    CSet = BasicSet( QS );
119    OLDCS=CSet;
120    DEBOUTLN(CERR, "MCharSetN: CS= ", CSet);
121//     if ( getNumVars(CSet.getFirst()) > 1 ){
122//       //CSet = removecontent(CSet, Remembern);
123// #ifdef MCHARSETNDEBUG
124//       CERR << "MCharSetN: CSet= " << CSet << "\n";
125// #endif
126//     }
127    Remembern.FS1 = Union(Remembern.FS1, initalset1(CSet));
128    DEBOUTLN(CERR, "MCharSetN: Remembern.FS1= ", Remembern.FS1);
129    DEBOUTLN(CERR, "MCharSetN: Remembern.FS2= ", Remembern.FS2);
130    RS = CFList();
131    if ( rank( CSet.getFirst() ) != 0 ) {
132      CFList D = Difference( QS, CSet );
133      DEBOUT(CERR, "MCharSetN: Difference( ", QS);
134      DEBOUT(CERR, " , ", CSet);
135      DEBOUTLN(CERR, " ) = ", D);
136//CERR << "MCharSetN: Difference( " << QS << " , " << CSet << " ) = " << D << "\n";
137      //PremForm Oldremember=Remembern;
138      //PremForm Newremember=Remembern;
139      for ( CFListIterator i = D; i.hasItem(); ++i ) {
140        CanonicalForm r = Prem( i.getItem(), CSet );
141        DEBOUT(CERR,"MCharSetN: Prem(", i.getItem()  );
142        DEBOUT(CERR, ",", CSet);
143        DEBOUTLN(CERR,") = ", r);
144//CERR << "MCharSetN: Prem("<< i.getItem() << "," << CSet << ") = " << r << "\n";
145        if ( r != 0 ){
146          //removefactor( r, Newremember );
147          removefactor( r, Remembern );
148          //Remembern.FS2 = Union(Remembern.FS2, Newremember.FS2);
149          //Newremember = Oldremember;
150          //if ( cls(r) > 0 )
151            //RS=Union(CFList(r),RS);//RS.append( r );
152            RS=Union(RS,CFList(r));
153        }
154      }
155      if ( ! checkok(RS,Remembern.FS2)) return CFList(CanonicalForm(1));
156      DEBOUTLN(CERR, "MCharSetN: RS= ", RS);
157      //QS = Union( QS, RS );
158      QS = Union(OLDCS,RS);
159      DEBOUTLN(CERR, "MCharSetN: QS= Union(QS,RS)= ", QS);
160    }
161    else{ return CFList(CanonicalForm(1)); }
162  }
163  DEBOUTLN(CERR, "MCharSetN: Removed factors: ", Remembern.FS2);
164  DEBOUTLN(CERR, "MCharSetN: Remembern.FS1: ", Remembern.FS1);
165
166  return CSet;
167}
168
169
170CFList
171mcharset( const CFList &PS, PremForm & Remembern ){
172  CFList cs= MCharSetN(PS, Remembern );
173  CFList rs= remsetb(Difference(PS,cs),cs);
174
175  DEBOUTLN(CERR, "mcharset: cs= ", cs);
176  DEBOUTLN(CERR, "mcharset: rs= ", rs);
177  if ( rs.length() > 0 )
178    cs= mcharset(Union(PS,Union(cs,rs)), Remembern);
179  return cs;
180}
181
182// the "original" extended characteristic set
183CFList
184CharSet( const CFList &PS ){
185  CFList QS = PS, RS = PS, CSet;
186
187  while ( ! RS.isEmpty() ) {
188    CSet = BasicSet( QS );
189    DEBOUTLN(CERR, "CharSet: CSet= ", CSet);
190    RS = CFList();
191    if ( rank( CSet.getFirst() ) != 0 ) {
192      CFList D = Difference( QS, CSet );
193      for ( CFListIterator i = D; i.hasItem(); ++i ) {
194        CanonicalForm r = Prem( i.getItem(), CSet );
195        if ( r != 0 )  RS=Union(CFList(r),RS);//RS.append( r );
196      }
197      QS = Union( QS, RS );
198    }
199  }
200  return CSet;
201}
202
203static CFList
204charseta( const CFList & PS ){
205  CFList QS = PS, RS = PS, CSet;
206
207  while ( ! RS.isEmpty() ) {
208    CSet = CharSet( QS );
209    RS = CFList();
210    if ( rank( CSet.getFirst() ) != 0 ) {
211      CFList D = Difference( QS, CSet );
212      for ( CFListIterator i = D; i.hasItem(); ++i ) {
213        CanonicalForm r = Prem( i.getItem(), CSet );
214        if ( r != 0 )  RS=Union(CFList(r),RS);//RS.append( r );
215      }
216      QS = Union(CSet,Union( QS, RS ));
217    }
218    else return CFList(CanonicalForm(1));
219  }
220  return CSet;
221}
222
223static bool
224contractsub( const CFList & cs1, const CFList & cs2 ){
225  CFListIterator i;
226
227  for ( i=cs1; i.hasItem(); i++ )
228    if ( Prem(i.getItem(),cs2 ) != 0 ) return false;
229  CFList is=initalset1(cs1);
230  for ( i=is; i.hasItem(); i++ )
231    if ( Prem(i.getItem(),cs2 ) == 0 ) return false;
232  return true;
233}
234
235static ListCFList
236contract( const ListCFList & cs){
237  ListCFList mem,ts;
238  CFList iitem,jitem;
239
240  if ( cs.length() < 2 ) return cs;
241
242  for ( ListCFListIterator i=cs; i.hasItem(); i++ ){
243    iitem=i.getItem();
244    if ( ! member(iitem, mem))
245      for ( ListCFListIterator j=i; j.hasItem(); j++){
246        jitem=j.getItem();
247        if ( ! same( iitem, jitem ) )
248          if ( ! member(jitem, mem))
249            if ( contractsub(iitem, jitem) ){
250              ts.append(jitem); mem.append(jitem);
251            }
252            else
253              if ( contractsub(jitem, iitem) ){
254                ts.append(iitem);
255              }
256      }
257  }
258  return Minus(cs,ts);
259}
260
261static ListCFList
262adjoin(const CFList & is, const CFList & qs, const ListCFList & qh ){
263  ListCFList iss,qhi;
264  ListCFListIterator j;
265  CFList iscopy,itt;
266  CFListIterator i;
267  CanonicalForm elem;
268  int ind, length;
269
270  for ( i=is ; i.hasItem(); i++ ){
271    elem=i.getItem();
272    if ( cls(elem) > 0 ) iscopy=Union(CFList(elem),iscopy);
273  }
274  if ( iscopy.isEmpty() ) return iss;
275  qhi = MyDifference(qh,qs);
276  length = qhi.length();
277  for ( i =iscopy; i.hasItem(); i++){
278    itt = Union(qs,CFList(i.getItem()));
279    ind = 0;
280    if ( length > 0 )
281      for ( j=qhi; j.hasItem(); j++ )
282        if ( subset(j.getItem(),itt )) ind=1;
283    if ( ind == 0 ) iss.append(itt);
284  }
285  return iss;
286}
287
288static ListCFList
289adjoinb(const CFList & is, const CFList & qs, const ListCFList & qh ,const CFList & cs){
290  ListCFList iss,qhi;
291  ListCFListIterator j;
292  CFList iscopy,itt;
293  CFListIterator i;
294  CanonicalForm elem;
295  int ind, length;
296
297  for ( i=is ; i.hasItem(); i++ ){
298    elem=i.getItem();
299    if ( cls(elem) > 0 ) iscopy=Union(CFList(elem),iscopy);
300  }
301  if ( iscopy.isEmpty() ) return iss;
302  qhi = MyDifference(qh,qs);
303  length = qhi.length();
304  for ( i =iscopy; i.hasItem(); i++){
305    itt = Union(Union(qs,CFList(i.getItem())),cs);
306    ind = 0;
307    if ( length > 0 )
308      for ( j=qhi; j.hasItem(); j++ )
309        if ( subset(j.getItem(),itt )) ind=1;
310    if ( ind == 0 ) {iss.append(itt);}
311  }
312  return iss;
313}
314
315static ListCFList
316sort( const ListCFList & list_to_sort ){
317  ListCFList output,copy=list_to_sort;
318  CFList l,qs1,elem;
319
320  l = copy.getLast(); copy.removeLast();
321  if ( copy.length() == 0 ){ return ListCFList(l); }
322  for ( ListCFListIterator i=copy ; i.hasItem(); i++ ){
323    elem = i.getItem();
324    if ( elem.length() > l.length() ) {
325      output = MyUnion( ListCFList(l), output);
326      l= elem;
327    }
328    else{ output = MyUnion(output, ListCFList(elem) ); }
329  }
330  //output = MyUnion(ListCFList(l),sort(output));
331  output = MyUnion(ListCFList(l),output);
332  return output;
333}
334
335#ifdef EXPERIMENTAL
336static CFList
337getItemNr( int nr, const ListCFList & copy){
338  int i =1;
339  CFList elem;
340
341  for ( ListCFListIterator j=copy; j.hasItem(); j++ )
342    if ( i == nr ) { elem=j.getItem(); break; }
343    else { i+= 1; }
344  return elem;
345}
346
347static int
348choosefrom(){
349int choice;
350    CERR << "choose from qhi! ->";
351    CIN >> choice;
352return choice;
353}
354
355static ListCFList
356msort( const ListCFList & list_to_sort ){
357  int nr, number = list_to_sort.length();
358  ListCFList output;
359
360  CERR << "Sort: list to sort is: " <<  list_to_sort << "\n";
361  for (int i=1; i<= number; i++){
362    CERR << " Next elem = "; CIN >> nr;
363    output.append(getItemNr(nr,list_to_sort));
364  }
365  return output;
366}
367#endif
368
369#ifdef IRRCHARSERIESDEBUG
370#  define DEBUGOUTPUT
371#else
372#  undef DEBUGOUTPUT
373#endif
374#include "debug.h"
375
376ListCFList
377IrrCharSeries( const CFList &PS, int opt ){
378  CanonicalForm reducible,reducible2;
379  CFList qs,cs,factorset,is,ts;
380  ListCFList pi,ppi,qqi,qsi,iss,qhi= ListCFList(PS);
381  int nr_of_iteration=0,ts2,highestlevel=0;
382#ifdef EXPERIMENTAL
383  int choice=1;;
384#endif
385
386//  CERR << getCharacteristic() << "\n";
387  for ( CFListIterator Ps=PS; Ps.hasItem(); Ps++ )
388    if ( level(Ps.getItem() ) > highestlevel ) highestlevel = level(Ps.getItem()) ;
389//  for ( int xx=1; xx <= highestlevel; xx++)
390//   CERR << Variable(xx) ;
391//  CERR << "\n";
392//  for ( CFListIterator Ps=PS; Ps.hasItem(); Ps++ )
393//    CERR << Ps.getItem() << ", " ;//<< "\n";
394//  CERR <<  "\n";
395  while ( ! qhi.isEmpty() ) {
396    qhi=sort(qhi);
397    DEBOUTLN(CERR, "qhi is: ", qhi);
398#ifdef EXPERIMENTAL
399    choice=choosefrom();
400    CERR <<"/n Choose " << choice << "\n";
401    qs= getItemNr(choice, qhi);
402#else
403    qs=qhi.getFirst();
404#endif
405    DEBOUTLN(CERR, "qs  is: ", qs);
406    DEBOUTLN(CERR, "ppi is: ", ppi);
407    ListCFList ppi1,ppi2;
408    select(ppi,qs.length(),ppi1,ppi2);
409    DEBOUTLN(CERR, "ppi1 is: ", ppi1);
410    DEBOUTLN(CERR, "ppi2 is: ", ppi2);
411    qqi = MyUnion(ppi2,qqi);
412    DEBOUTLN(CERR, "qqi is: ", qqi);
413    if ( nr_of_iteration == 0 ){ nr_of_iteration += 1; ppi = ListCFList(); }
414    else{ nr_of_iteration += 1; ppi = MyUnion(ListCFList(qs),ppi1); }
415    DEBOUTLN(CERR,"ppi is: ", ppi);
416    PremForm Remembern;
417    cs = MCharSetN(qs,Remembern);
418    DEBOUTLN(CERR, "cs is: ", cs);
419    DEBOUTLN(CERR, "factorset is: ", Remembern.FS2);
420    cs = removecontent(cs,Remembern);
421    factorset=Remembern.FS2;
422    DEBOUTLN(CERR, "cs (after removecontent) is: ", cs);
423    DEBOUTLN(CERR, "factorset is: ", factorset);
424    // Hier: removecontent einfuegen!!!!
425    if ( cls(cs.getFirst()) > 0 ){
426      ts = irras(cs,ts2, reducible);
427
428      // INTERRUPTHANDLER
429      if ( interrupt_handle() ) return ListCFList() ;
430      // INTERRUPTHANDLER
431
432      DEBOUTLN(CERR, "ts is: ", ts);
433      DEBOUTLN(CERR, "ts2 is: ", ts2);
434      // next is preliminary: should be ==0
435      if ( ts2 <= 0 ){ //irreducible
436        if ( ! subset(cs,qs) ){
437          DEBOUTMSG(CERR, "cs is not a subset of qs");
438          cs = charseta(Union(qs,cs));
439          DEBOUTLN(CERR, "new cs is: ", cs);
440        }
441        if ( ! member(cs,pi) ){
442          pi = MyUnion(pi, ListCFList(cs));
443          DEBOUTMSG(CERR, "cs is not a member of pi");
444          DEBOUTLN(CERR, "pi is: ", pi);
445          if ( cls(cs.getFirst()) > 0 ){
446            ts = irras(cs,ts2,reducible);
447
448            // INTERRUPTHANDLER
449            if ( interrupt_handle() ) return ListCFList() ;
450            // INTERRUPTHANDLER
451
452            DEBOUTLN(CERR, "ts is: ", ts);
453            DEBOUTLN(CERR, "ts2 is: ", ts2);
454            // next is preliminary: should be ==0
455            if ( ts2 <= 0 ){ //irreducible
456              qsi = MyUnion(qsi,ListCFList(cs));
457              DEBOUTLN(CERR, "qsi is: ", qsi);
458              if ( cs.length() == highestlevel ){
459                DEBOUTLN(CERR, "cs.length() == nops(ord) :", cs.length());
460                is = factorps(factorset);
461              }
462              else{
463                DEBOUT(CERR,"cs.length() != nops(ord) :", cs.length());
464                DEBOUTLN(CERR, "  nops(ord)= ", highestlevel);
465                is = Union(initalset1(cs),factorps(factorset));
466              }
467              DEBOUTLN(CERR, "is is: ", is);
468              iss = adjoin(is,qs,qqi);
469              DEBOUTLN(CERR, "iss is: ", iss);
470            }
471          }
472          else{ iss = adjoin(factorps(factorset),qs,qqi); }
473        }
474        else{
475          DEBOUTMSG(CERR, "cs is a member of pi");
476          iss = adjoin(factorps(factorset),qs,qqi); }
477        DEBOUTLN(CERR, "iss is: ", iss);
478        DEBOUTLN(CERR, "   factorps(factorset)= ", factorps(factorset));
479        DEBOUTLN(CERR, "   qs= ", qs);
480        DEBOUTLN(CERR, "   qqi= ", qqi);
481      }
482      // next is preliminary: should be !=0
483      if ( ts2 > 0 ){
484        is = factorps(factorset);
485        DEBOUTLN(CERR, "is is: ", is);
486        if ( ts2 > 1 ){
487          // setup cst: need it later for adjoinb
488          CFList cst;
489          for ( CFListIterator i=cs ; i.hasItem(); i++){
490            if ( i.getItem() == reducible ) { break; }
491            else { cst.append(i.getItem()); }
492          }
493          is = Union(initalset1(cst), is);
494          iss = MyUnion(adjoin(is,qs,qqi), adjoinb(ts,qs,qqi,cst));
495        }
496        else{ iss = adjoin(Union(is,ts),qs,qqi); }
497        DEBOUTLN(CERR, "iss is: ", iss);
498      }
499    }
500    else{
501      iss = adjoin(factorps(factorset),qs,qqi);
502      DEBOUTMSG(CERR, "case: cs is a constant.");
503      DEBOUTLN(CERR, "  qs = ", qs);
504      DEBOUTLN(CERR, "  qqi = ", qqi);
505      DEBOUTLN(CERR, "  iss = adjoin(factorps(factorset),qs,qqi) = ",iss);
506    }
507    if ( qhi.length() > 1 ){ qhi.removeFirst(); qhi = MyUnion(qhi,iss); }
508    else{ qhi = iss; }
509    DEBOUTLN(CERR, "iss is: ", iss);
510  }
511  if ( ! qsi.isEmpty() ){
512    DEBOUTLN(CERR, "qsi before contract= ", qsi);
513    if ( opt == 0 ){
514       return contract( qsi );
515    }
516    else { return qsi; }
517  }
518  else{ return ListCFList() ; }
519}
520
521// tests for characteristic sets
522//////////////////////////////////
523#ifdef IRRASDEBUG
524#  define DEBUGOUTPUT
525#else
526#  undef DEBUGOUTPUT
527#endif
528
529#include "debug.h"
530
531static CFList
532irras( CFList & AS, int & ja, CanonicalForm & reducible)
533{
534  CFFList qs;
535  CFList ts,as;
536  CanonicalForm elem;
537  int ind=1,nr=0, success=-1;
538  CFListIterator i;
539
540  ja = 0;
541  DEBOUTLN(CERR, "irras: called with: AS= ", AS);
542  for ( i=AS; i.hasItem(); i++ )
543  {
544    elem = i.getItem();
545    nr += 1;
546    DEBOUT(CERR, "irras: factoring: ", elem);
547    if ( degree(elem) > 1 ) // linear poly's are irreduzible
548    {
549      //qs = Factorize2(elem,CanonicalForm(0));
550      qs = Factorize(elem);
551      // remove a constant
552      if (qs.getFirst().factor().degree()==0) qs.removeFirst();
553    }
554    else
555    {
556      qs=(CFFactor(elem,1));
557    }
558    DEBOUTLN(CERR, "  = ", qs);
559    // INTERRUPTHANDLER
560    if ( interrupt_handle() ) return CFList() ;
561    // INTERRUPTHANDLER
562
563    if ( (qs.length() >= 2 ) || (qs.getFirst().exp() > 1))
564    {
565      DEBOUTLN(CERR, "irras: Setting ind=0, ja= ", nr);
566      ja=nr; ind=0; reducible= elem;
567      break;
568    }
569    //    else{ as.append(elem) ; }
570  }
571  //  CERR << "ind= " << ind << "\n";
572  if ( (ind == 1) ) //&& ( as.length() > 1) )
573  {
574    if ( irreducible(AS) )
575    { // as quasilinear? => irreducible!
576      ja = 0;
577      DEBOUTLN(CERR, "as is irreducible. as= ", AS);
578    }
579    else
580    {
581      i=AS;
582      for ( nr=1; nr< AS.length(); nr++)
583      {
584        as.append(i.getItem());
585        i++;
586        if ( degree(i.getItem()) > 1 )
587        {  // search for a non linear elem
588          elem=i.getItem();
589          if (as.length()==1)
590            qs = Factorize2(elem,as.getFirst());
591          else
592            qs= newfactoras(elem,as,success);
593          if ( qs.length() > 1 || qs.getFirst().exp() > 1 )
594          { //found elem is reducible
595            reducible=elem;
596            ja=nr+1;
597            break;
598          }
599        }
600      }
601    }
602  }
603  for ( CFFListIterator k=qs; k.hasItem();k++)
604    ts.append(k.getItem().factor());
605  return ts;
606}
607
608///////////////////////////////////////////////////////////////////////////////
609/*
610$Log: not supported by cvs2svn $
611Revision 1.14  2008/04/08 16:19:09  Singular
612*hannes: removed rcsid
613
614Revision 1.13  2008/03/18 17:46:14  Singular
615*hannes: gcc 4.2
616
617Revision 1.12  2006/06/14 15:35:08  Singular
618*hannes: CS renamed
619
620Revision 1.11  2006/05/16 14:46:49  Singular
621*hannes: gcc 4.1 fixes
622
623Revision 1.10  2002/08/19 11:11:31  Singular
624* hannes/pfister: alg_gcd etc.
625
626Revision 1.9  2001/08/08 14:26:54  Singular
627*hannes: Dan's HAVE_SINGULAR_ERROR
628
629Revision 1.8  2001/08/06 08:32:53  Singular
630* hannes: code cleanup
631
632Revision 1.7  2001/06/27 13:58:06  Singular
633*hannes/GP: debug newfactoras, char_series, ...
634
635Revision 1.6  2000/03/08 12:54:35  obachman
636 * comment out warning "libfac: Factoring over algebraic function
637   field required!"
638
639Revision 1.5  2000/03/08 12:45:41  obachman
640* fixed Singular includes
641
642Revision 1.4  1999/06/15 12:54:54  Singular
643* hannes: debug fixes for Singular-interface
644
645Revision 1.3  1997/09/12 07:19:40  Singular
646* hannes/michael: libfac-0.3.0
647
648Revision 1.2  1997/04/25 22:52:28  michael
649changed cerr and cout messages for use with Singular
650Version for libfac-0.2.1
651
652*/
Note: See TracBrowser for help on using the repository browser.