where args includes actual arguments, but also where to write the results are written to.
If you have a call like this:
{a1 + 256 * a2, b1 + 256 * b2, c1 + 256 * c2} is { XOR.a, XOR.b, XOR.c }
assuming all columns on the LHS are range-constrained to be bytes, the solve_with_range_constraints() function can figure out the values of c1 and c2. This already works, if c1 and c2 are globally range constrained (e.g. there is a constraint {c1} in BYTES).
But the range constraints are not global (e.g. because we do some fancy tricks to save lookups), these range constraints are not passed to the called machine.
Currently, our
Machine
trait defines this function:where
args
includes actual arguments, but also where to write the results are written to.If you have a call like this:
{a1 + 256 * a2, b1 + 256 * b2, c1 + 256 * c2} is { XOR.a, XOR.b, XOR.c }
assuming all columns on the LHS are range-constrained to be bytes, thesolve_with_range_constraints()
function can figure out the values ofc1
andc2
. This already works, ifc1
andc2
are globally range constrained (e.g. there is a constraint{c1} in BYTES
).But the range constraints are not global (e.g. because we do some fancy tricks to save lookups), these range constraints are not passed to the called machine.