Combines nested rem terms into a single toplevel one.
DESCRIPTION
When applied to a term containing integer arithmetic operations of
negation, addition, subtraction, multiplication and exponentiation,
interspersed with applying rem with a fixed modulus n, and a toplevel
... rem n too, the conversion INT_REM_DOWN_CONV proves that this is equal
to a simplified term with only the toplevel rem.
FAILURE CONDITIONS
Never fails but may have no effect
EXAMPLE
# let tm = `((x rem n) + (y rem n * &3) pow 2) rem n`;;
val tm : term = `(x rem n + (y rem n * &3) pow 2) rem n`
# INT_REM_DOWN_CONV tm;;
val it : thm =
|- (x rem n + (y rem n * &3) pow 2) rem n = (x + (y * &3) pow 2) rem n