Pari/GP

PARI/GP is a widely used computer algebra system designed for fast computations in number theory (factorizations, algebraic number theory, elliptic curves, modular forms, L functions...), but also contains a large number of other useful functions to compute with mathematical entities such as matrices, polynomials, power series, algebraic numbers etc., and a lot of transcendental functions. PARI is also available as a C library to allow for faster computations.

Pari/gp contains various functions which are helpful for dealing with multiple zeta values.

Setup
Pari/gp can be downloaded for various platforms under https://pari.math.u-bordeaux.fr/download.html.

To use Pari/gp with a Jupyter notebook, one can use https://anaconda.org/conda-forge/pari_jupyter

Examples
The implementation for multiple zeta values in pari/gp is given by the function zetamult (see https://pari.math.u-bordeaux.fr/dochtml/html/Transcendental_functions.html). Notice that the order used in Pari/gp is such that \(\zeta(2,1) = \zeta(3)\). ? zetamult([2,1]) %1 = 1.2020569031595942853997381615114499908 ? zetamult([3]) %2 = 1.2020569031595942853997381615114499908

To check for relationa among numbers in Pari/gp one can use the command lindep, which gives an implementation of the LLL-algorithm. A list of numbers a_1,...,a_r in Pari/gp is represented by an array [a_1,...,a_r] and lindep([a_1,...,a_r]) gives back a (potential) integer linear combination (as an array of coefficients) of these numbers which evaluates to zero (up to a given precission). For example, consider the following code: ? lindep([zetamult([2,1]),zetamult([3])]) %3 = [-1, 1]~ This code indicates that, up to the current precission, we have \(-\zeta(2,1) + \zeta(3) = 0\).

Generating all MZV indices of weight k
We can use the built in functions forpart(X=k, expr) which iterates X over partitions of k in the expression expr, and the forperm(a,p,expr) which iterates p over all permutations of a in the expression expr. To generate all indices of weight 7, we can write out = []; forpart(X=7,forperm(X,p,if(p[1] > 1, out = concat(out, [Vec(p)])))); out