Parsing input expressions into linear form #
linarith computes the linear form of its input expressions,
assuming (without justification) that the type of these expressions
is a commutative semiring.
It identifies atoms up to ring-equivalence: that is, (y*3)*x will be identified 3*(x*y),
where the monomial x*y is the linear atom.
- Variables are represented by natural numbers.
- Monomials are represented by monom := rb_map ℕ ℕ. The monomial1is represented by the empty map.
- Linear combinations of monomials are represented by sum := rb_map monom ℤ.
All input expressions are converted to sums, preserving the map from expressions to variables.
We then discard the monomial information, mapping each distinct monomial to a natural number.
The resulting rb_map ℕ ℤ represents the ring-normalized linear form of the expression.
This is ultimately converted into a linexp in the obvious way.
linear_forms_and_vars is the main entry point into this file. Everything else is contained.