assert … by(nonlinear_arith)

Invoke Z3’s nonlinear solver to prove the given predicate.

assert(P) by(bit_vector);
assert(P) by(bit_vector)
  requires Q;

The solver uses Z3’s theory of nonlinear arithmetic. This can often solve problems that involve multiplication or division of symbolic values. For example, commutativity axioms like a * b == b * a are accessible in this mode.

The prover does not have access to any prior context except that which is given in the requires clause, if provided. If the requires clause is provided, then the bit vector solver attempts to prove Q ==> P. Verus will also check (using its normal solver) that Q holds from the prior proof context.