# 考拉茲猜想的旋轉視角與字語言分析
## 一份方法論偵察報告

**作者：** Neo.K
**機構：** 一言諾科技有限公司（EveMissLab）
**理論協作：** Theia
**日期：** 2026 年 5 月

---

## 定位聲明

本文**不是**考拉茲猜想的證明嘗試，也不聲稱推進了它的解決。本文是一份**方法論偵察報告**：記錄一條以「二叉樹旋轉」為起點的探索路徑，誠實標明它在何處撞牆、為何撞牆，以及撞牆後問題被翻譯成了什麼形態。本文最硬的成果是兩個**負面結果**與一個**等價翻譯**——它們的價值不在於更接近答案，而在於精確劃定了一整類方法的失效邊界，並把困難搬到一張新的工具桌上。

對「為何正常數學家不證考拉茲」這個老問題，本文提供一個結構性的回答：因為它的困難不在技巧層，而在邏輯類型層；任何只操作結構與形狀的方法，對它的核心困難結構性失明。

---

## 1. 二叉逆樹的形式定義

### 1.1 基本構造

考拉茲映射定義為

$$
f(n) =
\begin{cases}
n/2 & n \equiv 0 \pmod 2,\\
3n+1 & n \equiv 1 \pmod 2.
\end{cases}
$$

我們不從正向迭代切入，而是構造一棵以 $1$ 為根、節點為正整數的有根二叉樹。

**定義 1（考拉茲逆樹 $T_C$）。** 對任意節點 $n \in \mathbb{Z}^+$：

$$
L(n) := 2n \quad (\text{總是存在的左子}),
$$
$$
R(n) := \frac{n-1}{3} \quad \text{若 } n \equiv 4 \pmod 6\text{，否則未定義}.
$$

排除 $1 \to 4 \to 2 \to 1$ 的平凡回邊（即不把 $1$ 當作 $4$ 的右子的下游）。

**定義 2（中序遍歷 $I$）。** $I(\varnothing) = []$，$I(T_n) = I(T_{L(n)}) \oplus [n] \oplus I(T_{R(n)})$。

**定義 3（顏色）。** $\chi(n) = n \bmod 6$。

**定義 4（深度/旋轉距離 $\rho$）。** $\rho(n)$ 為 $n$ 在 $T_C$ 中到根的路徑長度。

關於右子條件的一個註記：$n \equiv 4 \pmod 6$ 蘊含 $(n-1)/3 = (6k+3)/3 = 2k+1$ 永遠為奇數，故「$(n-1)/3$ 為奇」這個附加條件自動滿足，無需單獨檢查。

### 1.2 關鍵引理：父節點即正向一步

**引理 1。** 在 $T_C$ 中，節點 $m$（$m \neq 1$）的父節點為

$$
\mathrm{parent}(m) =
\begin{cases}
m/2 & m \text{ 偶},\\
3m+1 & m \text{ 奇}.
\end{cases}
$$

**證明。** 若 $m$ 偶，則 $m = L(m/2) = 2(m/2)$，故父為 $m/2$。若 $m$ 奇，則 $m$ 只能是某節點的右子：$m = R(n) = (n-1)/3 \Rightarrow n = 3m+1$，且 $n = 3m+1 \equiv 4 \pmod 6$（因 $m$ 奇）滿足右子條件。故父為 $3m+1$。$\square$

引理 1 說明：在 $T_C$ 中沿樹往根走一步，恰好等於對 $m$ 施加正向考拉茲一步。於是得到一個立即的推論。

**推論 1（$\rho \equiv \tau$ 塌縮）。** 對任意 $n \in T_C$，其深度 $\rho(n)$ 恆等於 $n$ 的完整考拉茲停止時間 $\tau(n)$（含偶數步）。

這個推論有一個方法論後果：把「旋轉距離」當作一個獨立於停止時間的新不變量，是錯誤的期望。$\rho$ 沒有提供任何 $\tau$ 之外的信息。任何關於 $\rho$ 上界的猜想（如 $\rho(n) \le c\log n$）僅僅是停止時間上界問題的改寫。數值上，在 $[1, 10^5]$ 範圍內 $\rho(n)/\ln n$ 平均約 $10.23$，上界約 $33.68$（且不隨範圍上升刷新）——這就是經驗停止時間常數本身。

### 1.3 覆蓋性等價

**命題 1。** 考拉茲猜想 $\iff \{n : n \in T_C\} = \mathbb{Z}^+$。

由引理 1，$n \in T_C$（根為 $1$）等價於 $n$ 的正向軌跡到達 $1$。$\square$

---

## 2. 第一個負面結果：旋轉不可見性

二叉樹旋轉是平衡樹算法的核心操作。它的定義性質是：**保持節點集合與中序遍歷不變，只改變樹的拓撲形狀。** 這正是它在資料結構中有用的原因——重組樹形不丟失資料。

但這個性質對考拉茲是致命的。

**定理 1（旋轉不可見性 No-go）。** 覆蓋性（命題 1）是旋轉等價類商空間上的不變量。任何只操作樹形狀的方法——旋轉、splay、平衡——都無法觸及覆蓋性。

**論證。** 旋轉按定義保持節點集合不變。考拉茲的全部困難在於節點集合是否等於 $\mathbb{Z}^+$（命題 1）。一個不改變節點集合的操作，無論如何組合，都不可能改變「節點集合是否等於 $\mathbb{Z}^+$」這一事實。$\square$

此外，由 Sleator–Tarjan–Thurston 的經典結果，固定節點集的所有二叉樹形狀在旋轉下構成連通圖（associahedron 的 1-骨架），即旋轉在形狀空間上**本來就傳遞**。因此「旋轉群是否傳遞」這個問題，若指形狀空間則 trivially true 且與考拉茲無關；若指作用在 $\mathbb{Z}^+$ 上，則旋轉根本不是數字上的操作，構不成。兩種詮釋都是死路。

**方法論教訓。** 考拉茲的困難不在「樹擺成什麼形狀」，而在「哪些數字進入樹」。前者是旋轉管轄的自由度，後者是生成規則管轄的自由度。把賭注押在形狀自由度上的整類方法，注定失明。

---

## 3. 從旋轉到么半群：正確的代數對象

既然自由度不在形狀，就只能在**節點生成規則**本身。正確的代數對象是兩個生成算子的么半群。

**定義 5。** 令 $L: n \mapsto 2n$（無條件），$R: n \mapsto (n-1)/3$（僅當 $n \equiv 4 \pmod 6$）。考慮么半群 $M = \langle L, R\rangle$ 在 $\mathbb{Z}^+$ 上的作用。

**命題 2。** 考拉茲猜想 $\iff \{1\}$ 在 $M$ 下的軌道等於 $\mathbb{Z}^+$。

等價地，反向觀察每個 $n$ 到根的路徑，得到一個正向軌跡的**奇偶字**

$$
w(n) \in \{u, d\}^*, \quad u = \text{奇數步 }(3n+1), \quad d = \text{偶數步 }(n/2).
$$

問題從「群的傳遞性」轉為「字語言 $\mathcal{L} = \{w(n) : n \in \mathbb{Z}^+\}$ 的形式語言類別」。這是真正的技術棧轉移——從代數轉到自動機理論。

---

## 4. 字語言的局部結構（實證）

以下結論皆由對 $[1, 10^5]$ 的窮舉計算得出（代碼見附錄 A.2）。

### 4.1 禁止因子與唯一下降閘門

**觀察 1。** 在 $10^5$ 個字中，因子 `uu` 出現 **0** 次；最大 $u$-run 長度為 $1$。

**命題 3。** 字語言滿足 $\mathcal{L} \subseteq d^*(u\,d^+)^*$，即每個 $u$ 後必接至少一個 $d$。

**證明。** $u$ 對應 $n \mapsto 3n+1$。$n$ 奇時 $3n+1$ 必偶，故下一步必為 $d$。等價地，$R$ 算子的值域為奇數（$2k+1$），而 $R$ 的定義域為 $\equiv 4 \pmod 6$ 的偶數，二者不交，故 $RR$ 永不可能連續發生。$\square$

換言之，所有「下降」（縮小數值的潛在能力）的閘門完全鎖死在 $\chi(n) = 4$ 的節點上；所有奇數節點都是純鏈節點，只有左子 $2n$。

### 4.2 比例不變量

**觀察 2。** $\#d/\#u$ 在 $N = 10^4$ 時為 $1.94$，在 $N = 10^5$ 時為 $2.02$，隨範圍微升。

**推導（標為推導，非定理）。** 兩條獨立關係：

$$
\#d \approx 2\,\#u \quad (\text{由 d-run 期望} \approx 2),
$$
$$
\#d \approx (\log_2 3)\,\#u + \log_2 n \quad (\text{由值守恆 } 3^{\#u}/2^{\#d}\cdot n \approx 1).
$$

聯立得 $\#u \approx 2.41\log_2 n$，$\#d \approx 4.82\log_2 n$，總長 $\rho \approx 7.23\log_2 n \approx 10.4\ln n$，與 4.1.2 節獨立測得的 $\rho/\ln n \approx 10.23$ 自洽。微升項即 $\log_2 n / \#u$ 的修正。注意 $\log_2 3 \approx 1.585$ 是天真比例估計，被真實的 d-run 期望（=2）主導後修正為約 2。

### 4.3 d-run 分佈

**觀察 3。** d-run 長度（$= v_2(3n+1)$）的計數為 $\{1: 1808744,\ 2: 855100,\ 3: 448392,\ 4: 326688, \dots\}$，呈幾何衰減，期望 $1.99 \approx 2$，與 $v_2(3n+1)$ 的幾何分佈理論一致。

### 4.4 公共後綴森林

**觀察 4。** 不同起點的字常共享相同後綴。例：$n = 27$（長 111）與 $n = 97$（長 118）的軌跡字後段完全相同。

這是軌跡匯流的直接體現：兩條軌跡一旦到達同一個值，到根的剩餘路徑即鎖死為同一條。因此 $\mathcal{L}$ 並非任意字集，而是一個**共享公共後綴森林**的語言——每個字的後綴即它與其他節點的公共祖先路徑。匯流結構等同於樹結構本身。

---

## 5. 通用指紋提取器

上述分析的全部機制可抽象成一個與「考拉茲是否被解」完全脫鉤的工具：對任意迭代映射 $n \mapsto qn+c$（奇）/ $n \mapsto n/2$（偶），提取其字語言指紋。

對三個參數運行同一套程式（代碼見附錄 A.3），結果如下：

| 映射 | 收斂率 | $\#d/\#u$ | uu 禁止 | 吸引子數量 | $E[\text{d-run}]$ |
|---|---|---|---|---|---|
| $3n+1$ | 100% | 1.94 | True | 1（全歸於 1） | 1.98 |
| $3n-1$ | 100% | 1.99 | True | 3（1, 5, 17） | 2.04 |
| $5n+1$ | 7.26% | 2.69 | True | 3 | 2.75 |

**幸存者偏差作為指紋。** $5n+1$ 的 $\#d/\#u = 2.69$ 高於收斂的 $3n+1$（1.94），直覺上「除更多 2 應更收斂」，但它 92.7% 發散。原因是統計僅在收斂軌跡上進行，2.69 只是 7% 倖存者的數字；$5n+1$ 的真實生成偏好是發散（每壓縮步 $\approx 5/2^2 = 1.25 > 1$）。這個異常本身即指紋：當收斂樣本的比例反常偏高，它指示該映射的收斂是被篩選的少數而非常態。**逼近的偏差不是噪音，是訊號。**

---

## 6. 第二個負面結果：局部正則 ≠ 全局可判定

第 5 節的三映射數據蘊含一個比定理 1 更乾淨的結論。

**定理 2（實證版分離）。** 局部語言約束對全局判定幾乎零預測力。

**論證。** $3n+1$、$3n-1$、$5n+1$ 共享**完全相同的局部語言**（皆禁 `uu`，皆為 $q, c$ 奇的族不變量），但其全局行為天差地別：$3n+1$ 單吸引子收斂、$3n-1$ 三吸引子收斂、$5n+1$ 主導發散。三個系統擁有相同的有限自動機層級結構，卻有完全不同的命運。$\square$

這是用三個並排實例**實證**了「局部正則性無法決定全局終止性」——不是抽象援引 Post 定理，而是直接擺出三個有相同局部語法、不同全局歸宿的具體系統。困難因此被定位：它不在自動機可見的局部層，而在自動機不可見的全局判定層。

---

## 7. 方法論結算

本文的三個主要成果，按誠實的當量排列：

1. **旋轉不可見性（定理 1）**：拓撲重組類方法對覆蓋性結構性失明。一整類方法被排除。
2. **么半群字語言翻譯（命題 2、第 4 節）**：問題被乾淨地搬入自動機理論，局部結構完全鎖定（單一禁止因子 `uu`，比例與分佈不變量自洽）。
3. **局部正則 ≠ 全局可判定（定理 2）**：用三映射實證困難所在的精確層級。

沒有一個成果讓我們更接近證明。但它們合起來劃定了一條清晰的不可能邊界：旋轉、形狀代數、初等自動機——這些工具對考拉茲的核心困難全部失效。殘存的希望被逼到唯一的活門：$3$ 與 $2$ 這組特定常數的算術特殊性，而非任何可推廣的結構。

這條偵察路徑的真正產物，不是地圖上的前進，而是地圖上劃掉的死路，以及一個可獨立使用的工具（指紋提取器，第 5 節）。

---

## 附錄 A：代碼範例

### A.1 二叉逆樹與覆蓋性

```python
def parent(m):
    if m == 1:
        return None
    return m // 2 if m % 2 == 0 else 3 * m + 1

def right_child(n):
    # n ≡ 4 mod 6 → (n-1)/3 = 2k+1 永遠為奇, 條件自動滿足
    if n > 1 and n % 6 == 4:
        return (n - 1) // 3
    return None

def left_child(n):
    return 2 * n

def stopping_time(n):
    t = 0
    while n != 1:
        n = n // 2 if n % 2 == 0 else 3 * n + 1
        t += 1
        if t > 100000:
            return -1
    return t
# 推論 1: rho(n) = stopping_time(n) 恆成立
```

### A.2 字語言分析（禁止因子、比例、run-length）

```python
def collatz_word(n):
    """返回正向軌跡的 u/d 字"""
    w = []
    while n != 1:
        if n % 2 == 1:
            w.append('u'); n = 3 * n + 1
        else:
            w.append('d'); n = n // 2
        if len(w) > 100000:
            return None
    return ''.join(w)

def analyze(N):
    uu_hits = 0
    sum_u = sum_d = 0
    from collections import Counter
    d_runs = Counter()
    for start in range(1, N + 1):
        w = collatz_word(start)
        if w is None:
            continue
        sum_u += w.count('u'); sum_d += w.count('d')
        if 'uu' in w:
            uu_hits += 1
        i = 0
        while i < len(w):
            j = i
            while j < len(w) and w[j] == w[i]:
                j += 1
            if w[i] == 'd':
                d_runs[j - i] += 1
            i = j
    return uu_hits, sum_d / sum_u, dict(sorted(d_runs.items()))
```

### A.3 通用指紋提取器（任意 qn+c）

```python
from collections import Counter

def trajectory_word(n, q, c, max_steps=2000, max_val=10**15):
    """返回 (狀態, u/d字, 吸引子標籤)
       狀態: 'halt'=進入循環 | 'escape'=逃逸"""
    seen, w, step = {}, [], 0
    while step < max_steps:
        if n in seen:
            idx = list(seen.values()).index(seen[n])
            cycle_min = min(list(seen.keys())[idx:] + [n])
            return 'halt', ''.join(w), cycle_min
        if n > max_val:
            return 'escape', ''.join(w), None
        seen[n] = step
        if n % 2 == 1:
            w.append('u'); n = q * n + c
        else:
            w.append('d'); n = n // 2
        step += 1
    return 'escape', ''.join(w), None

def fingerprint(q, c, N):
    halt = escape = sum_u = sum_d = uu_hits = 0
    attractors = Counter()
    for start in range(1, N + 1):
        state, w, attr = trajectory_word(start, q, c)
        if state == 'halt':
            halt += 1
            attractors[attr] += 1
            sum_u += w.count('u'); sum_d += w.count('d')
            if 'uu' in w:
                uu_hits += 1
        else:
            escape += 1
    return {
        'map': f"{q}n{'+' if c>=0 else ''}{c}",
        'halt_rate': halt / N,
        'd/u': (sum_d / sum_u) if sum_u else float('nan'),
        'uu_forbidden': uu_hits == 0,
        'num_attractors': len(attractors),
        'top_attractors': attractors.most_common(3),
    }

# 用法: 同一套程式, 不同參數
# for q, c in [(3,1), (3,-1), (5,1)]: print(fingerprint(q, c, 10000))
```

---

*我們想用形狀解開它，它告訴我們形狀無關；我們想用結構解開它，它告訴我們結構有限而判定無窮。這份報告唯一確定的成果，是把幾條路標上了「此路不通」——而在一片宣稱走通了的喧嘩裡，誠實地劃掉死路，本身就是一種前進。*
