OPENF4
Library for Gröebner basis computations over finite fields.
 All Classes Namespaces Files Functions Variables Friends Pages
tutorial-gf2-extension-method2.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Antoine Joux, Vanessa Vitse and Titouan Coladon
3  *
4  * This file is part of openf4.
5  *
6  * openf4 is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * openf4 is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with openf4. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
28 #include <iostream>
29 #include <string>
30 #include <vector>
31 #include <libopenf4.h>
32 
33 using namespace std;
34 
35 int main (int argc, char **argv)
36 {
37  cout << "#########################################################" << endl;
38  cout << "# TUTORIAL WITH LIBRARY USE #" << endl;
39  cout << "#########################################################" << endl << endl;
40 
41  // Create polynomial array.
42  vector<string> polynomialArray;
43 
44  // Create variable name array.
45  vector<string> variableName;
46  for(int i = 0; i < 6; i++)
47  {
48  variableName.push_back('x'+to_string(i));
49  }
50 
51  // Fill the polynomial array.
52  polynomialArray.emplace_back("(t+t^3)*x0+(t+t^3)*x1+(t+t^3)*x2+(t+t^3)*x3+(t+t^3)*x4+(t+t^3)*x5");
53  polynomialArray.emplace_back("(t+t^3)*x0*x1+(t+t^3)*x1*x2+(t+t^3)*x2*x3+(t+t^3)*x3*x4+(t+t^3)*x0*x5+(t+t^3)*x4*x5");
54  polynomialArray.emplace_back("(t+t^3)*x0*x1*x2+(t+t^3)*x1*x2*x3+(t+t^3)*x2*x3*x4+(t+t^3)*x0*x1*x5+(t+t^3)*x0*x4*x5+(t+t^3)*x3*x4*x5");
55  polynomialArray.emplace_back("(t+t^3)*x0*x1*x2*x3+(t+t^3)*x1*x2*x3*x4+(t+t^3)*x0*x1*x2*x5+(t+t^3)*x0*x1*x4*x5+(t+t^3)*x0*x3*x4*x5+(t+t^3)*x2*x3*x4*x5");
56  polynomialArray.emplace_back("(t+t^3)*x0*x1*x2*x3*x4+(t+t^3)*x0*x1*x2*x3*x5+(t+t^3)*x0*x1*x2*x4*x5+(t+t^3)*x0*x1*x3*x4*x5+(t+t^3)*x0*x2*x3*x4*x5+(t+t^3)*x1*x2*x3*x4*x5");
57  polynomialArray.emplace_back("(t+t^3)*x0*x1*x2*x3*x4*x5-1");
58 
59  // Compute a reduce groebner basis.
60  vector<string> basis = groebnerBasisGF2ExtensionF4("t^63 + t^61 + t^57 + t^56 + t^54 + t^51 + t^47 + t^46 + t^45 + t^44 + t^43 + t^42 + t^39 + t^38 + t^35 + t^34 + t^32 + t^31 + t^28 + t^25 + t^24 + t^23 + t^21 + t^19 + t^18 + t^17 + t^15 + t^13 + t^10 + t^8 + t^7 + t^5 + t^2 + t + 1", 6, variableName, "t", polynomialArray, 1, 0);
61 
62  // Print the reduce groebner basis.
63  for(size_t i = 0; i < basis.size(); i++)
64  {
65  cout << basis[i] << endl;
66  }
67 }
std::vector< std::string > groebnerBasisGF2ExtensionF4(std::string modulo, int nbVariable, std::vector< std::string > variableName, std::string polyVarName, std::vector< std::string > polynomialList, int nbThread, int verbose)
Compute a reduced groebner basis of the ideal defined by the list of polynomials polynomialList.
Declaration of library methods.