My Project
Loading...
Searching...
No Matches
Data Structures | Functions
cfCharSetsUtil.h File Reference

This file provides utility functions to compute characteristic sets. More...

Go to the source code of this file.

Data Structures

class  StoreFactors
 class to store factors that get removed during char set computation More...
 

Functions

Variable get_max_var (const CFList &PS)
 
CFList only_in_one (const CFList &PS, const Variable &x)
 
Varlist reorderb (const Varlist &difference, const CFList &PS, const int highest_level)
 
CFList swapvar (const CFList &PS, const Variable &x, const Variable &y)
 swapvar a whole list of CanonicalForms More...
 
CFFList swapvar (const CFFList &PS, const Variable &x, const Variable &y)
 
CanonicalForm lowestRank (const CFList &L)
 
CFList initials (const CFList &L)
 
void sortListCFList (ListCFList &list)
 sort in descending order of length of elements More...
 
void sortCFListByLevel (CFList &list)
 sort in descending order of level of elements More...
 
CanonicalForm Prem (const CanonicalForm &F, const CanonicalForm &G)
 pseudo remainder of F by G with certain factors of LC (g) cancelled More...
 
CanonicalForm Premb (const CanonicalForm &f, const CFList &L)
 pseudo remainder of f by L with faster test for remainder being zero More...
 
CanonicalForm Prem (const CanonicalForm &f, const CFList &L)
 pseudo remainder of f by L More...
 
CFList uniGcd (const CFList &L)
 
CFList factorsOfInitials (const CFList &L)
 
void removeContent (CanonicalForm &F, CanonicalForm &cF)
 
CFList factorPSet (const CFList &PS)
 
void removeFactors (CanonicalForm &r, StoreFactors &StoredFactors, CFList &removedFactors)
 
CFList removeContent (const CFList &PS, StoreFactors &StoredFactors)
 
ListCFList contract (const ListCFList &cs)
 
bool isSubset (const CFList &PS, const CFList &Cset)
 is PS a subset of Cset ? More...
 
ListCFList adjoin (const CFList &is, const CFList &qs, const ListCFList &qh)
 
ListCFList adjoinb (const CFList &is, const CFList &qs, const ListCFList &qh, const CFList &cs)
 
void inplaceUnion (const ListCFList &a, ListCFList &b)
 Union of a and b stored in b. More...
 
void select (const ListCFList &ppi, int length, ListCFList &ppi1, ListCFList &ppi2)
 
CanonicalForm normalize (const CanonicalForm &F)
 normalize a poly, i.e. in char 0 clear denominators, remove integer content in char p divide by leading coeff More...
 

Detailed Description

This file provides utility functions to compute characteristic sets.

Note
some of the code is code from libfac or derived from code from libfac. Libfac is written by M. Messollen. See also COPYING for license information and README for general information on characteristic sets.

ABSTRACT: Descriptions can be found in Wang "On the Parallelization of characteristic-set based algorithms" or Greuel/Pfister "A Singular Introduction to Commutative Algebra".

Author
Martin Lee

Definition in file cfCharSetsUtil.h.

Function Documentation

◆ adjoin()

ListCFList adjoin ( const CFList is,
const CFList qs,
const ListCFList qh 
)

Definition at line 495 of file cfCharSetsUtil.cc.

496{
497 ListCFList iss, qhi;
499 CFList iscopy, itt;
501 int ind, length;
502
503 for (i= is; i.hasItem(); i++)
504 {
505 if (i.getItem().level() > 0)
506 iscopy= Union (CFList (i.getItem()), iscopy);
507 }
508 if (iscopy.isEmpty())
509 return iss;
510
511 qhi= Difference (qh, qs);
512 length= qhi.length();
513
514 for (i= iscopy; i.hasItem(); i++)
515 {
516 itt= Union (qs, CFList (i.getItem()));
517 ind= 0;
518 if (length > 0)
519 {
520 for (j= qhi; j.hasItem(); j++)
521 {
522 if (isSubset (j.getItem(), itt))
523 ind= 1;
524 }
525 }
526 if (ind == 0)
527 iss.append (itt);
528 }
529 return iss;
530}
bool isSubset(const CFList &PS, const CFList &Cset)
is PS a subset of Cset ?
int i
Definition: cfEzgcd.cc:132
int length() const
Definition: ftmpl_list.cc:273
void append(const T &)
Definition: ftmpl_list.cc:256
int isEmpty() const
Definition: ftmpl_list.cc:267
int j
Definition: facHensel.cc:110
template List< Variable > Union(const List< Variable > &, const List< Variable > &)
template List< Variable > Difference(const List< Variable > &, const List< Variable > &)
static BOOLEAN length(leftv result, leftv arg)
Definition: interval.cc:257

◆ adjoinb()

ListCFList adjoinb ( const CFList is,
const CFList qs,
const ListCFList qh,
const CFList cs 
)

Definition at line 533 of file cfCharSetsUtil.cc.

535{
536 ListCFList iss, qhi;
538 CFList iscopy, itt;
540 int ind, length;
541
542 for (i= is ; i.hasItem(); i++)
543 {
544 if (i.getItem().level() > 0)
545 iscopy= Union (CFList (i.getItem()), iscopy);
546 }
547 if (iscopy.isEmpty())
548 return iss;
549 qhi= Difference (qh, qs);
550 length= qhi.length();
551 for (i= iscopy; i.hasItem(); i++)
552 {
553 itt= Union (Union (qs, CFList (i.getItem())), cs);
554 ind= 0;
555 if (length > 0)
556 {
557 for (j= qhi; j.hasItem(); j++)
558 {
559 if (isSubset (j.getItem(), itt))
560 ind= 1;
561 }
562 }
563 if (ind == 0)
564 iss.append(itt);
565 }
566 return iss;
567}

◆ contract()

ListCFList contract ( const ListCFList cs)

Definition at line 926 of file cfCharSetsUtil.cc.

927{
928 ListCFList mem, ts;
929 CFList iitem, jitem;
930
931 if (cs.length() < 2)
932 return cs;
933
934 int l= cs.length();
935 int ii= 1;
937 for (ListCFListIterator i= cs; i.hasItem() && ii < l; i++, ii++)
938 {
939 iitem= i.getItem();
940 if (!find (mem, iitem))
941 {
942 j= i;
943 j++;
944 for (; j.hasItem(); j++)
945 {
946 jitem= j.getItem();
947 if (!find (mem, jitem))
948 {
949 if (contractsub (iitem, jitem))
950 {
951 ts.append (jitem);
952 mem.append (jitem);
953 }
954 else
955 {
956 if (contractsub (jitem, iitem))
957 ts.append (iitem); // no mem.append (item) because we assume cs does not contain duplicate entries
958 }
959 }
960 }
961 }
962 }
963 return Difference (cs,ts);
964}
bool contractsub(const CFList &cs1, const CFList &cs2)
int l
Definition: cfEzgcd.cc:100
template bool find(const List< CanonicalForm > &, const CanonicalForm &)

◆ factorPSet()

CFList factorPSet ( const CFList PS)

Definition at line 805 of file cfCharSetsUtil.cc.

806{
808 CFFList factors;
810
811 for (CFListIterator i= PS; i. hasItem(); i++)
812 {
813 factors= factorize (i.getItem());
814 if (factors.getFirst().factor().inCoeffDomain())
815 factors.removeFirst();
816 for (j= factors; j.hasItem(); j++ )
817 result= Union (result, CFList (normalize (j.getItem().factor())));
818 }
819 return result;
820}
CanonicalForm normalize(const CanonicalForm &F)
normalize a poly, i.e. in char 0 clear denominators, remove integer content in char p divide by leadi...
CFFList FACTORY_PUBLIC factorize(const CanonicalForm &f, bool issqrfree=false)
factorization over or
Definition: cf_factor.cc:405
T getFirst() const
Definition: ftmpl_list.cc:279
void removeFirst()
Definition: ftmpl_list.cc:287
return result
Definition: facAbsBiFact.cc:75

◆ factorsOfInitials()

CFList factorsOfInitials ( const CFList L)

Definition at line 755 of file cfCharSetsUtil.cc.

756{
758 CFFList factors;
759 CanonicalForm tmp;
760
761 for (CFListIterator i= L; i.hasItem(); i++)
762 {
763 factors= factorize (LC (i.getItem()));
764 for (CFFListIterator j= factors; j.hasItem(); j++)
765 {
766 tmp= j.getItem().factor();
767 if (!tmp.inCoeffDomain())
768 result= Union (result, CFList (normalize (tmp)));
769 }
770 }
771
772 return result;
773}
CanonicalForm LC(const CanonicalForm &f)
factory's main class
Definition: canonicalform.h:86
bool inCoeffDomain() const

◆ get_max_var()

Variable get_max_var ( const CFList PS)

Definition at line 196 of file cfCharSetsUtil.cc.

197{
198 Variable x= PS.getFirst().mvar(), y;
199 for (CFListIterator i= PS; i.hasItem(); i++)
200 {
201 y= i.getItem().mvar();
202 if (y > x)
203 x= y;
204 }
205 return x;
206}
Variable x
Definition: cfModGcd.cc:4082
Variable mvar() const
mvar() returns the main variable of CO or Variable() if CO is in a base domain.
factory's class for variables
Definition: variable.h:33
const CanonicalForm int const CFList const Variable & y
Definition: facAbsFact.cc:53

◆ initials()

CFList initials ( const CFList L)

Definition at line 743 of file cfCharSetsUtil.cc.

744{
746 for (CFListIterator iter= L; iter.hasItem(); iter++)
747 {
748 if (!LC(iter.getItem()).inCoeffDomain())
749 result.append (LC (iter.getItem()));
750 }
751 return result;
752}
T & getItem() const
Definition: ftmpl_list.cc:431
CFFListIterator iter
Definition: facAbsBiFact.cc:53

◆ inplaceUnion()

void inplaceUnion ( const ListCFList a,
ListCFList b 
)

Union of a and b stored in b.

Definition at line 473 of file cfCharSetsUtil.cc.

474{
475 if (a.isEmpty())
476 return;
477 if (b.isEmpty())
478 {
479 b= a;
480 return;
481 }
482
484 CFList elem;
485
486 for (i= a; i.hasItem(); i++)
487 {
488 elem= i.getItem();
489 if ((!elem.isEmpty()) && (!find (b, elem)))
490 b.insert(elem);
491 }
492}
CanonicalForm b
Definition: cfModGcd.cc:4103

◆ isSubset()

bool isSubset ( const CFList PS,
const CFList Cset 
)

is PS a subset of Cset ?

Definition at line 461 of file cfCharSetsUtil.cc.

462{
463 for (CFListIterator i= PS; i.hasItem(); i++)
464 {
465 if (!find (Cset, i.getItem()))
466 return 0;
467 }
468 return 1;
469}

◆ lowestRank()

CanonicalForm lowestRank ( const CFList L)

Definition at line 357 of file cfCharSetsUtil.cc.

358{
359 CFListIterator i= L;
361 int ind= 0;
362 if (!i.hasItem())
363 return f;
364
365 f= i.getItem();
366 i++;
367
368 while (i.hasItem())
369 {
370 if (lowerRank (i.getItem(), f, ind))
371 {
372 if (ind)
373 {
374 if (size (i.getItem()) < size (f))
375 f= i.getItem();
376 ind= 0;
377 }
378 else
379 f= i.getItem();
380 }
381 i++;
382 }
383 return f;
384}
int size(const CanonicalForm &f, const Variable &v)
int size ( const CanonicalForm & f, const Variable & v )
Definition: cf_ops.cc:600
bool lowerRank(const CanonicalForm &F, const CanonicalForm &G, int &ind)
FILE * f
Definition: checklibs.c:9

◆ normalize()

CanonicalForm normalize ( const CanonicalForm F)

normalize a poly, i.e. in char 0 clear denominators, remove integer content in char p divide by leading coeff

Definition at line 590 of file cfCharSetsUtil.cc.

591{
592 if (F.isZero())
593 return F;
594 if (getCharacteristic() == 0)
595 {
597 bool isRat= isOn (SW_RATIONAL);
598 if (!isRat)
599 On (SW_RATIONAL);
600 G= F;
601 G *= bCommonDen (G);
603 G /= icontent (G);
604 if (isRat)
605 On (SW_RATIONAL);
606 if (lc(G) < 0)
607 G= -G;
608 return G;
609 }
610
611 return F/lc (F);
612}
bool isOn(int sw)
switches
void On(int sw)
switches
void Off(int sw)
switches
CanonicalForm lc(const CanonicalForm &f)
CanonicalForm FACTORY_PUBLIC icontent(const CanonicalForm &f)
CanonicalForm icontent ( const CanonicalForm & f )
Definition: cf_gcd.cc:74
int FACTORY_PUBLIC getCharacteristic()
Definition: cf_char.cc:70
CanonicalForm bCommonDen(const CanonicalForm &f)
CanonicalForm bCommonDen ( const CanonicalForm & f )
static const int SW_RATIONAL
set to 1 for computations over Q
Definition: cf_defs.h:31
CF_NO_INLINE bool isZero() const
STATIC_VAR TreeM * G
Definition: janet.cc:31

◆ only_in_one()

CFList only_in_one ( const CFList PS,
const Variable x 
)

Definition at line 212 of file cfCharSetsUtil.cc.

213{
214 CFList output;
215
216 for (CFListIterator i= PS; i.hasItem(); i++ )
217 {
218 if (degree (i.getItem(), x) >= 1)
219 output.insert (i.getItem());
220 if (output.length() >= 2)
221 break;
222 }
223 return output;
224}
int degree(const CanonicalForm &f)
void insert(const T &)
Definition: ftmpl_list.cc:193

◆ Prem() [1/2]

pseudo remainder of F by G with certain factors of LC (g) cancelled

Definition at line 616 of file cfCharSetsUtil.cc.

617{
618 CanonicalForm f, g, l, test, lu, lv, t, retvalue;
619 int degF, degG, levelF, levelG;
620 bool reord;
621 Variable v, vg= G.mvar();
622
623 if ( (levelF= F.level()) < (levelG= G.level()))
624 return F;
625 else
626 {
627 if ( levelF == levelG )
628 {
629 f= F;
630 g= G;
631 reord= false;
632 v= F.mvar();
633 }
634 else
635 {
636 v= Variable (levelF + 1);
637 f= swapvar (F, vg, v);
638 g= swapvar (G, vg, v);
639 reord= true;
640 }
641 degG= degree (g, v );
642 degF= degree (f, v );
643 if (degG <= degF)
644 {
645 l= LC (g);
646 g= g - l*power (v, degG);
647 }
648 else
649 l= 1;
650 while ((degG <= degF) && (!f.isZero()))
651 {
652 test= gcd (l, LC(f));
653 lu= l / test;
654 lv= LC(f) / test;
655 t= g*lv*power (v, degF - degG);
656
657 if (degF == 0)
658 f= 0;
659 else
660 f= f - LC (f)*power (v, degF);
661
662 f= f*lu - t;
663 degF= degree (f, v);
664 }
665
666 if (reord)
667 retvalue= swapvar (f, vg, v);
668 else
669 retvalue= f;
670
671 return retvalue;
672 }
673}
CanonicalForm power(const CanonicalForm &f, int n)
exponentiation
CFList swapvar(const CFList &PS, const Variable &x, const Variable &y)
swapvar a whole list of CanonicalForms
g
Definition: cfModGcd.cc:4090
CanonicalForm test
Definition: cfModGcd.cc:4096
int level() const
level() returns the level of CO.
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:39
int gcd(int a, int b)
Definition: walkSupport.cc:836

◆ Prem() [2/2]

CanonicalForm Prem ( const CanonicalForm f,
const CFList L 
)

pseudo remainder of f by L

Definition at line 710 of file cfCharSetsUtil.cc.

711{
713 CFListIterator i= L;
714
715 for (i.lastItem(); i.hasItem(); i--)
716 rem= normalize (Prem (rem, i.getItem()));
717
718 return rem;
719}
CanonicalForm Prem(const CanonicalForm &F, const CanonicalForm &G)
pseudo remainder of F by G with certain factors of LC (g) cancelled
void rem(unsigned long *a, unsigned long *q, unsigned long p, int &dega, int degq)
Definition: minpoly.cc:572

◆ Premb()

CanonicalForm Premb ( const CanonicalForm f,
const CFList L 
)

pseudo remainder of f by L with faster test for remainder being zero

Definition at line 677 of file cfCharSetsUtil.cc.

678{
680 CFList l= L;
681 l.removeFirst();
683
684 for (i.lastItem(); i.hasItem(); i--)
685 rem= normalize (Prem (rem, i.getItem()));
686
687 CanonicalForm tmp= L.getFirst()/content (L.getFirst());
688
689 bool isRat= isOn (SW_RATIONAL);
690 int ch=getCharacteristic();
691 if (ch == 0 && !isRat)
692 On (SW_RATIONAL);
693 if (fdivides (tmp, rem))
694 {
695 if (ch == 0 && !isRat)
697 return 0;
698 }
699
700 if (ch == 0 && !isRat)
702
703 rem= normalize (Prem (rem, L.getFirst()));
704
705 return rem;
706}
CanonicalForm FACTORY_PUBLIC content(const CanonicalForm &)
CanonicalForm content ( const CanonicalForm & f )
Definition: cf_gcd.cc:603
bool fdivides(const CanonicalForm &f, const CanonicalForm &g)
bool fdivides ( const CanonicalForm & f, const CanonicalForm & g )

◆ removeContent() [1/2]

void removeContent ( CanonicalForm F,
CanonicalForm cF 
)

Definition at line 776 of file cfCharSetsUtil.cc.

777{
778 if (size (F) == 1)
779 {
780 CanonicalForm tmp= F;
781 F= F.mvar();
782 cF= tmp/F;
783 if (!cF.inCoeffDomain())
784 cF= normalize (cF);
785 else
786 cF= 0;
787 F= normalize (F);
788
789 return;
790 }
791
792 cF= content (F);
793
794 if (cF.inCoeffDomain())
795 cF= 0;
796 else
797 {
798 cF= normalize (cF);
799 F /= cF;
800 F= normalize (F);
801 }
802}

◆ removeContent() [2/2]

CFList removeContent ( const CFList PS,
StoreFactors StoredFactors 
)

Definition at line 879 of file cfCharSetsUtil.cc.

880{
881 CFListIterator i= PS;
882 if ((!i.hasItem()) || (PS.getFirst().level() == 0 ))
883 return PS;
884
885 CFList output;
886 CanonicalForm cc,elem;
887
888 for (; i.hasItem(); i++)
889 {
890 elem= i.getItem();
891 cc= content (elem, elem.mvar());
892 if (cc.level() > 0 )
893 {
894 output.append (normalize (elem / cc));
895 StoredFactors.FS1 = Union (CFList (normalize (cc)), StoredFactors.FS1);
896 }
897 else
898 output.append(normalize (elem));
899 }
900 return output;
901}
CFList FS1
factors that were removed

◆ removeFactors()

void removeFactors ( CanonicalForm r,
StoreFactors StoredFactors,
CFList removedFactors 
)

Definition at line 823 of file cfCharSetsUtil.cc.

825{
826 CanonicalForm quot;
827 CFList testlist;
828 int n= level(r);
829 bool divides;
831
832 for (int i=1; i<= n; i++)
833 testlist.append (CanonicalForm (Variable (i)));
834
835 // remove already removed factors
836 for (j= StoredFactors.FS1; j.hasItem(); j++)
837 {
838 while (fdivides (j.getItem(), r, quot))
839 {
840 r= quot;
841 }
842 }
843
844 for (j= StoredFactors.FS2; j.hasItem(); j++)
845 {
846 divides= false;
847 if (j.getItem() != r)
848 {
849 while (fdivides (j.getItem(), r, quot))
850 {
851 divides= true;
852 r= quot;
853 }
854 if (divides)
855 removedFactors= Union (removedFactors, CFList (j.getItem()));
856 }
857 }
858 r= normalize (r);
859
860 // remove variables
861 for (j= testlist; j.hasItem() && !r.isOne(); j++)
862 {
863 divides= false;
864 if (j.getItem() != r)
865 {
866 while (fdivides (j.getItem(), r, quot))
867 {
868 divides= true;
869 r= quot;
870 }
871 if (divides)
872 removedFactors= Union (removedFactors, CFList (j.getItem()));
873 }
874 }
875 r= normalize (r);
876}
int level(const CanonicalForm &f)
CF_NO_INLINE bool isOne() const
CFList FS2
candidate factors that might get removed

◆ reorderb()

Varlist reorderb ( const Varlist difference,
const CFList PS,
const int  highest_level 
)

Definition at line 259 of file cfCharSetsUtil.cc.

261{
262 Intarray A(1, highest_level), B(1, highest_level), C(1, highest_level),
263 D(1, highest_level), E(1, highest_level), F(1, highest_level),
264 G(1, highest_level);
265 initArray (highest_level, A, B, C, D, E, F, G);
266 int i= 0, j, n= difference.length(), gap= 1 + __INIT_GAP__;
267 Variable temp;
268 Array<Variable> v(0, n);
270
271 for (J= difference; J.hasItem(); J++ )
272 {
273 v[i]= J.getItem();
274 i++;
275 }
276
277 while (gap <= n)
278 gap = __INIT_GAP__ * gap + 1;
279 gap /= __INIT_GAP__;
280
281 while (gap > 0)
282 {
283 for (i= gap; i <= n - 1; i++)
284 {
285 temp= v[i];
286 for (j= i - gap; j >=0 ; j -= gap)
287 {
288 if (degord (v[j], temp, PS, A, B, C, D, E, F, G))
289 break;
290 v[j + gap]= v[j];
291 }
292 v[j + gap]= temp;
293 }
294 gap /= __INIT_GAP__;
295 }
296 Varlist output;
297 for (i= 0; i <= n - 1; i++)
298 output.append (v[i]);
299 return output;
300}
int degord(const Variable &x, const Variable &y, const CFList &PS, Intarray &A, Intarray &B, Intarray &C, Intarray &D, Intarray &E, Intarray &F, Intarray &G)
#define __INIT_GAP__
void initArray(const int highest_level, Intarray &A, Intarray &B, Intarray &C, Intarray &D, Intarray &E, Intarray &F, Intarray &G)
REvaluation E(1, terms.length(), IntRandom(25))
b *CanonicalForm B
Definition: facBivar.cc:52
#define D(A)
Definition: gentable.cc:131
#define A
Definition: sirandom.c:24

◆ select()

void select ( const ListCFList ppi,
int  length,
ListCFList ppi1,
ListCFList ppi2 
)

Definition at line 570 of file cfCharSetsUtil.cc.

571{
572 CFList elem;
573 for (ListCFListIterator i= ppi; i.hasItem(); i++)
574 {
575 elem= i.getItem();
576 if (!elem.isEmpty())
577 {
578 if (length <= elem.length())
579 ppi2.append(elem);
580 else
581 ppi1.append(elem);
582 }
583 }
584}

◆ sortCFListByLevel()

void sortCFListByLevel ( CFList list)

sort in descending order of level of elements

Definition at line 428 of file cfCharSetsUtil.cc.

429{
430 int l= 1;
431 int k= 1;
434 for (CFListIterator i= list; l <= list.length(); i++, l++)
435 {
436 for (CFListIterator j= list; k <= list.length() - l; k++)
437 {
438 m= j;
439 m++;
440 if ((size (j.getItem()) < size (m.getItem())) ||
441 ((size (j.getItem()) == size (m.getItem()))
442 && (j.getItem().level() < m.getItem().level())))
443 {
444 buf= m.getItem();
445 m.getItem()= j.getItem();
446 j.getItem()= buf;
447 j++;
448 j.getItem()= m.getItem();
449 }
450 else
451 j++;
452 }
453 k= 1;
454 }
455}
int m
Definition: cfEzgcd.cc:128
int k
Definition: cfEzgcd.cc:99
int status int void * buf
Definition: si_signals.h:59

◆ sortListCFList()

void sortListCFList ( ListCFList list)

sort in descending order of length of elements

Definition at line 396 of file cfCharSetsUtil.cc.

397{
398 int l= 1;
399 int k= 1;
400 CFList buf;
402 for (ListCFListIterator i= list; l <= list.length(); i++, l++)
403 {
404 for (ListCFListIterator j= list; k <= list.length() - l; k++)
405 {
406 m= j;
407 m++;
408 if ((j.getItem().length() < m.getItem().length()) ||
409 (j.getItem().length() == m.getItem().length() &&
410 minLevel (j.getItem()) > minLevel (m.getItem())))
411 {
412 buf= m.getItem();
413 m.getItem()= j.getItem();
414 j.getItem()= buf;
415 j++;
416 j.getItem()= m.getItem();
417 }
418 else
419 j++;
420 }
421 k= 1;
422 }
423}
int minLevel(const CFList &L)

◆ swapvar() [1/2]

CFFList swapvar ( const CFFList PS,
const Variable x,
const Variable y 
)

Definition at line 314 of file cfCharSetsUtil.cc.

315{
316 CFFList ps;
317
318 for (CFFListIterator i= PS; i.hasItem(); i++)
319 ps.append (CFFactor (swapvar (i.getItem().factor(), x, y),
320 i.getItem().exp()));
321 return ps;
322}

◆ swapvar() [2/2]

CFList swapvar ( const CFList PS,
const Variable x,
const Variable y 
)

swapvar a whole list of CanonicalForms

Definition at line 304 of file cfCharSetsUtil.cc.

305{
306 CFList ps;
307
308 for (CFListIterator i= PS; i.hasItem(); i++)
309 ps.append (swapvar (i.getItem(), x, y));
310 return ps;
311}

◆ uniGcd()

CFList uniGcd ( const CFList L)

Definition at line 721 of file cfCharSetsUtil.cc.

722{
723 CFList tmp;
726 for (i= L; i.hasItem(); i++)
727 {
728 if (i.getItem().isUnivariate() && i.getItem().level() == 1)
729 tmp.append (i.getItem());
730 }
731 if (tmp.length() <= 2)
732 return L;
733 i= tmp;
734 g= i.getItem();
735 i++;
736 g= gcd (g,i.getItem());
737 i++;
738 for (; i.hasItem(); i++)
739 g= gcd (g, i.getItem());
740 return Union (Difference (L, tmp), CFList (g));
741}