<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Satisfiability Modulo Theories, August</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>On Satisfiability of Polynomial Equations over Large Prime Fields</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Lucas Clemente Vella</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Leonardo Alt</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ethereum Foundation</string-name>
        </contrib>
      </contrib-group>
      <pub-date>
        <year>2022</year>
      </pub-date>
      <volume>1</volume>
      <fpage>1</fpage>
      <lpage>12</lpage>
      <abstract>
        <p>The importance of zkSNARKs [1] is ever-increasing in the cryptocurrency and smart contracts ecosystem. Due to the significant threat of financial loss a bug represents in such applications, there is also a surge of interest in the formal verification of zkSNARK programs. These programs are ultimately encoded as a system of polynomial equations over large finite prime fields, and to prove statements about such a program is to prove statements about its system of equations. In this ongoing work, we investigate algebraic techniques with the goal of writing a mixed algebraic-SMT decision procedure to compute satisfiability of a new theory of polynomials over large prime fields. Ideally, the new theory and decision procedure could be implemented in existing SMT solvers as well as a standalone tool, in order to perform verification tasks over real world applications of zkSNARKs.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;large prime fields</kwd>
        <kwd>zkSNARKs</kwd>
        <kwd>satisfiability modulo theories</kwd>
        <kwd>arithmetic circuits</kwd>
        <kwd>ethereum</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (zkSNARKs) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] were
originally designed so that a prover entity could convince a verifier entity that they know
something, without revealing private data. More specifically, given a computable function 1
 and a value  such that  () = , a zkSNARK cryptographic scheme allows Alice to prove
she knows the value of  to Bob, who knows  and , without disclosing the actual value. For
example, given a hash function  and the hash value , using zkSNARKs Alice could prove that
she knows a preimage value  without revealing it.
      </p>
      <p>
        The need for secrecy over publicly available data makes blockchains a fertile ground for
zkSNARKs applications. This technology is fundamental, for example, for the ZCash [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
cryptocurrency, which allows completely private transactions. It is also important for an
increasing number of smart contract applications deployed on public permissionless blockchains,
such as Ethereum [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], where zkSNARKs are used both for privacy, as in Tornado Cash [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ],
maci [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and Dark Forest [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], and to “outsource” heavy computation to outside the Ethereum
network (of-chain), since it can be expensive (as in money) to execute complex programs
on-chain. In these cases, only the zkSNARK verification of computation is done on-chain [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ].
def main ( p r i v a t e u8 y , p u b l i c u8 x ) −&gt; bool :
      </p>
      <p>r e t u r n ( y ∗ y ) == x</p>
      <p>
        A zkSNARK program is often written in a high level DSL, such as ZoKrates [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], Circom [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ],
Cairo [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], Zinc [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], Leo [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], Noir [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], and AirScript [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Compiling such a program
corresponds to creating a constraint system that is equisatisfiable to ∃. () = , consisting of
a system of polynomials over a large finite prime field of the specific zkSNARK scheme being
used. This constraint system is referred as an arithmetic circuit in the literature, as a loose
analogy to digital circuits, where the variables are wires — some are considered inputs, some
are internal and some are outputs. The commonly used proof systems for zkSNARKs use elliptic
curves specifically built for this purpose [
        <xref ref-type="bibr" rid="ref16 ref17">16, 17</xref>
        ], which employ very large prime fields. For
example, the order of the field used by elliptic curve BN128 has 254 bits 2.
      </p>
      <p>The most complex zkSNARK applications have systems on the order of thousands of variables
and millions of polynomial constraints, at which point the execution cost for generating a
zkSNARK proofs becomes a limiting factor. Naturally, verifying properties of such systems is
not any easier. Some verification tasks that are of particular interest to zkSNARKs application
developers are:
• given a constraint system, check whether it represents a function, i.e. whether the output
variables are uniquely determined by the input;
• given two constraint systems, check whether they are equisatisfiable;
• more generically, check whether a constraint system conforms to a specification.</p>
      <p>In this extended abstract, we present our work in progress trying to build a decision procedure
that can be used to perform automated verification of such systems and their properties in
practice, mixing algebraic and SMT approaches. We survey the existing solutions considering
the challenges that our context enforces, and how they may be handled.</p>
      <sec id="sec-1-1">
        <title>1.1. Motivating Example</title>
        <p>As an example, take the ZoKrates program in Figure 1, and consider there are two interacting
persons: the verifier and the prover 3.</p>
        <p>
          The verifier publishes a certain unsigned 8-bit integer , and is interested in whether someone
can prove that they know an unsigned 8-bit integer  such that  is the square root of . ZoKrates
compiles this code into the R1CS [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] form, which consists of a set of polynomial constraints of
the form  *  −  = 0, where ,  and  are linear combinations of prime field elements. The
full constraint system for the example above can be seen in [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ].
        </p>
        <p>After the system is published by the verifier, the prover privately generates a witness, that
is, an assignment for all the variables in the constraint system, including the private  in our
2The exact value is 21888242871839275222246405745257275088548364400416034343698204186575808495617.
3The word “prover” here designates a party in the cryptosystem. Not to be confused with an automated reasoning
engine.
1 . b1 ∗ b1 == b1
2 . b2 ∗ b2 == b2
3 . b3 ∗ b3 == b3
4 . b4 ∗ b4 == b4
5 . b5 ∗ b5 == b5
6 . b6 ∗ b6 == b6
7 . b7 ∗ b7 == b7
8 . b8 ∗ b8 == b8
9 . ( 1 2 8 ∗ b1 + 64 ∗ b2 + 32 ∗ b3 + 16 ∗ b4 +</p>
        <p>8 ∗ b5 + 4 ∗ b6 + 2 ∗ b7 + 1 ∗ b8 ) == x
example. Using the witness, the constraint system, and the proving key published by the verifier,
the prover generates a zero knowledge proof that they know  and that they have executed
the circuit computations specified by the constraint system. Finally, the prover can submit the
proof to a smart contract deployed by the verifier for an on-chain check that the proof is valid,
without revealing any private data.</p>
        <p>Besides the expected constraints for multiplication and equality, when compiling the ZoKrates
high level code into circuit-like polynomial constraints the compiler also conveniently adds
constraints that ensure that  and  are indeed 8-bit numbers, represented in Figure 2 for 
(analogous for ).</p>
        <p>Since  is a prime field element, the compiler decomposes  as a binary number of 8 bits in
constraint 9. However, the variables 1, . . . , 8 that represent those bits are also prime field
elements. Thus, the compiler also adds constraints to ensure that each of those variables can
only be 0 or 1.</p>
        <p>Using current SMT solvers, we can represent the decomposition above as a predicate
bits(, 1, 2, 3, 4, 5, 6, 7, 8)
in the theory of Nonlinear Integer Arithmetic (NIA) applying (mod  ) to both sides of each
equality, where  is the order of the large prime field employed by zkSNARK proof system, 
is the number to be decomposed, and if the predicate is true then 1, . . . , 8 are the bits that
compose . Then we can ask whether this decomposition is deterministic via the assertion in
Figure 3.</p>
        <p>
          The full smtlib2 file can be found in [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]. If the SMT query is unsatisfiable, the decomposition
is deterministic. Neither cvc5 [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] nor z3 [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] could prove this to be unsatisfiable (the expected
result) within 1 minute. If we change the definition of the predicate to, for example, not constrain
bit 2 to be binary (i.e. remove the constraint “2. b2 * b2 == b2” from Figure 2), cvc5 proves
that the problem is satisfiable, showing how to generate diferent bit decompositions that lead
to . Having two diferent bit compositions leading to the same  allows us, for example, to
craft a proof that convinces the verifier that 1282 = 7. In this case we say that the system is
underconstrained which is what causes the nondeterminism. It is possible for nondeterminism
to be harmless, but usually when analyzing functions nondeterminism is not desired.
( a s s e r t ( and
( b i t s x b1 b2 b3 b4 b5 b6 b7 b8 )
( b i t s x c 1 c 2 c 3 c 4 c 5 c 6 c 7 c 8 )
( not ( and
( = b1 c 1 )
( = b2 c 2 )
( = b3 c 3 )
( = b4 c 4 )
( = b5 c 5 )
( = b6 c 6 )
( = b7 c 7 )
( = b8 c 8 )
) )
        </p>
        <p>) )</p>
      </sec>
      <sec id="sec-1-2">
        <title>1.2. Related Work</title>
        <p>
          SMT solvers can often handle large software verification problems, but there is no theory
specifically written for large prime fields, and applying NIA solvers [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] is impractical in this
scenario. Bit-Vector solvers struggle quite quickly given the required maximum bit-width of 256
bits. In a similar context to SMT solvers, a CDCL-like approach for solving polynomial systems
over finite fields is presented in [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ], however the technique used was limited to small fields.
        </p>
        <p>
          Ecne [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ] is a verification tool for zkSNARK programs specialized for deciding whether a
given constraint system represents a function. It is based on a set of heuristics and substitution
rules that are fast and work well in practice. The tool we envision should be capable of verifying
more complex properties, where determinism would be one potential property.
        </p>
        <p>There are several algebraic approaches that can solve the systems of polynomials we propose
in theory, however the complexity of the presented algorithms is prohibitively high to be used
in practice. We discuss these works in detail in Sec. 3.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>2. Problem Statement</title>
      <p>Given a system of polynomial statements, such as the following:
43 + 222 + 12 −  = 5
3 − 32 ̸= 73 + 1
 ̸= ,
our goal is to find if there is an assignment of the variables (  and  in this case) in a field
modulo a certain prime  where all the statements are true.</p>
      <p>It seems that inequations of the kind 2 ≤  do not make sense in a prime field because the
values wrap around, so a total ordering among the elements is not quite meaningfully defined for
most applications of a satisfiability solver. Alternatively, ranges of the kind  ≤ 2 −  &lt; 
look much more useful, but they are not being investigated in the scope of this work.</p>
      <sec id="sec-2-1">
        <title>2.1. Description as a System of Equations</title>
        <p>The problem above can be reduced to the problem of finding the zeros of a set of polynomials,
i.e. the value of x such that 1(x) = 2(x) = ... = (x) = 0, where x is the vector
(1, 2, ..., ). For equalities this is simple, as one can just rearrange all terms to the
lefthand side, leaving 0 on the right-hand side. The equality in the example above becomes the
polynomial</p>
        <p>1 = 43 + 222 + 12 −  − 5.</p>
        <p>
          For disequalities, we can use the “Rabinowitsch trick” [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ] (originally used in a proof of
Hilbert’s Nullstellensatz), to turn all the diferences into a single equation. We first isolate all
terms on the left-hand side, introduce a new variable , and produce the equation
12... − 1 = 0
where  are the polynomials such that  ̸= 0. This works because the equation only has a
solution if  is the inverse of 12..., and zero has no inverse. In other words, if any of the 
is zero, the term 12... vanishes and the remaining equation − 1 = 0 has no solutions.
        </p>
        <p>In the above example, the disequalities produce the polynomial</p>
        <p>2 = (3 − 32 − 73 − 1)( − ) − 1.</p>
        <p>Thus, we ultimately obtain a set of polynomials over a finite field, and the problem is reduced
to finding their common roots in that same field. Like the set of real numbers R, a finite field
is not algebraically closed, and like 2 + 1 = 0 over R have roots  and −  in C (which is an
extension field of R), a polynomial over a finite field might have roots that only exists in an
extension field. We are not interested in such roots.</p>
        <sec id="sec-2-1-1">
          <title>2.1.1. Optimization Idea</title>
          <p>Every polynomial over a field has a unique factorization of the kind  = ℎ1ℎ22ℎ33 . . . ℎ, where
the ℎ are square-free (not divisible by any non-constant polynomial square) and pairwise
coprime (have no common non-constant polynomial divisors). This is called square-free
decomposition and is cheap to compute. It is easy to see that the polynomial ℎ1ℎ2ℎ3 . . . ℎ (the
square-free component of  ) has the same roots of  .</p>
          <p>It might prove beneficial to replace the polynomials with their square-free components, (and
12... with its square-free component, for the disequality polynomial). This is because the
square-free decomposition may reduce the degree and size of the polynomial, thus simplifying
the solving procedure. The solution would be identical, except for the introduced variable ,
which is not important to the problem.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Decision Procedure Discussion</title>
      <p>
        Once we reduce our problem to a system of polynomial equations, we have to solve it. We
now describe the approaches considered, and what we have already implemented. In this
discussion, we assume the degrees of the input polynomials are small (not much larger than
10) and the prime field is large (around 2254). For a definition of the basic algebra concepts
used in this section (rings, ideals and irreducibility), check [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. For a definition of the more
advanced commutative algebra and algebraic geometry concepts (Lasker-Noether theorem,
primary decomposition, algebraic sets, varieties and the classification of ideals) consult [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ].
      </p>
      <p>Before we try any expensive solving algorithm, let us consider some special cases that are
easily handled. It is convenient to first try to reduce the set of polynomials against itself
(reduction is a step of any Gröbner Basis algorithm, see Sec. 3.3), so that the system is sanitized
(all trivial zeros and obviously equivalent polynomials are removed), and some easy to spot
relations might be exposed, thus reducing the degree of some polynomials.</p>
      <p>Special case #1: if the set of polynomials is empty, we consider it vacuously satisfiable and
ifnish. This is consistent with the fact that the 0 polynomial is satisfiable, and that the initial
reduction step removes all 0 polynomials from the set, so an empty set is equivalent to a set
with only zero polynomials.</p>
      <p>Special case #2: non-zero constant polynomial case: if the self-reduction returns a set with a
non-zero constant polynomial (the reduction definition guarantees it will be the only polynomial
left), it obviously cannot be zero, so the system is unsatisafible. In the current implementation
of reduction, if a non-zero constant polynomial is ever encountered, the algorithm is cut short
and returns immediately.</p>
      <p>We then iterate through all the polynomials and count 3 things: the maximum degree of the
system , the number of variables , and the total number of zero degree terms .</p>
      <p>Special case #3: if  = 0, there are no zero degree terms. Thus (0, 0, ..., 0) is a solution of
the system, so we can stop.</p>
      <p>Special case #4: if  = 1 (it cannot be 0 because that was checked in special cases #1 and #2)
then the system is linear. Reduction is the generalization of Gaussian elimination, so whatever
remained of the system is necessarily solvable (otherwise it would have finished in #2) and
already in row echelon form — from which it is trivial to compute the unique solution — and
we can stop.</p>
      <p>
        Special case #5: if  = 1, reduction guarantees there will be only one polynomial left. Since
it is monic, we can extract a root by using the Cantor-Zassenhaus probabilistic algorithm [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ]
(not yet implemented).
      </p>
      <p>
        Special case #6: this is not yet implemented, and we are not sure if it is worth it. In case of
a single polynomial with  &gt; 1, [
        <xref ref-type="bibr" rid="ref30">30</xref>
        ] suggests factoring into irreducible factors: if any of the
factors is absolutely irreducible (i.e. irreducible over any extension field, and there is a test for
that [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ]) then we consider it satisfiable. Plenty of solutions are guaranteed if  and  are small
enough compared to the field size [
        <xref ref-type="bibr" rid="ref30 ref32 ref33">30, 32, 33</xref>
        ]. Otherwise, each factor  can then be handled
independently: recursively test if the system { =  / = 0} is satisfiable, for some variable
 where  / does not vanish. The problem is satisfiable if at least one of these subsystems
spawned by the factors is satisfiable.
      </p>
      <p>We now discuss the alternatives being explored for the general case.</p>
      <sec id="sec-3-1">
        <title>3.1. Fast Algebraic Geometry Method</title>
        <p>
          If the set of polynomials has some particular properties, namely, it defines a prime ideal (an ideal
that is both primary and radical), and it defines an absolutely irreducible algebraic set (a variety),
then the algorithm in [
          <xref ref-type="bibr" rid="ref32">32</xref>
          ] allows for finding one common root in probabilistic polynomial time.
        </p>
        <p>The problem is, of course, that this method is incomplete, as not all problems will obey these
properties. It is unclear how many problems this technique would be able to solve on its own.
It is also unclear what happens if the algorithm is executed on a polynomial set without those
properties. Moreover, it is also unknown how to test whether an ideal is a radical without a full
Gröbner Basis, and how to test whether an algebraic set is a variety. Nothing on this front has
been implemented.</p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Robust Algebraic Geometry Method</title>
        <p>
          There is another class of algorithms based on algebraic geometry (original probabilistic version
given in [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ], deterministic version given in [
          <xref ref-type="bibr" rid="ref34">34</xref>
          ]). Compared to the Fast Algebraic Geometry
Method, instead of expecting the problem to be given as a variety, it recursively decomposes the
problem’s algebraic set until it either eventually reaches a variety (then deciding for satisfiable)
or it is no longer possible to decompose, deciding for unsatisfiable.
        </p>
        <p>This algorithm’s complexity is double exponential on the number of variables, and only
works if  &gt; () , where  is the order of the prime field,  is the maximum degree of the
polynomials and  is the number of variables. Using our assumptions of  ≈ 2254 and  ≈ 10,
this algorithm does not work in general for much more than 3 variables. It is unclear for
how many instances of the problem this algorithm might work in practice, but at least for the
probabilistic version, this algorithm does not look practical at all.</p>
        <p>
          Nothing of the algebraic set decomposition algorithm has been implemented. From here, we
only implemented a test that tells whether a single multivariate polynomial that happens to be
absolutely irreducible has any roots, originally from [
          <xref ref-type="bibr" rid="ref33">33</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Methods based on Gröbner Basis</title>
        <p>
          Finding the reduced Gröbner Basis [
          <xref ref-type="bibr" rid="ref35">35</xref>
          ] of the polynomial set is often the first step for solving
the system. The best known algorithms for finding Gröbner Basis are Faugère’s F4 [
          <xref ref-type="bibr" rid="ref36">36</xref>
          ] and
F5 [
          <xref ref-type="bibr" rid="ref37">37</xref>
          ] algorithms, and they have worst case exponential space complexity. The Gröbner Basis is
defined for a total order among the monomials (i.e. the variable product power parts such as
32), which implies a total order among the variables themselves. Each ordering has some
useful properties: reverse degree lexicographical order (degrevlex), also called graded reverse
lexicographic order (grevlex) is the fastest to calculate (exponential time instead of double
exponential). Lexicographical ordering leaves the system in the triangular format suitable for
variable elimination.
        </p>
        <p>At the moment, we have implemented only a naive version of Buchberger’s algorithm, which
is much worse in practice than Faugère’s F4 and F5 (but has the same worst case complexity).
For a very small system it is capable of computing the Gröbner Basis in grevlex ordering, but
we do not believe it would perform well for lexicographical ordering.</p>
        <sec id="sec-3-3-1">
          <title>3.3.1. Triangular System</title>
          <p>
            For this approach, we need the Gröbner Basis in lexicographical order, so that the system is in a
triangular format where we can eliminate one variable at a time. However Gröbner Basis is
much faster to compute on grevlex, so much that in practice lexicographical order is obtained
by transforming from grevlex via Gröbner Walk [
            <xref ref-type="bibr" rid="ref38">38</xref>
            ] or similar. According to [
            <xref ref-type="bibr" rid="ref39">39</xref>
            ], this order
conversion step is the slowest in this approach.
          </p>
          <p>This yields a new set of polynomials with the same roots, but in a triangular format. Once
the free variables are assigned, the system can be solved one variable at a time, so that the first
polynomial has only one variable to be solved. This leaves the next polynomial with only one
variable after replacing the variables already known, and so forth until the system is completely
solved.</p>
          <p>For instance, in 3 variable systems, if we define  &gt;  &gt;  &gt; 1 in our ordering (1 must
always be the smallest), then the first variable that can be solved is , then , then , assuming
the system is fully determined. If the system is not fully determined, and there are free variables,
then the lowest variables are the ones to be assigned.</p>
          <p>Having an algorithm to find the roots one variable at a time, we still have a branching problem,
where each variable assignment leads to a new set of possible assignments for the next variable,
and so on. Thus, the naive search expands into a typical NP problem.</p>
          <p>Finding roots of a univariate polynomial in a prime field is relatively cheap, with the best
known algorithm being factorizing the polynomial into unique factors (− 1)(− 2)...(− )
where  are the roots of the polynomial. The most eficient algorithm for factorization in a
prime field is called the Cantor-Zassenhaus algorithm, with complexity (3 log ) where  is
the degree of the polynomial and  is the field’s characteristic prime.</p>
          <p>Besides the Gröbner Basis in grevlex, we have not yet implemented the techniques mentioned
above, Gröbner Walk (or some alternative) and Cantor-Zassenhaus being the most notable
absences.</p>
          <p>The unsolved problems of this approach include how to choose the variable ordering optimally
and a search for variable assignments in the triangular system that is better than exhaustive
trial and error. It is unclear how to perform a local search in the triangular system, much less
how to prove unsatisfiability.</p>
        </sec>
        <sec id="sec-3-3-2">
          <title>3.3.2. Primary Decomposition Method</title>
          <p>Given polynomials in the ring F[1, 2, ..., ], every polynomial set defines an algebraic set,
which is the set of points in F where all polynomials evaluate to zero. This is the set from
where we seek solutions: by finding one point in the algebraic set, we have proven the problem
to be satisfiable, and by proving the algebraic set to be empty, we have proven the problem to
be unsatisfiable.</p>
          <p>The set of polynomials we are trying to solve defines an ideal, and by Lasker-Noether theorem
we know that such polynomial ideal is the intersection of a finite set of primary ideals (called the
primary decomposition of the ideal), which implies any algebraic set is a union of irreducible
algebraic sets, named varieties.</p>
          <p>
            So the idea of this approach is to find the radical of the ideal defined by our polynomial set,
compute its primary decomposition, and for each prime ideal found (which is primary and
radical), try to find a zero in its algebraic set. This seems to go back to the initial problem:
we have a set of polynomials for which we must find a common zero point. The diference is
that since we know we are dealing with an algebraic variety, we may be able to handle it with
algebraic geometry methods such as the one described in [
            <xref ref-type="bibr" rid="ref32">32</xref>
            ].
          </p>
          <p>This can also be the first approach of a hybrid method, where the bigger problem is reduced
to smaller sub-problems that can then be handled in parallel. Each subproblem is attempted to
be solved first by the Fast Algebraic Geometry method, and if that fails, we can apply diferent
approaches such as the triangular system method, local search, CDCL or others.</p>
          <p>
            Computing the Gröbner Basis is the first step of the primary decomposition and radical ideal
algorithms, such as in [
            <xref ref-type="bibr" rid="ref40">40</xref>
            ].
          </p>
          <p>The biggest issue of this method is that it is not complete: it decides for satisfiable if it is easy
to extract a rational point from one of the algebraic sets (i.e. it is a variety) and it decides for
unsatisfiable if the algebraic set is empty on the extension field (Gröbner Basis turns out to be a
single non-zero constant). However, besides partitioning the problem, it does not help in case
all the algebraic sets are reducible in the extension field.</p>
        </sec>
        <sec id="sec-3-3-3">
          <title>3.3.3. Base Field Restriction</title>
          <p>The satisfiability problem can be solved by finding the Gröbner Basis of the system extended
with the equations</p>
          <p>−  = 0
for each variable  in the system (as per Fermat’s little theorem,  =  mod ). This removes
all roots lying in an extension field but not in the base field.</p>
          <p>For instance, for the system:
1 = 43 + 222 + 12 −  − 5
2 = (3 − 32 − 73 − 1)( − ) − 1
the new polynomials would be:
3 =  − 
4 =  − 
5 =  − 
where  is the field’s characteristic prime.</p>
          <p>The Gröbner Basis of the extended set contains a non-zero constant polynomial if the system
is unsatisfiable. Such Gröbner Basis can be calculated using any monomial ordering, such as
degree reverse lexicographical order, which is cheaper to compute than the lexicographical
order.</p>
          <p>It is unclear how to turn this into a practical algorithm for the case where  ≫ 2, as the
procedure to compute the Gröbner Basis is prohibitively expensive due to the time complexity
being (2) on the reduction step of  −  = 0. We suspect it can be done in ( log ) by
using exponentiation by squaring, but even linear complexity on  is impractical, and would
not help with the huge size that each reduced polynomial would have (on the order of ()).</p>
        </sec>
      </sec>
      <sec id="sec-3-4">
        <title>3.4. Local Search Method</title>
        <p>This is more a complementary approach than an alternative, as it cannot prove unsatisfiability,
and it may find a solution quickly if they are abundant.</p>
        <p>A local search is the standard way of approximating floating point solutions for most equation
systems found in engineering and simulations. The problem is treated as a black box function
(called objective function), and the input is varied (the solution you want) according to how it
afects the output, usually following the gradient towards a local minimum. A solution is found
when zero is reached.</p>
        <p>The traditional way of building an objective function for systems of equations is to take some
norm (usually 2 or ∞) of the residual vector. In case of polynomials, the elements of the
residual vector are the evaluation of each polynomial at the given input. In case of prime fields,
it is important to consider that the distance to 0 is at most /2 when calculating the norm.</p>
        <p>
          In SAT solving, discrete probabilistic methods (such as simulated annealing [
          <xref ref-type="bibr" rid="ref41">41</xref>
          ]) are used
for local search, and that might be a good choice in our case, too. However, we also think it is
worth to investigate classical mathematical methods, such as Powell, BFGS or even Newton’s
method, since the polynomials are diferentiable (see [
          <xref ref-type="bibr" rid="ref42">42</xref>
          ] for these methods).
        </p>
        <p>
          That said, the problem is much harder on the discrete case compared to continuous, because
the search might narrow down to oscillate around zero, but never reach it because it is in
between the minimum discrete steps. Such problem does not happen over reals. A metaheuristic
such as Tabu Search [
          <xref ref-type="bibr" rid="ref43">43</xref>
          ] might be useful to exclude such convergent points, but a huge number
of restarts might be unavoidable.
        </p>
        <p>Some ideas that could be considered are: it might be beneficial to just use the equalities for the
local search, removing the disequalities polynomial and considering each individual disequality
as a constraint. If the disequalities happen to be useful in the search, it might be better to apply
the Rabinowitsch trick individually for each one, because adding new variables is not a problem
for this method, and this makes each restriction more explicit for the search algorithm.</p>
      </sec>
      <sec id="sec-3-5">
        <title>3.5. CDCL-like Approach</title>
        <p>
          The work in [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] describes a decision procedure for nonlinear constraints of polynomials over
Z and its roots over R. It is done by a CDCL-style procedure where a sequence of clauses and
variable assignments is assembled one by one so that the total assignment is always consistent
with the selected clauses.
        </p>
        <p>When a conflict is detected, the set of conflicting polynomial constraints is identified, and
Cylindrical Algebraic Decomposition (CAD) is used to isolate a whole region in the search space
where this conflict can happen. This region is then described as a set of polynomial constraints
that are added to the problem as learned clauses.</p>
        <p>The dificulty of generalizing this technique for prime fields is that we need a way of
generalizing a conflict in one particular variable evaluation to a whole region of the search space (the
role of CAD in the original algorithm). Moreover, we also need to be able to describe it in a
meaningful way for the deduction system, i.e. define the new restrictions only in terms of =
and ̸=, not with &gt;, ≥ , &lt; and ≤ .</p>
        <p>
          What also complicates the matter is that we are only interested in solutions that happen to
be on the base field, not in the whole extension field, a restriction that [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] does not have to
worry about.
        </p>
        <p>
          The work in [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] attempts two diferent approaches to replace CAD for the prime field case:
in one, a conflicting clause is found by calculating the Gröbner Basis on the remaining set
of polynomials after evaluation on the partial variable assignment. The other approach uses
elimination theory, which is able to handle constraints of form  ̸= 0 directly, where  is a
polynomial.
        </p>
        <p>
          The problem of roots outside the base field is solved by including the polynomials  −  for
every variable , which is most likely the main cause for the poor performance displayed in
practice by the algorithms in [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ], and limits the technique to very low values of .
        </p>
        <p>
          We suspect it might be possible to improve the approach in [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] by removing the  − 
polynomials from the conflict search, and handle such restrictions separately (as well as the
common restriction for binary variables 2 − ). If possible, this is a promising direction.
        </p>
      </sec>
      <sec id="sec-3-6">
        <title>3.6. SIMPLEX Generalization</title>
        <p>In linear systems, the search can be reduced by looking at the bounds of the variables with
the SIMPLEX algorithm. It may be that there is a SIMPLEX generalization that works here to
speed up the search. However, that is unlikely since SIMPLEX works by iteratively restricting
the convex search space limited by straight lines/hyperplanes, but the curves designated by
non-linear polynomials are not planes, so the limited space will not be convex.</p>
        <p>This possibility is entertained for the sake of completeness and has not been considered in
practice.</p>
      </sec>
      <sec id="sec-3-7">
        <title>3.7. More Alternatives</title>
        <p>
          An algorithm named Mutant Zhuang-Zi is given in [
          <xref ref-type="bibr" rid="ref44">44</xref>
          ] for solving a polynomial system over a
ifnite field, and a somewhat promising algorithm for counting the solutions is given in [
          <xref ref-type="bibr" rid="ref45">45</xref>
          ].
However, at a first glance they do not seem to apply to large  due to including  −  in the
computations.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Conclusion</title>
      <p>In this work in progress, we investigate how to decide satisfiability of a system of polynomials
over a large prime field. We are also currently implementing a tool that will hopefully be used
for the formal verification of zkSNARKs constraint systems using the investigated techniques.</p>
      <p>It seems that the bane of large prime fields are the field equations  −  = 0. When used
either with Gröbner Basis or other algorithms, these equations makes the running time (and
space) of the algorithms a superlinear function of the prime number, which is so large that even
() is impractical.</p>
      <p>
        The role of field equations in the existing algorithms is to restrict the roots found on the
prime field itself (i.e. filter out solutions found only on the extension field). Embedding them
explicitly on the system to be solved might only work for small prime fields, but with creative
indirect use, there are probabilistic algorithms such as Cantor-Zassenhaus and [
        <xref ref-type="bibr" rid="ref32">32</xref>
        ] that are
able to sample roots over large prime fields (which have exponentially more roots than small
prime fields [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ]). So there is hope that at least proving the satisfiable cases is feasible for a
large portion of the general case, whereas the unsatisfiable case might be much trickier.
      </p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgement</title>
      <p>The authors thank Barry Whitehat, Mahmut Levent Doğan, Nikolaj Bjørner and Thibaut
Schaefer for the valuable discussions and insights on Zero Knowledge Proofs, ZoKrates, polynomial
constraint systems, Gröbner Basis and algebraic geometry.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Zcash</given-names>
            <surname>Team</surname>
          </string-name>
          , What are zk-SNARKs?,
          <year>2022</year>
          . URL: https://z.cash/technology/zksnarks/.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>E.</given-names>
            <surname>Ben Sasson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Chiesa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Garman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Green</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Miers</surname>
          </string-name>
          , E. Tromer,
          <string-name>
            <given-names>M.</given-names>
            <surname>Virza</surname>
          </string-name>
          , Zerocash: Decentralized Anonymous Payments from Bitcoin,
          <source>in: 2014 IEEE Symposium on Security and Privacy</source>
          ,
          <year>2014</year>
          , pp.
          <fpage>459</fpage>
          -
          <lpage>474</lpage>
          . doi:
          <volume>10</volume>
          .1109/SP.
          <year>2014</year>
          .
          <volume>36</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>V.</given-names>
            <surname>Buterin</surname>
          </string-name>
          ,
          <article-title>Ethereum: A next-generation smart contract and decentralized application platform</article-title>
          ,
          <year>2014</year>
          . URL: https://ethereum.org/en/whitepaper/.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4] @ayefda, Introduction to Tornado Cash,
          <year>2022</year>
          . URL: https://docs.tornado.cash/general/ readme.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>B.</given-names>
            <surname>WhiteHat</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Tan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Gurkan</surname>
          </string-name>
          , C.-C. Liang, ,
          <string-name>
            <given-names>K. W.</given-names>
            <surname>Jie</surname>
          </string-name>
          , Minimum
          <string-name>
            <surname>Anti-Collusion Infrastructure</surname>
          </string-name>
          ,
          <year>2022</year>
          . URL: https://github.com/privacy-scaling-explorations/maci/blob/master/ specs/01_introduction.md.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D. F.</given-names>
            <surname>Team</surname>
          </string-name>
          , Announcing Dark Forest,
          <year>2020</year>
          . URL: https://blog.zkga.me/ announcing-darkforest.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>C.</given-names>
            <surname>Smith</surname>
          </string-name>
          ,
          <source>Zero Knowledge Rollups</source>
          ,
          <year>2022</year>
          . URL: https://ethereum.org/en/developers/docs/ scaling/zk-rollups.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>B.</given-names>
            <surname>WhiteHat</surname>
          </string-name>
          , Y. Tong,
          <article-title>Initial Zero Knowledge Roll Up proposal</article-title>
          ,
          <year>2019</year>
          . URL: https://github. com/barryWhiteHat/roll_up_token.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <article-title>[9] ZoKrates contributors</article-title>
          ,
          <source>ZoKrates documentation</source>
          ,
          <year>2022</year>
          . URL: https://zokrates.github.io/.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J. L.</given-names>
            <surname>Muñoz-Tapia</surname>
          </string-name>
          , Circom documentation,
          <year>2021</year>
          . URL: https://docs.circom.io/.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>StarkWare</given-names>
            <surname>Industries</surname>
          </string-name>
          <article-title>Ltd</article-title>
          .,
          <string-name>
            <surname>Cairo</surname>
            <given-names>documentation</given-names>
          </string-name>
          ,
          <year>2021</year>
          . URL: https://www.cairo-lang.org/ docs/.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Gluchowski</surname>
          </string-name>
          ,
          <source>Release of Zinc v0.1</source>
          ,
          <year>2020</year>
          . URL: https://blog.matter
          <article-title>-labs.io/ release-of-zinc-v0-1-8d949aa9a2f2.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>C.</given-names>
            <surname>Chin</surname>
          </string-name>
          , H. Wu, Leo documentation,
          <year>2022</year>
          . URL: https://github.com/AleoHQ/leo.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>K.</given-names>
            <surname>Wedderburn</surname>
          </string-name>
          , Noir documentation,
          <year>2022</year>
          . URL: https://noir-lang.github.io/book/index. html.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>B.</given-names>
            <surname>Threadbare</surname>
          </string-name>
          , AirScript repository,
          <year>2020</year>
          . URL: https://github.com/GuildOf Weavers/ AirScript.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>S.</given-names>
            <surname>Bowe</surname>
          </string-name>
          ,
          <fpage>BLS12</fpage>
          -
          <lpage>381</lpage>
          : New zk-SNARK
          <source>Elliptic Curve Construction</source>
          ,
          <year>2017</year>
          . URL: https:// electriccoin.co/blog/new-snark-curve/.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Zcash</surname>
            <given-names>Team</given-names>
          </string-name>
          , What is Jubjub?,
          <year>2019</year>
          . URL: https://z.cash/technology/jubjub/.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>V.</given-names>
            <surname>Buterin</surname>
          </string-name>
          ,
          <article-title>Quadratic arithmetic programs: from zero to hero, 2016</article-title>
          . URL: https://medium. com/@VitalikButerin/quadratic-arithmetic
          <article-title>-programs-from-zero-to-hero-f6d558cea649.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>L.</given-names>
            <surname>Alt</surname>
          </string-name>
          ,
          <article-title>Example circuit in the ZoKrates intermediate representation</article-title>
          ,
          <year>2022</year>
          . URL: https: //gist.github.com/leonardoalt/05b0428bee4b09173b224e8c1b4fa15e.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>L.</given-names>
            <surname>Alt</surname>
          </string-name>
          ,
          <article-title>SMTLib2 query representing an 8-bit unsigned integer decomposition</article-title>
          ,
          <year>2022</year>
          . URL: https://gist.github.com/leonardoalt/e4c6704be6ea3be288ddcef3c6924dfe.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>H.</given-names>
            <surname>Barbosa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Brain</surname>
          </string-name>
          , G. Kremer,
          <string-name>
            <given-names>H.</given-names>
            <surname>Lachnitt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Mann</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mohamed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Mohamed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Niemetz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Nötzli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ozdemir</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Preiner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Reynolds</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Sheng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zohar</surname>
          </string-name>
          , cvc5:
          <string-name>
            <given-names>A</given-names>
            <surname>Versatile</surname>
          </string-name>
          and
          <article-title>Industrial-Strength SMT Solver, in: Tools and Algorithms for the Construction</article-title>
          and
          <source>Analysis of Systems</source>
          ,
          <year>2022</year>
          , pp.
          <fpage>415</fpage>
          -
          <lpage>442</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 978-3-
          <fpage>030</fpage>
          -99524-9_
          <fpage>24</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>L. de Moura</surname>
          </string-name>
          , N. Bjørner,
          <article-title>Z3: An eficient SMT solver, in: Tools and Algorithms for the Construction and Analysis of Systems</article-title>
          , volume
          <volume>4963</volume>
          of Lecture Notes in Computer Science,
          <year>2008</year>
          , pp.
          <fpage>337</fpage>
          -
          <lpage>340</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>540</fpage>
          -78800-3_
          <fpage>24</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>D.</given-names>
            <surname>Jovanović</surname>
          </string-name>
          , L. de Moura,
          <article-title>Solving non-linear arithmetic</article-title>
          ,
          <source>in: Automated Reasoning</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>339</fpage>
          -
          <lpage>354</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -31365-3_
          <fpage>27</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>T.</given-names>
            <surname>Hader</surname>
          </string-name>
          ,
          <string-name>
            <surname>Non-Linear</surname>
            <given-names>SMT</given-names>
          </string-name>
          -Reasoning over Finite Fields,
          <source>Master's thesis</source>
          ,
          <year>2022</year>
          . URL: https: //repositum.tuwien.at/handle/20.500.12708/19502.
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>F.</given-names>
            <surname>Wang</surname>
          </string-name>
          , Ecne:
          <source>Automated verification of zk circuits</source>
          ,
          <year>2022</year>
          . URL: https://0xparc.org/blog/ ecne.
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>W. D.</given-names>
            <surname>Brownawell</surname>
          </string-name>
          ,
          <article-title>Rabinowitsch trick</article-title>
          , in: M.
          <string-name>
            <surname>Hazewinkel</surname>
          </string-name>
          (Ed.),
          <source>Encyclopaedia of Mathematics</source>
          , volume
          <string-name>
            <surname>supplemental</surname>
            <given-names>III</given-names>
          </string-name>
          , Kluwer Academic Publishers, Dordrecht, The Netherlands,
          <year>2001</year>
          , p.
          <fpage>323</fpage>
          . URL: https://encyclopediaofmath.org/wiki/Rabinowitsch_trick.
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Gallian</surname>
          </string-name>
          , Contemporary Abstract Algebra, CRC Press, Abingdon, Oxfordshire, England,
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>D.</given-names>
            <surname>Eisenbud</surname>
          </string-name>
          ,
          <article-title>Commutative Algebra with a View Toward Algebraic Geometry</article-title>
          , Graduate Texts in Mathematics, Springer, New York, NY,
          <year>1995</year>
          . doi:
          <volume>10</volume>
          .1007/ 978-1-
          <fpage>4612</fpage>
          -5350-1.
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>D. G.</given-names>
            <surname>Cantor</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zassenhaus</surname>
          </string-name>
          ,
          <article-title>A new algorithm for factoring polynomials over ifnite fields</article-title>
          ,
          <source>Mathematics of Computation</source>
          <volume>36</volume>
          (
          <year>1981</year>
          )
          <fpage>587</fpage>
          -
          <lpage>592</lpage>
          . doi:
          <volume>10</volume>
          .1090/ S0025-5718-1981-0606517-5.
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <surname>M.-D. Huang</surname>
            ,
            <given-names>Y.-C.</given-names>
          </string-name>
          <string-name>
            <surname>Wong</surname>
          </string-name>
          ,
          <article-title>Solving systems of polynomial congruences modulo a large prime</article-title>
          ,
          <source>in: Proceedings of 37th Conference on Foundations of Computer Science</source>
          ,
          <year>1996</year>
          , pp.
          <fpage>115</fpage>
          -
          <lpage>124</lpage>
          . doi:
          <volume>10</volume>
          .1109/SFCS.
          <year>1996</year>
          .
          <volume>548470</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>E.</given-names>
            <surname>Kaltofen</surname>
          </string-name>
          ,
          <article-title>Fast parallel absolute irreducibility testing</article-title>
          ,
          <source>Journal of Symbolic Computation</source>
          <volume>1</volume>
          (
          <year>1985</year>
          )
          <fpage>57</fpage>
          -
          <lpage>67</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0747-
          <volume>7171</volume>
          (
          <issue>85</issue>
          )
          <fpage>80029</fpage>
          -
          <lpage>8</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>A.</given-names>
            <surname>Cafure</surname>
          </string-name>
          , G. Matera,
          <article-title>Fast computation of a rational point of a variety over a finite field</article-title>
          ,
          <source>Mathematics of Computation</source>
          <volume>75</volume>
          (
          <year>2006</year>
          )
          <fpage>2049</fpage>
          -
          <lpage>2085</lpage>
          . doi:
          <volume>10</volume>
          .1090/ S0025-5718-
          <fpage>06</fpage>
          -01878-3.
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>W. M.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <article-title>A lower bound for the number of solutions of equations over finite fields</article-title>
          ,
          <source>Journal of Number Theory</source>
          <volume>6</volume>
          (
          <year>1974</year>
          )
          <fpage>448</fpage>
          -
          <lpage>480</lpage>
          . doi:
          <volume>10</volume>
          .1016/
          <fpage>0022</fpage>
          -
          <lpage>314X</lpage>
          (
          <issue>74</issue>
          )
          <fpage>90043</fpage>
          -
          <lpage>2</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>N.</given-names>
            <surname>Kayal</surname>
          </string-name>
          ,
          <article-title>Derandomizing some algebraic and number-theoretic algorithms</article-title>
          ,
          <source>Ph.D. thesis</source>
          ,
          <year>2006</year>
          . URL: https://www.microsoft.com/en-us/research/publication/ derandomizing
          <article-title>-some-algebraic-and-number-theoretic-algorithms/.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>B.</given-names>
            <surname>Buchberger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kauers</surname>
          </string-name>
          , Groebner basis,
          <year>2010</year>
          . URL: http://www.scholarpedia.org/article/ Gr%C3%
          <article-title>B6bner_basis.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <surname>J.-C. Faugére</surname>
          </string-name>
          ,
          <article-title>A new eficient algorithm for computing Gröbner bases (F4)</article-title>
          ,
          <source>Journal of Pure and Applied Algebra</source>
          <volume>139</volume>
          (
          <year>1999</year>
          )
          <fpage>61</fpage>
          -
          <lpage>88</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0022-
          <volume>4049</volume>
          (
          <issue>99</issue>
          )
          <fpage>00005</fpage>
          -
          <lpage>5</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>C.</given-names>
            <surname>Eder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.-C.</given-names>
            <surname>Faugère</surname>
          </string-name>
          ,
          <article-title>A survey on signature-based algorithms for computing Gröbner basis computations</article-title>
          ,
          <source>Journal of Symbolic Computation</source>
          (
          <year>2016</year>
          )
          <fpage>1</fpage>
          -
          <lpage>75</lpage>
          . doi:
          <volume>10</volume>
          .1016/j.jsc.
          <year>2016</year>
          .
          <volume>07</volume>
          .031.
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>S.</given-names>
            <surname>Collart</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kalkbrener</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Mall</surname>
          </string-name>
          ,
          <article-title>Converting bases with the gröbner walk</article-title>
          ,
          <source>Journal of Symbolic Computation</source>
          <volume>24</volume>
          (
          <year>1997</year>
          )
          <fpage>465</fpage>
          -
          <lpage>469</lpage>
          . doi:
          <volume>10</volume>
          .1006/jsco.
          <year>1996</year>
          .
          <volume>0145</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <given-names>C.</given-names>
            <surname>Mou</surname>
          </string-name>
          ,
          <source>Solving Polynomial Systems over Finite Fields: Algorithms</source>
          , Implementation and Applications,
          <source>Ph.D. thesis</source>
          , Université Pierre et Marie Curie,
          <year>2013</year>
          . URL: https://tel. archives-ouvertes.fr/tel-01110887.
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40]
          <string-name>
            <surname>P. M. Gianni</surname>
            ,
            <given-names>B. M.</given-names>
          </string-name>
          <string-name>
            <surname>Trager</surname>
          </string-name>
          , G. Zacharias,
          <article-title>Gröbner bases and primary decomposition of polynomial ideals</article-title>
          ,
          <source>J. Symb. Comput</source>
          .
          <volume>6</volume>
          (
          <year>1988</year>
          )
          <fpage>149</fpage>
          -
          <lpage>167</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0747-
          <volume>7171</volume>
          (
          <issue>88</issue>
          )
          <fpage>80040</fpage>
          -
          <lpage>3</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <string-name>
            <given-names>F.</given-names>
            <surname>Martinez-Rios</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Frausto-Solis</surname>
          </string-name>
          ,
          <article-title>A simulated annealing algorithm for the satisfiability problem using dynamic markov chains with linear regression equilibrium</article-title>
          , in: M. de Sales Guerra Tsuzuki (Ed.), Simulated Annealing, IntechOpen, Rijeka,
          <year>2012</year>
          . doi:
          <volume>10</volume>
          .5772/46175.
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [42]
          <string-name>
            <given-names>G. N.</given-names>
            <surname>Vanderplaats</surname>
          </string-name>
          , Numerical Optimization Techniques For Engineering Design, Vanderplaats Research &amp; Development, Inc,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [43]
          <string-name>
            <given-names>F.</given-names>
            <surname>Glover</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Laguna</surname>
          </string-name>
          , Tabu Search,
          <string-name>
            <surname>Springer</surname>
            <given-names>US</given-names>
          </string-name>
          , Boston, MA,
          <year>1998</year>
          , pp.
          <fpage>2093</fpage>
          -
          <lpage>2229</lpage>
          . doi:
          <volume>10</volume>
          . 1007/978-1-
          <fpage>4613</fpage>
          -0303-9_
          <fpage>33</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref44">
        <mixed-citation>
          [44]
          <string-name>
            <given-names>J.</given-names>
            <surname>Ding</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          , Mutant
          <string-name>
            <surname>Zhuang-Zi</surname>
            <given-names>Algorithm</given-names>
          </string-name>
          , in: N.
          <string-name>
            <surname>Sendrier</surname>
          </string-name>
          (Ed.),
          <string-name>
            <surname>Post-Quantum Cryptography</surname>
          </string-name>
          ,
          <year>2010</year>
          , pp.
          <fpage>28</fpage>
          -
          <lpage>40</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -12929-
          <issue>2</issue>
          _
          <fpage>3</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref45">
        <mixed-citation>
          [45]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <source>Counting Zeros over Finite Fields with Gröbner Bases</source>
          ,
          <year>2009</year>
          . URL: https://www.cs. cmu.edu/~sicung/papers/MS_thesis.pdf.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>