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.
Two field operations, addition and multiplication, suffice for arithmetic circuits. We also add negation (unary), and subtraction (binary) for convenience. 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.