SHORT PROOFS OF IDEAL MEMBERSHIP

Sage code accompanying the paper "Short proofs of ideal membership" by Clemens Hofstadler and Thibaut Verron.


DESCRIPTION

A SageMath implementation of Algorithm 3 in the paper to compute short cofactor representations of noncommutative polynomials.


LICENCSE

Distributed under the terms of the GNU General Public License, either version 2 or (at your option) any later version (https://www.gnu.org/licenses/)


REQUIREMENTS

- SageMath 9.1 or later

- The signature_gb package for Sage. A beta version of the package can be obtained from https://github.com/ClemensHofstadler/signature_gb

- The Python library pyahocorasick (https://pyahocorasick.readthedocs.io/en/latest/)

- The IBM ILOG CPLEX optimisation studio as a solver backend for the linear programming in Sage. See 
	https://doc.sagemath.org/html/en/thematic_tutorials/linear_programming.html
Section Solvers (backends) for information on how to obtain and install CPLEX.


INSTALLATION & USAGE

First, install the CLEX solver backend as described in the Sage documentation (https://doc.sagemath.org/html/en/thematic_tutorials/linear_programming.html).

Then install the Python library pyahocorasick as decribed in https://pyahocorasick.readthedocs.io/en/latest/.

After this, install the signature_gb package as described on the github page.

Make sure that the path to the signature_gb package is visible in SageMath by running
	sys.path.append(PATH),
where PATH is the path to the directory in which the folder signature_gb is.

Then the file "ShortProofs.py" can be loaded into a Sage session with

load("/path/to/file/ShortProofs.py").

To run a benchmark example, it is enough to simply load the respective file into a Sage session with

load("./benchmarks/algo/benchmark_name.py")

when inside the folder "ShortProofs", where "algo" has to be replaced by the respective algorithm (groebner_basis, new_algorithm, or signature_groebner_basis) and "benchmark_name" has to be replaced by the name of the benchmark example.

Also, once the file "ShortProofs.py" is loaded, the functionality can be used as follows.
Compare the following steps also with the structure of the benchmark files.

1. Define the generators of an ideal as Sage's noncommutative polynomials.
   Analogously, also define the polynomial, for which a short representation should be found,
   as a noncommutative polynomial.
2. Specify a degree bound "bound" in form of a positive integer
3. Using the functionality provided by SignatureGB, form the labelled module "M" generated by the ideal's generators,
   and compute a labelled Gröbner basis and a syzygy basis up to degree "bound".
4. Compute an initial cofactor representation "alpha" of the polynomial for which a short representation should be found.
5. Call find_short_proof(alpha, bound, M).

CONTACT

In case of any problems or questions, please feel free to contact us under:
	clemens.hofstadler@mathematik.uni-kassel.de
	thibaut.verron@gmail.com