1 #ifndef CoCoA_SparsePolyOps_MinPoly_H
2 #define CoCoA_SparsePolyOps_MinPoly_H
3 
4 //   Copyright (c)  2016-2018  John Abbott and Anna M. Bigatti
5 
6 //   This file is part of the source of CoCoALib, the CoCoA Library.
7 
8 //   CoCoALib is free software: you can redistribute it and/or modify
9 //   it under the terms of the GNU General Public License as published by
10 //   the Free Software Foundation, either version 3 of the License, or
11 //   (at your option) any later version.
12 
13 //   CoCoALib is distributed in the hope that it will be useful,
14 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 //   GNU General Public License for more details.
17 
18 //   You should have received a copy of the GNU General Public License
19 //   along with CoCoALib.  If not, see <http://www.gnu.org/licenses/>.
20 
21 
22 // Header file for functions MinPoly etc.
23 #include "CoCoA/ring.H"
24 #include "CoCoA/VerificationLevel.H"
25 
26 #include <iosfwd>
27 // using std::ostream;
28 #include <vector>
29 // using std::vector;
30 
31 namespace CoCoA
32 {
33 
34   class ConstMatrixView;  // fwd decl -- defined in matrix.H
35 //  class ConstRefRingElem; // fwd decl -- defined in ring.H
36   class RingElem;         // fwd decl -- defined in ring.H
37   class RingElemAlias;    // fwd decl -- defined in ring.H
38   class matrix;           // fwd decl -- defined in matrix.H
39   class ideal;            // fwd decl -- defined in ideal.H
40   class PPMonoidElem;     // fwd decl -- defined in PPMonoid.H
41   class PolyRing;         // fwd decl -- defined in PolyRing.H
42   class VerificationLevel;// fwd decl -- defined in VerificationLevel.H
43 
44   matrix FrobeniusMat(const ideal& I);
45   matrix FrobeniusMat(const ideal& I, const std::vector<PPMonoidElem>& QB2);
46 
47   RingElem MinPoly(ConstMatrixView M, ConstRefRingElem x);
48   RingElem MinPoly(ConstRefRingElem f, ConstRefRingElem x);
49 
50   RingElem MinPoly(ConstRefRingElem f, ConstRefRingElem x);
51   RingElem MinPolyMat(ConstRefRingElem f, ConstRefRingElem x);
52   RingElem MinPolyDef(ConstRefRingElem f, ConstRefRingElem x);
53   RingElem MinPolyElim(ConstRefRingElem f, ConstRefRingElem x);
54 
55   // to be deleted later on?
56   RingElem MinPolyQuot(ConstRefRingElem f, const ideal& I, ConstRefRingElem x, VerificationLevel NumChecks=guaranteed());
57 //  RingElem MinPolyQuot(ConstRefRingElem f, const ideal& I, ConstRefRingElem x);
58   RingElem MinPolyQuotMat(ConstRefRingElem f, const ideal& I, ConstRefRingElem x);
59   RingElem MinPolyQuotDef(ConstRefRingElem f, const ideal& I, ConstRefRingElem x);
60   RingElem MinPolyQuotDefLin(ConstRefRingElem f, const ideal& I, ConstRefRingElem x);
61   RingElem MinPolyQuotElim(ConstRefRingElem f, const ideal& I, ConstRefRingElem x);
62 
63   std::vector<RingElem> ShapeLemma(const ideal& I);
64 
65   /////////// ???????
66   RingElem LiftPolyFromFpxToQQx(const PolyRing& QQx, ConstRefRingElem f);
67 
68 
69 } // end of namespace CoCoA
70 
71 
72 
73 // RCS header/log in the next few lines
74 // $Header: /Volumes/Home_1/cocoa/cvs-repository/CoCoALib-0.99/include/CoCoA/SparsePolyOps-MinPoly.H,v 1.2 2019/12/21 16:46:49 abbott Exp $
75 // $Log: SparsePolyOps-MinPoly.H,v $
76 // Revision 1.2  2019/12/21 16:46:49  abbott
77 // Summary: Changed MinPolyQuot to single fn with optional param
78 //
79 // Revision 1.1  2018/04/06 15:09:39  bigatti
80 // -- renamed MinPoly.H
81 //
82 // Revision 1.13  2018/03/15 14:20:42  bigatti
83 // -- removed empty space
84 //
85 // Revision 1.12  2018/03/13 18:03:52  bigatti
86 // -- MinPolyModular: now using VerificationLevel class
87 //
88 // Revision 1.11  2018/03/13 17:43:38  bigatti
89 // -- now MinPolyQuot takes a verification level
90 //    instead of being called MinPolyQuotHeuristic
91 //
92 // Revision 1.10  2018/02/22 16:51:09  bigatti
93 // -- added MinPolyQuotHeuristic
94 //
95 // Revision 1.9  2018/01/17 10:52:18  abbott
96 // Summary: Corrected includes and fwd decls
97 //
98 // Revision 1.8  2017/06/26 13:17:24  bigatti
99 // -- exported utility function LiftPolyFromFpxToQQx
100 //
101 // Revision 1.7  2016/10/27 13:07:24  bigatti
102 // -- added MinPolyQuotDefLin
103 // -- cleaned up code, unified notation
104 //
105 // Revision 1.6  2016/10/24 12:10:35  bigatti
106 // -- added ShapeLemma (first draft)
107 //
108 // Revision 1.5  2016/06/27 14:50:28  bigatti
109 // -- now FrobeniusMat may take two args
110 //
111 // Revision 1.4  2016/06/20 15:24:42  bigatti
112 // -- renamed MinPolyXX --> MinPolyQuotXX
113 // -- added MinPolyDef(f, x)
114 // -- added default to MinPolyDef in both cases
115 //
116 // Revision 1.3  2016/06/10 15:55:00  bigatti
117 // -- only one arg for FrobeniusMat
118 //
119 // Revision 1.2  2016/04/14 11:34:58  bigatti
120 // -- added FrobeniusMat
121 //
122 // Revision 1.1  2016/03/18 11:54:00  bigatti
123 // -- first import
124 //
125 
126 #endif
127