Terras uniformity: descent transfers across a residue class mod
Provedsyracuse_uniform_descentLet be the Syracuse map, . Fix an odd and record the exponents stripped along its first steps: , so that
Write for the total number of halvings. Suppose
- the halvings fit inside the modulus, ;
- the orbit contracts, ;
- the representative descends, .
Then every odd congruent to modulo satisfies , using the same number of steps.
Why this is the useful form. Verifying that numbers below a bound descend is normally done one integer at a time, which is why explicit Collatz bounds advance in small increments. This statement replaces that with a single check per residue class: one representative certifies an entire infinite arithmetic progression. It is the mechanism behind Terras' density argument, in the form needed to certify descent in bulk.
The mathematics. Two facts combine. First, the exponent stripped at each step is determined modulo a power of two: if and the first step of strips exactly with , then the first step of strips exactly as well, and the images remain congruent modulo — the budget shrinks by precisely what was stripped. Iterating while the budget lasts shows the two orbits strip identical exponents for all steps.
Second, an orbit with prescribed exponents is an exact affine function of its starting point:
where the constant is built from the exponent sequence alone and so is shared across the whole class. Descent is then equivalent to , whose right-hand side is increasing in once . So the inequality, once checked at the smallest representative, holds for every larger member of the class.
Formalization note. The exponent sequence is supplied as a function rather than as a derived quantity, which keeps the statement free of auxiliary definitions: the hypothesis hstep both names the exponents and asserts they are the ones the orbit of actually strips. The hypothesis is what makes the congruence survive all steps, and it is sharp — one bit of headroom is needed at every stage to pin the next valuation.
import Mathlib import Definitions.Def_syracuseStep
theorem syracuse_uniform_descent (a : ℕ → ℕ) (m m' K t : ℕ)
(hm : Odd m) (hm' : Odd m')
(hcong : m ≡ m' [MOD 2 ^ K])
(hstep : ∀ i < t, 2 ^ (a i) * (syracuseStep^[i + 1] m') = 3 * (syracuseStep^[i] m') + 1)
(hbudget : (∑ i ∈ Finset.range t, a i) + 1 ≤ K)
(hgt : 3 ^ t < 2 ^ (∑ i ∈ Finset.range t, a i))
(hdesc : syracuseStep^[t] m' < m')
(hle : m' ≤ m) :
syracuseStep^[t] m < m := by sorry