Fixtype of expressions.
This is a tagged union type, introduced by fty::deftagsum.
We use any integers as constants. This way, the definition of expression (and of the other syntactic entities) does not depend on (the prime number that defines) the prime field. Semantically, integers are treated modulo the prime.
We use (any) strings for variables.
We include just two field operations for now: addition and multiplication. These suffice for arithmetic circuits. Negation, and therefore subtraction, are easily represented, via multiplication by negative one (see expression-neg and expression-sub). We may add other operations in the future, most notably reciprocal, and therefore division. We may also add square roots, and even support user defined functions. Some of these operations will introduce the issue of well-definedness, e.g. non-zero divisors.