Readable with high-school math + binary arithmetic
For any positive integer n, repeat the following:
"Every starting number eventually reaches 1." This is the Collatz conjecture. Posed in 1937, it remains unsolved after nearly 90 years.
The paper asks: What is the internal structure of 3n+1? Why is x=3 special?
Every positive integer can be written in binary, then split into consecutive 2-bit pairs.
0110110, 1, 1 → 0111, 0, 1 → 101
The key idea is the zipper structure. Interleave m4 and m6 to reconstruct the original number:
A simpler illustration:
Any number can be split into two bit-strings m4 and m6, and zipped back together. This is the foundation of pair decomposition.
A 2-bit pair has exactly 4 possible values. Each one gets a name:
| Pair | Name | Meaning | Role in addition |
|---|---|---|---|
(0, 0) | K (Kill) | Both bits 0 | Stops the carry |
(0, 1) | P (Propagate) | One bit is 1 | Passes the carry through |
(1, 0) | P (Propagate) | One bit is 1 | Passes the carry through |
(1, 1) | G (Generate) | Both bits 1 | Creates a new carry |
This G/P/K classification comes from carry-lookahead adder design, standard in computer science since the 1960s.
3n+1 = 2n + n + 1. Here 2n is just n shifted left by 1 bit. So:
This addition can be broken down pair by pair. At each pair position, "which bits are added" is fixed, and the result is one of only 16 possibilities.
Why 16?
To look up the table, you need the input pair plus a state. The state is a pair of two values:
| Label | cin | ai-1 | Meaning |
|---|---|---|---|
| S0 | 0 | 0 | No carry in, previous input pair's upper bit = 0 |
| S1 | 0 | 1 | No carry in, previous input pair's upper bit = 1 |
| S2 | 1 | 0 | Carry in, previous input pair's upper bit = 0 |
| S3 | 1 | 1 | Carry in, previous input pair's upper bit = 1 |
cin = carry coming in from the previous pair (carry in). ai-1 = the "a" of the previous input pair (a, b). cout = carry going out from this pair (carry out) → becomes the next pair's cin.
Initial state = S2 (+1 provides carry in; no previous pair so upper bit = 0).
Next state is determined by the carry out and the current input pair's upper bit. The table gives it automatically.
Writing out all 16 cases gives Table 5.1 — the core of the paper.
011011 → (01)(10)(11) → GPK = P, P, G(11)(10)(01) = G, P, P. Note this is the reverse of §1–2's P, P, G.
This is the entire table. Every claim in this summary can be verified by reading it.
| # | Input | GPK | cin | ai-1 | cout | Output | Out GPK | Note |
|---|---|---|---|---|---|---|---|---|
| 1 | (0,0) | K | 0 | 0 | 0 | (0,0) | K | |
| 2 | (0,0) | K | 0 | 1 | 0 | (0,1) | P | |
| 3 | (0,0) | K | 1 | 0 | 0 | (0,1) | P | |
| 4 | (0,0) | K | 1 | 1 | 0 | (1,0) | P | K→G nowhere |
| 5 | (0,1) | P | 0 | 0 | 0 | (1,1) | G | P→G, cout=0 |
| 6 | (0,1) | P | 0 | 1 | 1 | (0,0) | K | |
| 7 | (0,1) | P | 1 | 0 | 1 | (0,0) | K | |
| 8 | (0,1) | P | 1 | 1 | 1 | (0,1) | P | |
| 9 | (1,0) | P | 0 | 0 | 0 | (1,0) | P | |
| 10 | (1,0) | P | 0 | 1 | 0 | (1,1) | G | P→G, cout=0 |
| 11 | (1,0) | P | 1 | 0 | 0 | (1,1) | G | P→G, cout=0 |
| 12 | (1,0) | P | 1 | 1 | 1 | (0,0) | K | |
| 13 | (1,1) | G | 0 | 0 | 1 | (0,1) | P | G→P, cout=1 |
| 14 | (1,1) | G | 0 | 1 | 1 | (1,0) | P | G→P, cout=1 |
| 15 | (1,1) | G | 1 | 0 | 1 | (1,0) | P | G→P, cout=1 |
| 16 | (1,1) | G | 1 | 1 | 1 | (1,1) | G | G→G, cout=1 |
Read directly from this table:
■ Cases 13–16: G input → cout=1 in all 4 cases (unconditional carry generation)
■ Cases 1–4: K input → cout=0 in all 4 cases, output is never G (K→G impossible)
■ Cases 5, 10, 11: P→G — but cout=0 in all 3 (creation does not chain)
※ The flow diagram shows "n" and "n'" as integers, but the computation never needs to reconstruct the integer. The scan takes pairs in and puts pairs out. Division removes pairs and shifts boundaries. Re-pairing maps pairs to pairs. The next scan reads pairs again. The entire trajectory runs in pair form until it reaches 1. Zipping back to a number is a display operation for human readability, not part of the computation.
Throughout the entire flow, pair types never leave these 4 kinds:
"Closed" does not mean all 4 types appear every time. Each step may use a different subset. But a 5th type never appears. Feed n' back into the same table → get n''. Feed n'' in again → same table. The same 4 types and the same 16-row table, forever. That is closure.
Moreover, the following properties hold without exception:
| Property | For 3n+1 | Meaning |
|---|---|---|
| G → carry output | Always 1 (all 4 cases) | G always generates a carry |
| K → carry output | Always 0 (all 4 cases) | K always kills the carry |
| Can K become G? | Never | Once K, never G again |
"Always" and "never" are not figurative. All 16 table entries were checked: zero exceptions.
The same procedure builds a table for 5n+1 (= 4n + n + 1, shift = 2 bits). Comparing the two:
| Property | 3n+1 | 5n+1 |
|---|---|---|
| Table size | 16 rows (4 states × 4 inputs) | 32 rows (8 states × 4 inputs) |
| G → carry always 1? | Yes (all cases) | No (one state gives 0) |
| K → carry always 0? | Yes (all cases) | No (one state gives 1) |
| K → G transition | Impossible | Possible (in 2 states) |
| Escape routes | None | Exist |
| Non-trivial cycles | None (structurally excluded) | Exist in 5n+1 (e.g. 13→33→83→13; other x unverified) |
Both tables constructed and verified against 500 odd numbers each
For 3n+1 to make a number larger, division by 2 must happen only once (d=1). This occurs only when the lowest pair is G(1,1).
Why only G(1,1)? — The Syracuse function maps odd → odd, so the input n is always odd. The lowest bit is always 1, which means the lowest pair can only be P(0,1) or G(1,1) (K(0,0) and P(1,0) require the lowest bit to be 0, so they never appear as the lowest pair). With P(0,1), the result 3n+1 has at least two trailing zeros (d≥2, shrinks). With G(1,1), it has exactly one trailing zero (d=1, grows).
When the lowest pair is G(1,1), the table lookup (Case 15) produces:
The cause of growth (G) always produces the carry that destroys it. There is no table entry that avoids this.
| Path | Possible? | Property |
|---|---|---|
| K → G (revival from Kill) | Impossible | No K→G entry in all 16 rows |
| P → G (generation from Propagate) | Possible (3 cases) | But cout=0 — does not chain |
| G creation (P→G) | G destruction (G→P) | |
|---|---|---|
| Scale | One at a time | Cascades (destroys bridges too) |
| Carry | 0 (no ripple effect) | 1 (ripples outward) |
| Fuel | Consumes P-positions | — |
Destruction cascades, but creation does not. This asymmetry is an algebraic fact read directly from the 16-row table.
Reading Table 5.1 and Table 5.2 together, the net change of the leftmost G-block per step has a strict upper bound:
| Phase | Effect | Basis |
|---|---|---|
| Scan | Leading G eliminated → −1 | Table 5.1 (Lemma 5.1(b)) |
| Re-pairing | Tail extension at most +1 | Table 5.2 (Lemma 5.6) |
| One-step total | ≤ 0 | All cases, no exceptions |
This is a worst-case bound, not an average. max(X) ≤ 0, not E[X] < 0. No configuration yields net +1.
§7 showed what happens within a single scan. But can re-pairing (Table 5.2) undo everything? Three points settle the question.
Re-pairing outputs the same 4 pair types (all 16 cases verifiable in Table 5.2). Scan → division → re-pairing → next scan: no 5th type ever appears. The table properties from §7 (G→cout=1, K→G impossible, P→G has cout=0) apply equally to n' after re-pairing.
Independent of the tables, a purely arithmetic fact:
Growth (d=1) always stops after finitely many steps. This is an arithmetic fact, independent of GPK or the tables.
Since d=1 cannot persist, the trajectory cannot diverge (it is bounded). Closure ensures that the same tables and constraints apply wherever the trajectory goes (scale invariance). The only possible terminal behavior for a bounded trajectory in a closed, scale-invariant system is a cycle. For x=3, the only structurally admissible cycle is the fixed point n=1 (§8.4).
The paper's Proposition 5.4 provides a detailed derivation from table properties: leftmost G-block consumption (net ≤ 0), dimensional separation, episode structure. The three points above are the core of that conclusion.
Below is an excerpt of the full 370-step trajectory (83 episodes) for n = 670,617,279. Red rows = pair₀ is G (d=1, growth). Blue rows = pair₀ ≠ G (d≥2, collapse). Horizontal lines mark episode boundaries.
Every red band (d=1 growth burst) terminates after finitely many steps, followed by a blue band (d≥2 collapse). This pattern repeats across all 83 episodes. The leading G is born, consumed, and collapses — while GPK strings shorten toward n=1. This is §7.5's argument made visible.
3n+1 = 2n + n + 1 (shift = 1 bit < pair width = 2 bits) └→ GPK classification determined by reading the pair alone (closure) └→ Carry behavior is state-independent ├→ G unconditionally generates carry │ └→ That carry destroys the G itself ├→ K unconditionally kills carry │ └→ K can never become G again └→ The engine of growth = the agent of its own destruction. No escape.
n=1 has pair (0,1)=P, d=2, n'=1. Fixed point. All other n are structurally unable to sustain any other cycle under these constraints.
A common argument: "3n+1 shrinks on average because E[d] > log₂3." But that's probabilistic, so "maybe a trajectory gets unlucky and diverges" is a valid counter.
The paper's argument operates on a different level entirely:
| Probabilistic claim | This paper's claim | |
|---|---|---|
| Content | "On average d is large, so it tends to shrink" | "G unconditionally outputs carry = 1" |
| Counter | "Variance could cause one-sided drift" → valid | No variance. Every position, every n, every time. |
The distinction is especially clear for the G-block net change (§7):
| Probabilistic argument | Net ≤ 0 (this paper) | |
|---|---|---|
| Statement | "On average, G decreases" | "In all cases, leftmost G-block net ≤ 0 per step" |
| Formulation | E[X] < 0 | max(X) ≤ 0 |
| Counter-example possible? | Yes — variance allows outliers | No — the maximum is already ≤ 0 |
Net ≤ 0 does not mean total G decreases monotonically. New G-blocks can be born (P→G), and ÷2d can remove non-G pairs, raising G density — even back to 100%. What net ≤ 0 guarantees is that each individual leftmost G-block has a finite lifetime: each d=1 run (growth burst) must end, and every burst is followed by d≥2 collapse.
Computational verification of the Collatz conjecture (e.g., confirming all trajectories up to 268) has made indispensable contributions — building confidence in the conjecture and confirming the absence of counterexamples. By its nature, however, each trajectory check is inductive verification within a finite space bounded by 1 on both ends, and extending it to all n faces an inherent barrier.
Table 5.1 sits at that layer. In just 16 rows it covers every pair position of every GPK sequence, depending on neither the length nor the content of the sequence. Where computational verification "confirms the fact for each individual n," the table "describes the structure common to all n." The two are not in opposition — they illuminate the same object from different layers.
Once the scan table (Table 5.1, 16 rows) and re-pairing table (Table 5.2, 16 rows) are constructed:
| What can be read | How |
|---|---|
| G → cout=1 (no exceptions) | Read from the table |
| K → G is impossible (no exceptions) | Read from the table |
| P → G has cout=0 (no exceptions) | Read from the table |
| G-blocks cannot merge | Read from the table |
The paper's Lemmas and Propositions are just verbalizations of what the tables already contain.
Conclusion: It did nothing!
The structure was always there.
In the process of drafting this summary, the moment I asked myself whether the generational turnover of G-blocks continues infinitely, I found myself slipping directly back into the quagmire of the Collatz conjecture. My lingering feeling that the structural explanation was "not yet sufficient" was, in fact, a sign that my framework of perception had already shifted.
I realized there is a cognitive tendency in humans to revert to "individual trajectories" even when presented with a structurally closed argument. This very process of trying to verify "if it's truly so" may actually be what fuels the complexity of the problem. For those with a strong mathematical intuition, this is an irresistible trap — the ability to verify leads to the desire to do so, which reveals the trajectory, which in turn compels one to follow it. The ability itself becomes the snare. Even as I wrote this summary, my mind was repeatedly pulled back into the depths of these trajectories.
Verification scripts: dfst_final.py, dfst_properties.py
Structural comparison data: dfst_comparison_record.md
Source paper: "Pair Predicate Decomposition of Collatz-type Maps (xn+1)/2d" v5.1 (February 2026)