← Archive
lm-000898 · 2026-06

考拉茲猜想的旋轉視角與字語言分析

下載 MD 檔 ⬇

考拉茲猜想的旋轉視角與字語言分析

一份方法論偵察報告

作者: Neo.K 機構: 一言諾科技有限公司(EveMissLab) 理論協作: Theia 日期: 2026 年 5 月


定位聲明

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

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


1. 二叉逆樹的形式定義

1.1 基本構造

考拉茲映射定義為

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

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

定義 1(考拉茲逆樹 TCT_C )。 對任意節點 nZ+n \in \mathbb{Z}^+

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

排除 14211 \to 4 \to 2 \to 1 的平凡回邊(即不把 11 當作 44 的右子的下游)。

定義 2(中序遍歷 II )。 I()=[]I(\varnothing) = []I(Tn)=I(TL(n))[n]I(TR(n))I(T_n) = I(T_{L(n)}) \oplus [n] \oplus I(T_{R(n)})

定義 3(顏色)。 χ(n)=nmod6\chi(n) = n \bmod 6

定義 4(深度/旋轉距離 ρ\rho )。 ρ(n)\rho(n)nnTCT_C 中到根的路徑長度。

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

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

引理 1。TCT_C 中,節點 mmm1m \neq 1 )的父節點為

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

證明。mm 偶,則 m=L(m/2)=2(m/2)m = L(m/2) = 2(m/2) ,故父為 m/2m/2 。若 mm 奇,則 mm 只能是某節點的右子: m=R(n)=(n1)/3n=3m+1m = R(n) = (n-1)/3 \Rightarrow n = 3m+1 ,且 n=3m+14(mod6)n = 3m+1 \equiv 4 \pmod 6 (因 mm 奇)滿足右子條件。故父為 3m+13m+1\square

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

推論 1( ρτ\rho \equiv \tau 塌縮)。 對任意 nTCn \in T_C ,其深度 ρ(n)\rho(n) 恆等於 nn 的完整考拉茲停止時間 τ(n)\tau(n) (含偶數步)。

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

1.3 覆蓋性等價

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

由引理 1, nTCn \in T_C (根為 11 )等價於 nn 的正向軌跡到達 11\square


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

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

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

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

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

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

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


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

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

定義 5。L:n2nL: n \mapsto 2n (無條件), R:n(n1)/3R: n \mapsto (n-1)/3 (僅當 n4(mod6)n \equiv 4 \pmod 6 )。考慮么半群 M=L,RM = \langle L, R\rangleZ+\mathbb{Z}^+ 上的作用。

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

等價地,反向觀察每個 nn 到根的路徑,得到一個正向軌跡的奇偶字

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

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


4. 字語言的局部結構(實證)

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

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

觀察 1。10510^5 個字中,因子 uu 出現 0 次;最大 uu -run 長度為 11

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

證明。 uu 對應 n3n+1n \mapsto 3n+1nn 奇時 3n+13n+1 必偶,故下一步必為 dd 。等價地, RR 算子的值域為奇數( 2k+12k+1 ),而 RR 的定義域為 4(mod6)\equiv 4 \pmod 6 的偶數,二者不交,故 RRRR 永不可能連續發生。 \square

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

4.2 比例不變量

觀察 2。 #d/#u\#d/\#uN=104N = 10^4 時為 1.941.94 ,在 N=105N = 10^5 時為 2.022.02 ,隨範圍微升。

推導(標為推導,非定理)。 兩條獨立關係:

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

聯立得 #u2.41log2n\#u \approx 2.41\log_2 n#d4.82log2n\#d \approx 4.82\log_2 n ,總長 ρ7.23log2n10.4lnn\rho \approx 7.23\log_2 n \approx 10.4\ln n ,與 4.1.2 節獨立測得的 ρ/lnn10.23\rho/\ln n \approx 10.23 自洽。微升項即 log2n/#u\log_2 n / \#u 的修正。注意 log231.585\log_2 3 \approx 1.585 是天真比例估計,被真實的 d-run 期望(=2)主導後修正為約 2。

4.3 d-run 分佈

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

4.4 公共後綴森林

觀察 4。 不同起點的字常共享相同後綴。例: n=27n = 27 (長 111)與 n=97n = 97 (長 118)的軌跡字後段完全相同。

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


5. 通用指紋提取器

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

對三個參數運行同一套程式(代碼見附錄 A.3),結果如下:

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

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


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

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

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

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

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


7. 方法論結算

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

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

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

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


附錄 A:代碼範例

A.1 二叉逆樹與覆蓋性

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)

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)

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))

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