← Archive
lm-002614 · 2026-08

狀態機作為遞歸動態容器

下載 MD 檔 ⬇

狀態機作為遞歸動態容器

State Machines as Recursive Dynamic Containers

系列: 遞歸動態狀態系統(Recursive Dynamic State Systems, RDSS)
篇次: 04 / 09
作者: Neo.K with Aletheia
機構: EveMissLab/一言諾科技有限公司
版本: v0.1 Research Draft
日期: 2026-08-10
文件性質: 遞歸容器形式化/階層狀態系統/動態封裝與身份研究


摘要

本文為《遞歸動態狀態系統》(RDSS)系列第四篇,正式提出「狀態機作為遞歸動態容器」(State Machine as Recursive Dynamic Container, RDC)模型。

傳統有限狀態機主要將狀態視為轉移圖中的節點;Statecharts 已透過階層、並行與通信使狀態具有結構化內部層次;Hierarchical Finite State Machines 與 Recursive State Machines 亦已證明,狀態/控制器可以模組化地包含或調用其他狀態機。因此,「狀態中包含狀態」並不是本文的新主張。

本文真正處理的是另一個問題:

當一個高階狀態在父層是單一節點,但展開後又是一個具有自身狀態、關係、類型、歷史、接口、局部規則與子系統的完整世界時,如何在不同尺度之間保持身份、邊界契約、合法轉移與可執行性?

本文將單一遞歸動態容器定義為:

Mt=(I,St,Rt,Θt,Δt,At,t,Pt,Kt,Ht,Nt)\boxed{ \mathfrak M_t = ( \mathcal I, S_t, R_t, \Theta_t, \Delta_t, \mathcal A_t, \partial_t, \mathcal P_t, \mathcal K_t, H_t, \mathcal N_t ) }

其中 I\mathcal I 為持久身份, t\partial_t 為容器邊界, Pt\mathcal P_t 為端口集合, Kt\mathcal K_t 為外部契約, Nt\mathcal N_t 為子 RDSS 集合。

本文進一步提出:

StateContainerProcess\boxed{ \text{State} \leftrightarrow \text{Container} \leftrightarrow \text{Process} }

不是邏輯恆等,而是尺度依賴角色轉換。同一 M\mathfrak M 在父尺度可被投影成一個 state,在自身尺度是一個 container,沿時間則是一條 process trajectory。

為了使遞歸封裝可治理,本文引入展開算子 E\mathcal E 、封裝/收斂算子 V\mathcal V 、父層投影 Π\Pi^\uparrow 、子層展開 Π\Pi^\downarrow 、邊界等價 \equiv_{\partial} 、接口保持條件、遞歸深度與活動子容器支撐。核心條件不是要求:

VE=id,\mathcal V\circ\mathcal E = id,

而是要求在允許內部重構的情況下:

V(E(M))M.\boxed{ \mathcal V(\mathcal E(\mathfrak M)) \equiv_{\partial} \mathfrak M. }

也就是:展開—重組—收斂後,內部可以改變,但對父層承諾的外部身份與契約必須在指定容許範圍內保持。

本文最終把 RABCL 的「連線即封裝」、Genesis Matrix 的 Cell → Submatrix、Dynamic MSSP 的動態角色、ODSS 的有限活動支撐,以及 RCTEP 的結構生成整合成 RDSS 的核心遞歸容器模型。

關鍵詞: 遞歸容器、階層狀態機、狀態封裝、動態邊界、接口契約、Recursive State Machine、Statecharts、RDSS、RABCL、Genesis Matrix


0. 問題:一個 state 可以是一個完整世界嗎?

在最簡狀態機中:

S={s1,s2,,sn}.S = \{ s_1, s_2, \ldots, s_n \}.

每個:

sis_i

通常被視為圖上的一個節點。

但對複雜系統而言,某個高階狀態可能代表:

  • 一個城市;
  • 一家公司;
  • 一個 Agent;
  • 一個軟體模組;
  • 一個遊戲區域;
  • 一個研究專案;
  • 一個工作流;
  • 一個完整子系統。

例如:

si=City.s_i = \mathsf{City}.

父層只需要知道:

City\mathsf{City}

目前處於:

Stable\mathsf{Stable}

或:

Crisis.\mathsf{Crisis}.

但展開城市後,可能存在:

{Economy,Population,Security,Transport,Politics,Weather,Infrastructure,}.\{ Economy, Population, Security, Transport, Politics, Weather, Infrastructure, \ldots \}.

所以:

父層的一個 state\boxed{ \text{父層的一個 state} }

可能同時是:

子層的一整個 state system.\boxed{ \text{子層的一整個 state system}. }

本文研究的就是這個尺度轉換。


1. 這不是「階層狀態機是新發明」

必須先排除錯誤的新穎性宣稱。

Statecharts 已經將傳統 state-transition diagrams 擴充為具有:

  • hierarchy;
  • concurrency;
  • communication;

的結構化狀態描述。

Hierarchical Finite State Machines 也可以將大型系統分解為多台子機器,利用階層結構避免每次規劃都展開完整狀態空間。

Hierarchical Finite State Controllers 甚至允許控制器呼叫其他控制器,並形成遞歸控制結構。

因此:

State contains State\boxed{ \text{State contains State} }

本身不是 RDSS 的創新。

RDSS 的問題是:

StateContainerRewritable Container\boxed{ \text{State} \rightarrow \text{Container} \rightarrow \text{Rewritable Container} }

以及:

展開與收斂時,身份、接口、歷史與父子層語義如何保持?


2. 三種角色,不是三種不同物件

令:

M\mathfrak M

為一個 RDSS 物件。

在父層尺度 σp\sigma_p

Role(Mσp)=State.Role(\mathfrak M\mid\sigma_p) = \mathsf{State}.

在自身尺度 σs\sigma_s

Role(Mσs)=Container.Role(\mathfrak M\mid\sigma_s) = \mathsf{Container}.

沿時間觀察:

Role(Mt0:tn)=Process.Role(\mathfrak M\mid t_0:t_n) = \mathsf{Process}.

因此:

StateContainerProcess\boxed{ \mathsf{State} \leftrightarrow \mathsf{Container} \leftrightarrow \mathsf{Process} }

應理解為:

Role Equivalence under Scale / Temporal View\boxed{ \text{Role Equivalence under Scale / Temporal View} }

而不是:

State=Container=ProcessState = Container = Process

的字面恆等。

這個區分非常重要。


3. 遞歸動態容器的最小結構

本文把 RDSS 第一篇的結構增加明確邊界與接口:

Mt=(I,St,Rt,Θt,Δt,At,t,Pt,Kt,Ht,Nt)\boxed{ \mathfrak M_t = ( \mathcal I, S_t, R_t, \Theta_t, \Delta_t, \mathcal A_t, \partial_t, \mathcal P_t, \mathcal K_t, H_t, \mathcal N_t ) }

其中:

  • I\mathcal I:持久身份;
  • StS_t:內部有效狀態;
  • RtR_t:內部與外部關係;
  • Θt\Theta_t:類型制度;
  • Δt\Delta_t:合法轉移;
  • At\mathcal A_t:可用算子;
  • t\partial_t:容器邊界;
  • Pt\mathcal P_t:輸入/輸出/事件端口;
  • Kt\mathcal K_t:外部契約;
  • HtH_t:歷史;
  • Nt\mathcal N_t:子 RDSS 集合。

其中:

(t,Pt,Kt)(\partial_t,\mathcal P_t,\mathcal K_t)

是本文新增的核心。

因為沒有邊界,容器就只是「很多東西放一起」。

沒有契約,就無法重新封裝。


4. Container 不只是集合

最簡容器可以寫:

C={x1,,xn}.C = \{ x_1,\ldots,x_n \}.

但 RDSS 容器不是普通集合。

它至少具有:

Inside+Boundary+Interface+Rules+History.\boxed{ \text{Inside} + \text{Boundary} + \text{Interface} + \text{Rules} + \text{History}. }

也就是:

M{M1,,Mn}.\mathfrak M \neq \{M_1,\ldots,M_n\}.

更完整地:

M=Govern({Mi},R,,P,K).\mathfrak M = \operatorname{Govern} ( \{M_i\}, R, \partial, \mathcal P, \mathcal K ).

容器不只是「裝東西」。

容器決定:

  • 什麼能進來;
  • 什麼能出去;
  • 哪些內部狀態可被父層看到;
  • 哪些關係不可跨界;
  • 哪些行為需要批准;
  • 哪些子系統可以被替換;
  • 哪些狀態必須一起提交。

5. 邊界 \partial 是一級物件

本文定義:

M\partial\mathfrak M

為容器邊界。

它不是單純 UI 方框。

邊界決定:

InsideOutside.\boxed{ \text{Inside} \mid \text{Outside}. }

以及合法跨界作用集合:

X={x:InsideOutside}.\mathcal X_{\partial} = \{ x: Inside \leftrightarrow Outside \}.

對任一跨界作用:

aa

需要:

aAllowed().a \in \operatorname{Allowed}(\partial).

否則:

a=Rejected.a = \mathsf{Rejected}.

這把狀態容器從視覺 grouping 提升為可治理結構。


6. 端口 P\mathcal P

一個容器不能要求父層知道全部內部結構。

因此需要有限外部端口:

P=PinPoutPevent.\mathcal P = \mathcal P^{in} \cup \mathcal P^{out} \cup \mathcal P^{event}.

其中:

Pin\mathcal P^{in}

接收輸入;

Pout\mathcal P^{out}

輸出結果;

Pevent\mathcal P^{event}

傳遞事件。

父層不應直接操作:

SinternalS_{\mathrm{internal}}

除非經過顯式 debug / introspection capability。

因此:

Encapsulation=Internal Freedom+Finite External Surface.\boxed{ \text{Encapsulation} = \text{Internal Freedom} + \text{Finite External Surface}. }

7. 契約 K\mathcal K

只有端口還不夠。

還需要說明:

這個容器承諾什麼?

定義:

K=(Pre,Post,Inv,Eff,Auth,QoS).\mathcal K = ( Pre, Post, Inv, Eff, Auth, QoS ).

其中:

  • PrePre:前置條件;
  • PostPost:後置條件;
  • InvInv:不變量;
  • EffEff:可允許副作用;
  • AuthAuth:權限;
  • QoSQoS:時間/資源/品質承諾。

因此兩個內部完全不同的容器:

MA\mathfrak M_A

與:

MB\mathfrak M_B

只要:

KAKB\mathcal K_A \equiv \mathcal K_B

且外部可觀察行為相容,就可能對父層形成可替換實現。


8. 父層看到的不是完整子世界

令:

Π\Pi^\uparrow

為向父層的投影。

則:

siparent=Π(Mi).s_i^{parent} = \Pi^\uparrow ( \mathfrak M_i ).

例如城市內部可能有十萬個 state variable。

父層只投影:

Π(Mcity)=(Stability,Output,Threat,PopulationTrend).\Pi^\uparrow(\mathfrak M_{city}) = ( Stability, Output, Threat, PopulationTrend ).

因此:

Parent State=Projection of Child Container.\boxed{ \text{Parent State} = \text{Projection of Child Container}. }

這是:

StateContainerState \leftrightarrow Container

真正的數學接口。


9. 向下展開

相反地,父層節點可以被展開:

Π:siparentMi.\Pi^\downarrow: s_i^{parent} \rightsquigarrow \mathfrak M_i.

但這裡:

Π\Pi^\downarrow

不一定是普通逆函數。

因為父層投影已經壓縮資訊。

所以一般:

ΠΠid.\Pi^\downarrow \circ \Pi^\uparrow \neq id.

更準確地:

Π\Pi^\downarrow

是:

  • 找到權威子容器;
  • 載入其狀態;
  • 恢復其歷史;
  • 物化必要子結構;

的展開操作。


10. 展開 E\mathcal E 與封裝 V\mathcal V

本文定義:

E:MD(M)\mathcal E: \mathfrak M \rightarrow \mathcal D(\mathfrak M)

為展開。

其中:

D(M)\mathcal D(\mathfrak M)

是顯式展開後的內部結構。

封裝/收斂:

V:D(M)M.\mathcal V: \mathcal D(\mathfrak M) \rightarrow \mathfrak M'.

最容易犯的錯是要求:

VE=id.\mathcal V \circ \mathcal E = id.

但若內部允許學習、修正與重構,這個條件太強。

我們真正需要的是:

V(E(M))M.\boxed{ \mathcal V ( \mathcal E(\mathfrak M) ) \equiv_{\partial} \mathfrak M. }

其中:

\equiv_{\partial}

表示邊界契約等價


11. 邊界等價 \equiv_{\partial}

定義:

MAMB\mathfrak M_A \equiv_{\partial} \mathfrak M_B

若對父層允許的觀測集合:

O\mathcal O_{\partial}

與合法輸入集合:

I\mathcal I_{\partial}

兩者在容許誤差 ε\varepsilon 內具有相同契約行為。

粗略寫為:

iI,\forall i\in\mathcal I_{\partial}, d(Obs(Run(MA,i)),Obs(Run(MB,i)))ε.d \left( Obs_{\partial} ( Run(\mathfrak M_A,i) ), Obs_{\partial} ( Run(\mathfrak M_B,i) ) \right) \le \varepsilon.

因此:

Identity PreservationInternal Equality.\boxed{ \text{Identity Preservation} \neq \text{Internal Equality}. }

而可以是:

Boundary-Contract Continuity.\boxed{ \text{Boundary-Contract Continuity}. }

12. 這和 RABCL 的「工作流封裝」直接接軌

RABCL 已經提出:

W=(V,E)EncapsulateBW.\mathcal W = (V,E) \xrightarrow{\mathsf{Encapsulate}} B_{\mathcal W}.

合法工作流封裝後,不只是視覺群組,而是一個具有:

  • 穩定身份;
  • 外部接口;
  • 功能契約;
  • 權威表示;
  • 驗證證據;
  • 展開路徑;
  • 演化歷史;

的一級計算物件。

而且:

B1,,BnBB_1,\ldots,B_n \in \mathfrak B

若合法組合,則:

Pack(B1,,Bn)B.\operatorname{Pack} ( B_1,\ldots,B_n ) \in \mathfrak B.

這就是 RDSS 遞歸容器最直接的工程前身。


13. 群組 Group 不等於 Container

UI 上把三個節點圈起來:

{A,B,C}\{A,B,C\}

不代表得到一個新狀態容器。

本文要求:

Group<Encapsulation<RecursiveContainer.\boxed{ Group < Encapsulation < Recursive Container. }

Group 只需要視覺邊界。

Encapsulation 還需要:

  • interface;
  • contract;
  • identity;
  • validation。

Recursive Container 再需要:

  • child state;
  • child history;
  • expand / collapse;
  • nested execution;
  • cross-scale consistency。

14. Genesis Matrix 已經有 Cell → Submatrix

創生矩陣的工程構想中,一個 Cell 可以展開成:

CellSubmatrix.Cell \rightarrow Submatrix.

並形成:

MatrixMatrixMatrix.\boxed{ Matrix \supset Matrix \supset Matrix. }

這不是單純 zoom,而是語義尺度下降。

在 RDSS 中可以重新寫成:

ci=Π(Mi).c_i = \Pi^\uparrow(\mathfrak M_i).

點擊展開:

ciΠMi.c_i \xrightarrow{\Pi^\downarrow} \mathfrak M_i.

所以 Genesis Matrix 可以被理解成:

RDC 的可視化 Addressing Surface.\boxed{ \text{RDC 的可視化 Addressing Surface}. }

它顯示的是容器投影,而不是完整本體。


15. 容器的身份不能綁定顯示位置

一個 Cell 可以從矩陣左上角移到右下角。

如果位置改變就失去身份,系統會非常脆弱。

所以:

id(M)=Iid(\mathfrak M) = \mathcal I

與:

positiont(M)position_t(\mathfrak M)

必須分離:

Iposition.\boxed{ \mathcal I \neq position. }

同樣:

Iparent.\mathcal I \neq parent.

因為一個容器甚至可能被:

  • 多處引用;
  • 重新掛載;
  • 複製;
  • fork;
  • merge。

16. Containment 與 Reference 必須分開

假設:

MAM_A

與:

MBM_B

都使用:

MC.M_C.

可能有兩種完全不同的結構。

Containment

MCMA.M_C \subset M_A.

表示生命週期與所有權被 A 包含。


Reference

MAMC.M_A \rightarrow M_C.

只是引用 C。

若 A 被刪除:

MCM_C

未必被刪除。

因此:

ContainsReferences.\boxed{ \text{Contains} \neq \text{References}. }

否則遞歸容器會迅速陷入所有權與刪除語義混亂。


17. 樹不夠,需要容器圖

最簡階層是:

M0M1M2.M_0 \supset M_1 \supset M_2.

但現實中可能:

  • 多父引用;
  • cross-link;
  • shared service;
  • peer relation;
  • cyclic dependency。

所以真正結構更接近:

GM=(VM,Econtain,Eref,Eevent,Edata).\mathcal G_M = ( V_M, E_{\mathrm{contain}}, E_{\mathrm{ref}}, E_{\mathrm{event}}, E_{\mathrm{data}} ).

其中只有:

EcontainE_{\mathrm{contain}}

需要維持明確所有權/生命週期約束。

其他邊可以形成一般圖甚至循環。


18. 遞歸不等於無限展開

第二篇 ODSS 已經建立有限有效支撐。

本文將其套到容器:

Neff(Q,t,ε)Nt.\mathcal N_{\mathrm{eff}} ( Q,t,\varepsilon ) \subseteq \mathcal N_t.

只有:

MiNeff\mathfrak M_i \in \mathcal N_{\mathrm{eff}}

才需要物化。

因此:

Potentially RecursiveFully Materialized.\boxed{ \text{Potentially Recursive} \neq \text{Fully Materialized}. }

例如世界中存在一百萬個 NPC 子容器。

玩家所在場景可能只物化:

3737

個。


19. 展開深度也是狀態

令:

dtd_t

為當前展開深度。

可以依任務:

d=d(Q,t,ε,B)d^\ast = d^\ast(Q,t,\varepsilon,B)

決定。

其中:

BB

是計算預算。

因此:

dtd_t

不是固定 UI zoom。

它是 runtime resource allocation 的一部分。


20. 父層事件如何進入子容器?

父層發生事件:

ep.e_p.

不應直接廣播到所有內部節點。

需要 event router:

ρ:ep{ec1,,eck}.\rho_{\partial}: e_p \rightarrow \{ e_{c_1}, \ldots, e_{c_k} \}.

並要求:

kN.k \ll |\mathcal N|.

也就是只路由給相關子容器。

如此可避免:

Global Broadcast Explosion.\boxed{ \text{Global Broadcast Explosion}. }

21. 子層事件如何上升?

子容器:

Mi\mathfrak M_i

內部可能產生數千個事件。

父層通常不需要全部知道。

所以定義事件收斂:

α:{e1,,en}eparent.\alpha^\uparrow: \{e_1,\ldots,e_n\} \rightarrow e^{parent}.

例如:

{bank_failure,riot,food_shortage}\{ bank\_failure, riot, food\_shortage \}

可以收斂為:

city_crisis.city\_crisis.

這就是事件層的:

Convergence.\boxed{ \text{Convergence}. }

22. 父子層一致性

假設父層投影:

sp=Healthy.s_p = \mathsf{Healthy}.

但子容器內部已:

70%70\%

關鍵節點故障。

此時產生:

Cross-Level Inconsistency.\boxed{ \text{Cross-Level Inconsistency}. }

所以需要一致性條件:

Consistent(sp,Π(Mc))=1.Consistent ( s_p, \Pi^\uparrow(\mathfrak M_c) ) = 1.

若:

=0,=0,

則父層狀態必須:

  • 更新;
  • 標記 stale;
  • 進入 unknown;
  • 或觸發重新投影。

23. 父層狀態可以是快取,但不能是假真相

為效率,父層可以快取:

s^p\hat s_p

而不是每次都展開子容器。

但需要:

Version(s^p)Version(\hat s_p)

與:

Version(Mc)Version(\mathfrak M_c)

關聯。

若:

Lag(s^p,Mc)>τ,Lag ( \hat s_p, \mathfrak M_c ) > \tau,

則:

s^p=Stale.\hat s_p = \mathsf{Stale}.

這和 MSSP × RDR 中「索引可落後、但不能冒充唯一權威」的原則一致。


24. 容器內部可以重構

假設:

Mt\mathfrak M_t

內部原本是:

ABC.A\rightarrow B\rightarrow C.

後來改成:

ADC.A \rightarrow D \rightarrow C.

只要:

MtMt+1,\mathfrak M_t \equiv_{\partial} \mathfrak M_{t+1},

父層可以不用知道內部重構。

因此遞歸容器提供:

Local Structural Freedom\boxed{ \text{Local Structural Freedom} }

同時保持:

Global Contract Stability.\boxed{ \text{Global Contract Stability}. }

25. 但契約也可以演化

前一節不表示:

Kt\mathcal K_t

永遠不能變。

若契約改變:

KtKt+1,\mathcal K_t \rightarrow \mathcal K_{t+1},

這是一個更高階事件:

Boundary Regime Change.\boxed{ \text{Boundary Regime Change}. }

此時父層必須知道。

所以:

Internal Rewrite\text{Internal Rewrite}

與:

Contract Rewrite\text{Contract Rewrite}

需要不同治理等級。


26. 身份保持的三級標準

本文提出三種身份保持強度。

I1 — Exact Internal Identity

Mt+1=Mt.\mathfrak M_{t+1} = \mathfrak M_t.

最強,但動態系統幾乎不適用。


I2 — Structural Continuity

內部可改,但主要結構與歷史鏈保持。

Ht+1=HtΔt.H_{t+1} = H_t \oplus \Delta_t.

I3 — Boundary-Contract Identity

內部可大幅改寫,只要求:

Mt+1Mt.\mathfrak M_{t+1} \equiv_{\partial} \mathfrak M_t.

工程上通常最實用。


27. Fork、Clone 與 Same Identity

如果:

Clone(M)=MClone(\mathfrak M) = \mathfrak M'

且初始內容完全一樣,也不代表:

I=I.\mathcal I' = \mathcal I.

應區分:

State EqualityIdentity Equality.\boxed{ \text{State Equality} \neq \text{Identity Equality}. }

Clone:

II.\mathcal I' \neq \mathcal I.

Fork:

ParentIdentity(I)=I.ParentIdentity(\mathcal I') = \mathcal I.

Move:

I=I.\mathcal I' = \mathcal I.

這會在未來 AI Agent、虛擬世界與可複製 runtime 中非常重要。


28. 封裝不是資訊刪除

當:

V:D(M)M\mathcal V: \mathcal D(\mathfrak M) \rightarrow \mathfrak M

發生時,父層只看壓縮狀態。

但內部資訊不一定被刪除。

因此區分:

HiddenErased.\boxed{ \text{Hidden} \neq \text{Erased}. }

封裝可以:

  • 不載入;
  • 不投影;
  • 不顯示;
  • 暫存;
  • 壓縮;

但仍保留可恢復路徑。


29. 真正不可逆的收斂

也存在:

V\mathcal V

造成信息真正丟失。

例如:

Vlossy.\mathcal V_{lossy}.

此時必須記錄:

LV>0.L_{\mathcal V} > 0.

所以:

Collapse\boxed{ \text{Collapse} }

至少有:

  • reversible collapse;
  • lossy convergence;

兩類。

這與前面 ODSS 的 Loss Accounting 一致。


30. RCTEP:容器甚至能生成新的容器結構

截至目前,容器只是:

MtMt+1.\mathfrak M_t \rightarrow \mathfrak M_{t+1}.

RCTEP 更進一步允許:

(x,Σ,Γ,K)(x,Σ,Γ,K).(x,\Sigma,\Gamma,\mathcal K) \rightarrow (x',\Sigma',\Gamma',\mathcal K').

亦即:

  • 新模式;
  • 新關係;
  • 新規則;
  • 新生成核;

都可能出現。

RDSS 對此的容器版本是:

MtMt+1\boxed{ \mathfrak M_t \rightarrow \mathfrak M_{t+1} }

且:

Schema(Mt)Schema(Mt+1).Schema(\mathfrak M_t) \neq Schema(\mathfrak M_{t+1}).

因此容器不只是會動。

它還可以:

grow new internal world structure.\boxed{ \text{grow new internal world structure}. }

31. 生成必須有 witness

如果容器突然新增:

Mnew,M_{\mathrm{new}},

卻不知道:

  • 從何生成;
  • 哪些狀態導致;
  • 哪個規則允許;
  • 哪些歷史條件存在;
  • 哪些不變量被保持;

那「生成」很容易退化成任意修改。

因此每個結構生成事件:

gg

應附帶:

wg=(Source,Rule,History,Constraint,Result,Invariant,Provenance).w_g = ( Source, Rule, History, Constraint, Result, Invariant, Provenance ).

這直接承接 RCTEP 的生成見證思想。


32. 遞歸容器的原子提交

如果子容器內部:

A,B,CA,B,C

一起改寫,但父層在中途讀到:

A,B,CA' , B, C'

可能得到不存在的中間狀態。

因此某些容器需要:

Atomic Local Commit.\boxed{ \text{Atomic Local Commit}. }

流程:

MtM~t+1ValidateCommitMt+1.\mathfrak M_t \rightarrow \widetilde{\mathfrak M}_{t+1} \rightarrow Validate \rightarrow Commit \rightarrow \mathfrak M_{t+1}.

這也是 CAIR / RABCL 封裝靜止屏障可重新利用的地方。


33. 不需要全域原子

但不能因此要求整個世界:

MworldM_{world}

每次都 global lock。

應區分:

Local Atomicity+Cross-Container Eventual Consistency.\boxed{ \text{Local Atomicity} + \text{Cross-Container Eventual Consistency}. }

父子容器可以透過:

  • version;
  • event;
  • snapshot;
  • causal order;

同步。

否則遞歸世界會被全域鎖拖垮。


34. 容器的最小可執行接口

本文暫定每個 RDC 至少提供:

inspect()
snapshot()
expand()
collapse()
dispatch(event)
apply(action)
validate(delta)
commit(delta)
project(view)
history()

其中:

expand()

StateContainerView.State \rightarrow ContainerView.

collapse()

ContainerStateProjection.Container \rightarrow StateProjection.

dispatch()

父事件向內路由。

project()

產生父層或人類/AI 需要的觀測投影。


35. 一個最小遊戲世界例子

父層:

World={TownA,TownB,DungeonC}.World = \{ Town_A, Town_B, Dungeon_C \}.

其中:

TownATown_A

在父層是一個 stateful node。

父層看到:

TownA=(stable,population=12000,threat=0.2).Town_A = ( stable, population=12000, threat=0.2 ).

展開:

Π(TownA)=MTownA.\Pi^\downarrow(Town_A) = \mathfrak M_{Town_A}.

內部:

{Economy,Guards,Shops,NPCs,Crime,Politics}.\{ Economy, Guards, Shops, NPCs, Crime, Politics \}.

玩家進入城鎮後:

Neff\mathcal N_{\mathrm{eff}}

只物化附近:

NPC,Shop,Guard,QuestNPC, Shop, Guard, Quest

相關子容器。

玩家離開後:

V\mathcal V

重新收斂:

MTownATownAparent.\mathfrak M_{Town_A} \rightarrow Town_A^{parent}.

父世界不需要保存每個 NPC 每一幀的全部狀態。

只保存:

  • 必要歷史;
  • 重要事件;
  • 聚合指標;
  • 可恢復快照。

這就是狀態機作為動態世界容器的基本形式。


36. 一個軟體系統例子

父層:

Application={Auth,Billing,Search}.Application = \{ Auth, Billing, Search \}.

其中:

BillingBilling

對父層是一個模組 state。

展開:

Billing{Invoice,Payment,Refund,Tax,Ledger}.Billing \rightarrow \{ Invoice, Payment, Refund, Tax, Ledger \}.

如果內部把:

PaymentV1PaymentV1

換成:

PaymentV2,PaymentV2,

只要:

Billingv1Billingv2,Billing_{v1} \equiv_{\partial} Billing_{v2},

父層不必修改。

但若:

RefundPolicyRefundPolicy

改變對外契約:

KtKt+1,\mathcal K_t \neq \mathcal K_{t+1},

則必須升級父層依賴。


37. 一個 AI Agent 例子

父層只看到:

AgentA=(Available,Capability,Authority,Risk).Agent_A = ( Available, Capability, Authority, Risk ).

展開後可能有:

{Planner,Memory,Tools,WorldState,SubAgents,Policies}.\{ Planner, Memory, Tools, WorldState, SubAgents, Policies \}.

父層不需要每輪把 Agent 全部內部記憶重新讀入。

而是:

Π(AgentA)\Pi^\uparrow ( Agent_A )

保留當前父層需要的狀態投影。

這正是世界狀態機+AI 架構可節省重複上下文的一個形式理由。


38. 遞歸容器與「存在」

到這裡可以重新回到第一篇的本體論問題。

若:

xx

在父層是一個節點,

展開後是一個容器,

沿時間是一條持續演化軌跡,

那麼對動態存在者而言:

Identity(x)\boxed{ Identity(x) }

可能更自然地由:

(Boundary,Contract,History,InternalDynamics)( Boundary, Contract, History, InternalDynamics )

共同維持。

因此可以提出中等強度命題:

Dynamic EntityPersistent Recursive State Container.\boxed{ \text{Dynamic Entity} \approx \text{Persistent Recursive State Container}. }

但本文仍不把它提升成:

Everything=StateMachine.Everything = StateMachine.

39. 可證偽問題

39.1 Scale Projection 是否保真?

比較:

Decision(Π(M))Decision ( \Pi^\uparrow(\mathfrak M) )

與使用完整子狀態決策的差異。


39.2 Encapsulation 是否真的降低複雜度?

測量:

CostflatCost_{\mathrm{flat}}

與:

Costrecursive.Cost_{\mathrm{recursive}}.

39.3 Boundary Contract 是否足以保持父層穩定?

若內部頻繁重構仍迫使父層修改,則封裝失敗。


39.4 Expand / Collapse 是否可重播?

需要:

Replay(Ht)Mt.Replay ( H_t ) \rightarrow \mathfrak M_t.

39.5 遞歸是否造成隱藏複雜度?

如果只是把複雜度藏進容器:

ComplexitytotalComplexity_{\mathrm{total}}

沒有降低,且 debugging 更困難,則 RDC 工程價值必須重新評估。


40. 本文的八個容器不變量候選

C1 — Persistent Identity

I\mathcal I

不能因顯示位置或普通內部重構任意改變。


C2 — Explicit Boundary

每個正式容器必須有:

.\partial.

C3 — Finite External Interface

父層操作面:

P|\mathcal P|

應顯著小於完整內部狀態面。


C4 — Contracted Encapsulation

所有正式封裝都必須有:

K.\mathcal K.

C5 — Expandability

父層 state 必須存在可追蹤:

StateContainerState \rightarrow Container

路徑。


C6 — Convergibility

子容器必須能形成父層有效投影:

ContainerState.Container \rightarrow State.

C7 — Historical Continuity

內部重構必須保持可追溯:

HtHt+1.H_t \rightarrow H_{t+1}.

C8 — Bounded Materialization

任何實際任務只物化有限:

Neff.\mathcal N_{\mathrm{eff}}.

41. 與前 3 篇的統一

第一篇得到:

StateContainerProcess.\boxed{ State \leftrightarrow Container \leftrightarrow Process. }

第二篇建立:

Open Schema+Finite Support.\boxed{ Open\ Schema + Finite\ Support. }

第三篇建立:

Classification=Stateful Subsystem.\boxed{ Classification = Stateful\ Subsystem. }

本篇則補上:

Boundary+Interface+Contract+Recursive Containment.\boxed{ Boundary + Interface + Contract + Recursive\ Containment. }

所以 RDSS 的核心物件可以更新成:

Mt=(I,St,Rt,Θt,Δt,At,t,Pt,Kt,Πt,Ht,Tt,Nt).\boxed{ \mathfrak M_t = ( \mathcal I, S_t, R_t, \Theta_t, \Delta_t, \mathcal A_t, \partial_t, \mathcal P_t, \mathcal K_t, \Pi_t, H_t, \mathbb T_t, \mathcal N_t ). }

42. 下一步:三元循環正式成為容器演化算子

有了遞歸容器後,第五篇才能真正處理:

E=Expansion,\mathcal E = Expansion, C=Connection,\mathcal C = Connection, V=Convergence.\mathcal V = Convergence.

因為現在我們已經知道:

展開什麼?

展開:

M\boxed{ \mathfrak M }

本身。

連接什麼?

連接:

MiMj.\boxed{ \mathfrak M_i \leftrightarrow \mathfrak M_j. }

收斂成什麼?

收斂為:

M\boxed{ \mathfrak M' }

新的高階狀態容器。

因此下一篇:

《展開—連接—收斂:三元本體論的狀態系統實現》

將第一次不只是把 TUO 當哲學元框架,而是把:

VCE\boxed{ \mathcal V \circ \mathcal C \circ \mathcal E }

正式寫成 RDSS 的生成循環。


43. 結論

本文最核心的問題是:

一個 state 能不能本身就是一個世界?

答案不是簡單的「可以」。

因為如果只是:

StateStates,State \supset States,

我們早已有大量階層狀態機形式。

RDSS 真正需要的是:

StateConvergeExpandDynamic Container.\boxed{ \text{State} \xleftrightarrow[ \text{Converge} ]{ \text{Expand} } \text{Dynamic Container}. }

而這個容器必須同時保持:

Identity+Boundary+Interface+Contract+History+ExecutableSemantics.\boxed{ Identity + Boundary + Interface + Contract + History + Executable Semantics. }

因此:

父層的一個狀態\boxed{ \text{父層的一個狀態} }

可以是:

自身尺度的一個完整動態世界.\boxed{ \text{自身尺度的一個完整動態世界}. }

但父層不需要理解全部世界。

它只需要:

Π(M).\boxed{ \Pi^\uparrow(\mathfrak M). }

當需要深入時:

Π\boxed{ \Pi^\downarrow }

再展開。

所以遞歸狀態系統的真正價值,不是「把一切無限展開」。

恰恰相反。

它提供:

可以無限繼續細化的表示能力\boxed{ \text{可以無限繼續細化的表示能力} }

與:

永遠只在當前尺度暴露有限可操作表面\boxed{ \text{永遠只在當前尺度暴露有限可操作表面} }

之間的橋。

這就是「狀態機作為遞歸動態容器」的核心。


參考文獻

外部文獻

  1. Harel, D. (1987). Statecharts: A Visual Formalism for Complex Systems. Science of Computer Programming, 8(3), 231–274. DOI: 10.1016/0167-6423(87)90035-9.
  2. Segovia-Aguas, J., Jiménez, S., & Jonsson, A. (2019). Hierarchical Finite State Controllers for Generalized Planning. arXiv:1911.02887.
  3. Stefansson, E., & Johansson, K. H. (2022). Hierarchical Finite State Machines for Efficient Optimal Planning in Large-scale Systems. arXiv:2212.03724.
  4. Stefansson, E., & Johansson, K. H. (2023). Efficient and Reconfigurable Optimal Planning in Large-Scale Systems Using Hierarchical Finite State Machines. arXiv:2303.16567.

EveMissLab 內部前置

  1. Neo.K with Aletheia,《狀態、容器與存在:遞歸動態狀態系統的總命題》。
  2. Neo.K with Aletheia,《從有限狀態機到開放維度狀態系統》。
  3. Neo.K with Aletheia,《分類即狀態:從靜態類型到動態類型體制》。
  4. Neo.K with Aletheia,《連線即封裝:從工作流到高階語言基元的總命題》。
  5. Neo.K,《創生矩陣:以矩陣方塊底空間、格子語義封裝與 Agent 操作介面為核心的統一計算架構》。
  6. Neo.K,《反身因果張量湧生積》。
  7. Neo.K,《空間狀態論》。
  8. Neo.K,《MSSP × RDR 整合規格書》。