MSOLVE(1)

πŸ’– msolve(1) β€” User Commands πŸ’–

okay so bestie, welcome to the msolve manual page, User Commands section, and I need you to know right now that this thing is a whole vibe. ✨ Polynomial system solving?? We love her. Let's get into it.


🌸 NAME 🌸

  • msolve β€” Polynomial System Solving through Algebraic Methods

πŸŽ€ DESCRIPTION πŸŽ€

okay so the msolve library for polynomial system solving is version 0.11.0, and it was implemented by J. Berthomieu, C. Eder, M. Safey El Din. A trio of icons, fr fr. πŸ‘‘

⭐ Basic call ⭐

Here's the moment you've been waiting for:

./msolve -f [FILE1] -o [FILE2]

FILE1 and FILE2 are respectively the input and output files. That's it, that's the whole ritual. πŸ’…

🌈 Standard options 🌈

  • -f, --file FILE β€” the file name. And it's mandatory, bestie, like you literally cannot run this without it. 🫢
  • -h, --help β€” Prints this help.
  • -o, --output-file FILE β€” Name of output file.
  • -t, --threads THR β€” Number of threads to be used.
    • 1 β€” one thread (default).
    • THR > 1 β€” THR threads.
  • -v, --verbose VER β€” Level of verbosity, 0 - 2.
    • 0 β€” no output (default).
    • 1 β€” global information at the start and end of the computation.
    • 2 β€” detailed output for each step of the algorithm, e.g. matrix sizes, #pairs, ...

πŸ¦‹ Input file format πŸ¦‹

  • first line: variables separated by a comma (no comma at end of line)
  • second line: characteristic of the field
  • next lines provide the polynomials (one per line), separated by a comma (no comma after the last polynomial)
Not me stressing the comma placement but literally yes, watch your commas, they're doing main character work here. πŸ“

πŸ“ Output file format πŸ“

  • When there is no solution in an algebraic closure of the base field: [-1]
  • Where there are infinitely many solutions in an algebraic closure of the base field: [1, nvars, -1,[]]
  • Else: Over prime fields: a rational parametrization of the solutions
  • When input coefficients are rational numbers: real solutions to the input system (see the -P flag to recover a parametrization of the solutions)
  • See the msolve tutorial for more details (https://msolve.lip6.fr)

πŸ‘‘ Advanced options πŸ‘‘

okay this is the part where it gets spicy. buckle up. πŸ”₯

  • -F FILE β€” File name encoding parametrizations in binary format.
  • -g, --groebner-basis GB β€” Prints reduced Groebner bases of input system for first prime characteristic w.r.t. grevlex ordering. One element per line is printed, commas separated.
    • 0 β€” Nothing is printed. (default)
    • 1 β€” Leading ideal is printed.
    • 2 β€” Full reduced Groebner basis is printed.
  • -c GEN β€” Handling genericity: If the staircase is not generic enough, msolve can automatically try to fix this situation via first trying a change of the order of variables and finally adding a random linear form with a new variable (smallest w.r.t. DRL).
    • 0 β€” Nothing is done, msolve quits.
    • 1 β€” Change order of variables.
    • 2 β€” Change order of variables, then try adding a random linear form. (default)
  • -d GEN β€” Handling genericity further: If the staircase is not generic enough, msolve can still try to perform the full computation by computing some normal forms and build the multiplication matrix, before fixing the situation via option -c.
    • 0 β€” No normal forms are computed.
    • 1 β€” Few normal forms are computed.
    • 2 β€” Some normal forms are computed. (default)
    • 3 β€” Lots of normal forms are computed.
    • 4 β€” All the normal forms are computed.
  • -C β€” Use sparse-FGLM-col algorithm: Given an input file with k polynomials compute the quotient of the ideal generated by the first k-1 polynomials with respect to the kth polynomial.
  • -e, --elimination ELIM β€” Define an elimination order: msolve supports two blocks of variables, each block using the degree reverse lexicographical monomial order. ELIM has to be a number between 1 and #variables-1, and gives the number of eliminated variables. The basis with the first block of ELIM variables eliminated is then computed.
  • -I, --isolate ISOL β€” Isolates the real roots (provided some univariate data) without re-computing a GrΓΆbner basis.
    • 0 β€” no (default).
    • 1 β€” yes.
  • -l, --linear-algebra LIN β€” Linear algebra variant to be applied:
    • 1 β€” exact sparse / dense
    • 2 β€” exact sparse (default)
    • 42 β€” sparse / dense linearization (probabilistic)
    • 44 β€” sparse linearization (probabilistic)
  • -m MPR β€” Maximal number of pairs used per matrix.
    • 0 β€” unlimited (default).
  • -n, --normal-form NF β€” Given n input generators compute normal form of the last NF elements of the input w.r.t. a degree reverse lexicographical GrΓΆbner basis of the first (n - NF) input elements. At the moment this only works for prime field computations. Combining this option with the "-i" option assumes that the first (n - NF) elements generate already a degree reverse lexicographical GrΓΆbner basis.
  • -p, --precision PRE β€” Precision (in bits) on the output of real root isolation.
    • 128 (default).
  • -P, --parametrization PAR β€” Get also rational parametrization of solution set.
    • 0 (default). For a detailed description of the output format please see the general output data format section above.
  • -L, --lifting-mulmat LIF β€” Controls lifting of multplication matrices over the rationals.
    • 0 β€” no lifting (default).
    • 1 β€” matrices are lifted. Warning: when activated, this option may cause higher memory consumption. 😭
  • -q Q β€” Uses signature-based algorithms.
    • 0 β€” no (default).
    • 1 β€” yes.
  • --random-seed SEED β€” Random seed to initialize the pseudo random generator.
    • -1 β€” time(0) will be used (default)
    • SEED β‰₯ 0 β€” use at your own risks; this is intended for developers and debug purposes only.
  • -r, --reduce-gb RED β€” Reduce Groebner basis.
    • 0 β€” no.
    • 1 β€” yes (default).
  • -s HTS β€” Initial hash table size given as power of two.
    • 17 (default).
  • -S β€” Use f4sat saturation algorithm: Given an input file with k polynomials compute the saturation of the ideal generated by the first k-1 polynomials with respect to the kth polynomial.
Note: At the moment restricted to 32 bit prime fields.
  • -u UHT β€” Number of steps after which the hash table is newly generated.
    • 0 β€” no update (default).
  • -V, --version β€” Prints msolve's version.

okay bestie we're back and we're still deep in flag territory πŸ’… this is the part where msolve lets you micromanage literally everything, and honestly? iconic behavior. let's go 🫢

  • -p, --precision PRE β€” the precision, in bits, on the output of real root isolation. default is 128. yes, one hundred and twenty-eight whole bits, we love a generous queen πŸ‘‘
  • -P, --parametrization PAR β€” also hands you a rational parametrization of the solution set. default is 0. and for the full tea on what that output format actually looks like, please see the general output data format section above ⬆️ (iykyk)
  • -L, --lifting-mulmat LIF β€” controls lifting of multiplication matrices over the rationals.
    • 0 β€” no lifting (this is the default).
    • 1 β€” matrices are lifted.
⚠️ warning: when you activate this, it may cause higher memory consumption. your RAM will simply not be okay, and it will tell you. dramatic, but fair.
  • -q Q β€” uses signature-based algorithms.
    • 0 β€” no (default).
    • 1 β€” yes.
  • --random-seed SEED β€” the random seed used to initialize the pseudo random generator. -1 means time(0) will be used, which is the default. SEED β‰₯ 0 means you're using your own, and that is at your own risks πŸ‘€

this one is intended for developers and debug purposes only. so like, not you, bestie, unless you're built different πŸ™ˆ

  • -r, --reduce-gb RED β€” reduce the Groebner basis.
    • 0 β€” no.
    • 1 β€” yes (default).
  • -s HTS β€” the initial hash table size, given as power of two. 17 is the default. a lil specific, a lil perfect ✨
  • -S β€” use the f4sat saturation algorithm. the vibe is this: given an input file with k polynomials, it computes the saturation of the ideal generated by the first k-1 polynomials with respect to the kth polynomial. note: at the moment restricted to 32 bit prime fields. periodt.
  • -u UHT β€” the number of steps after which the hash table is newly generated. 0 β€” no update (default). set it and let the table refresh itself, main character energy.
  • -V, --version β€” prints msolve's version 🌈

and that's the whole flag lineup, bestie, you made it πŸŽ€ this page is msolve, dated October 2026, and it lives in section MSOLVE(1) of your friendly neighborhood manual. go forth and isolate some roots πŸ’–

πŸ“¦ where this page comes from