1 /*****************************************************************************\
2  * Computer Algebra System SINGULAR
3 \*****************************************************************************/
4 /** @file cfCharSets.h
5  *
6  * This file provides functions to compute characteristic sets
7  *
8  * @note some of the code is code from libfac or derived from code from libfac.
9  * Libfac is written by M. Messollen. See also COPYING for license information
10  * and README for general information on characteristic sets.
11  *
12  * ABSTRACT: Descriptions can be found in Wang "On the Parallelization of
13  * characteristic-set based algorithms" or Greuel/Pfister "A Singular
14  * Introduction to Commutative Algebra".
15  *
16  * @author Martin Lee
17  *
18  **/
19 /*****************************************************************************/
20 
21 #ifndef CF_CHARSETS
22 #define CF_CHARSETS
23 
24 #include "cfCharSetsUtil.h"
25 
26 /*BEGINPUBLIC*/
27 
28 /// basic set in the sense of Wang a.k.a. minimal ascending set in the sense of
29 /// Greuel/Pfister
30 CFList
31 basicSet (const CFList& PS);
32 
33 /// characteristic set
34 CFList
35 charSet (const CFList& PS);
36 
37 /// modified medial set
38 CFList
39 modCharSet (const CFList& PS, StoreFactors& StoredFactors,
40             bool removeContents= true);
41 
42 CFList
43 modCharSet (const CFList& PS, bool removeContents);
44 
45 CFList
46 charSetViaCharSetN (const CFList& PS);
47 
48 CFList
49 charSetN (const CFList &PS);
50 
51 /// modified characteristic set, i.e. a characteristic set with certain
52 /// factors removed
53 CFList
54 charSetViaModCharSet (const CFList& PS, StoreFactors& StoredFactors,
55                       bool removeContents= true);
56 
57 /// modified characteristic set, i.e. a characteristic set with certain
58 /// factors removed
59 CFList
60 charSetViaModCharSet (const CFList& PS, bool removeContents= true);
61 
62 /// characteristic series
63 ListCFList
64 charSeries (const CFList& L);
65 
66 /// irreducible characteristic series
67 ListCFList FACTORY_PUBLIC
68 irrCharSeries (const CFList & PS);
69 
70 // the next three give you a heuristically optimal reorderd list of the
71 // variables. For internal and external (e.g. Singular/Macaulay2) library use.
72 // This is really experimental!
73 // See the comments in reorder.cc.
74 //
75 // this gives you a heuristically optimal ordering for the ring variables
76 // if you use the irreducible characteristic series.
77 Varlist neworder (const CFList & PolyList);
78 
79 // the same as neworder(...) only returning a list of CanonicalForm 's
80 // (i.e. the variables as CanonicalForms)
81 CFList newordercf (const CFList & PolyList);
82 
83 // the same as neworder(...) only returning a list of int 's (i.e. the levels)
84 IntList FACTORY_PUBLIC neworderint (const CFList & PolyList);
85 
86 // for library internal use only:
87 // next function reorders the variables in PS:
88 // a code segment to use:
89 // ...
90 // #include "tmpl_inst.h" // for typedef's
91 // CFList PS= <setup-your-list-of-CanonicalForms>;
92 // Varlist betterorder= neworder(PS);
93 // PS= reorder(betterorder,PS); // reorder variables in PS from oldorder
94 //                                 to betterorder
95 // ListCFList Q= IrrCharSeries( PS );
96 // Q= reorder(betterorder,Q);   // revert ordering to oldorder
97 //
98 CFList reorder (const Varlist & betterorder, const CFList & PS);
99 CFFList reorder (const Varlist & betterorder, const CFFList & PS);
100 ListCFList reorder (const Varlist & betterorder, const ListCFList & Q);
101 /*ENDPUBLIC*/
102 
103 #endif
104