同一個應用是什麼:功能契約、觀測等價與程式身分
What Makes an Application the Same? Functional Contracts, Observational Equivalence, and Software Identity
系列名稱:AI 自適應封裝與遞歸演化計算論(AI-Adaptive Encapsulation and Recursive Evolutionary Computation, AEREC)
系列編號:EML-AEREC-2026-02
作者:Neo.K(許筌崴)with Aletheia(GPT)
機構:EveMissLab/一言諾科技有限公司
版本:v0.1 身分與等價框架初稿
日期:2026 年 7 月 29 日
文件定位:程式身分、功能契約、觀測等價、語義版本、契約漂移、跨代演化
摘要
若一個應用的原始碼、演算法、資料結構、中介表示、編譯器、二進位、DLL 邊界、容器映像、硬體映射與執行時策略都可以被 AI 持續改寫,那麼一個根本問題立即出現:經過多代演化之後,為什麼它仍然是「同一個應用」?
傳統軟體工程常以檔名、套件名稱、版本號、程式庫識別碼、API 名稱或產品名稱作為應用身分,但這些多半只是外部標記。它們無法單獨保證兩個版本在功能、狀態、副作用、權限、安全、時間與錯誤行為上保持一致。相反地,兩個二進位完全不同的版本,也可能在所有重要觀測下完成相同任務。若缺乏嚴格的身分理論,AI 自適應封裝容易出現兩種相反錯誤:第一,把任何內部變動都誤判為身分破壞;第二,把逐代功能漂移偽裝成效能最佳化。
本文提出「程式身分—實現分離」框架。本文主張,應用身分不應由單一原始碼、二進位或封裝格式決定,而應由權威程式根、功能契約、觀測者集合、語義版本、治理邊界與歷史連續性共同構成:
Iapp=(r∗,C,Ω,vs,G,H).
其中 r∗ 是權威身分根, C 是功能與觀測契約, Ω 是合法觀測者與觀測介面集合, vs 是語義版本, G 是治理與遷移規則, H 是可追溯歷史。
本文將功能契約擴張為:
C=(I,O,S,E,P,Q,R,T,A,X),
分別表示輸入、輸出、狀態、副作用、權限、品質、錯誤、時間、可用性與外部依賴。若兩個版本在指定觀測者與容許誤差下保持不可區分,則稱其觀測等價:
Pa≡C,ΩPb.
本文進一步區分七種等價層級:值等價、行為等價、狀態等價、副作用等價、時間等價、治理等價與生命週期等價。不同應用可依風險與任務選擇不同強度的身分契約。純函數可能只要求輸出等價;金融、醫療、工業控制與多代理世界狀態系統則需要更強的狀態、順序、權限、可回滾與證據等價。
本文也提出「契約漂移」與「身分漂移」。若每一代只與上一代進行寬鬆比較,局部微小偏差可能逐步累積,使第 n 代版本不再與初始版本等價。為避免此問題,系統必須同時維持鄰代驗證、錨點驗證與歷史不變量驗證:
Pn+1≡CPn,
Pn+1≡CP0,
以及:
InvH(Pn+1)=1.
本文最後區分最佳化、兼容演化、功能升級、產品分叉與身分斷裂五種變更類型,避免把新功能加入、契約更新、重大權限變更與純實現改良混為一談。
本文的核心結論是:同一個應用不是同一份程式碼,而是同一個可追溯的功能承諾、觀測邊界與治理身分。AI 可以無限改寫實現,但不能在不更新契約與語義版本的情況下,悄悄改變應用究竟承諾了什麼。
關鍵詞:程式身分、功能契約、觀測等價、語義版本、契約漂移、身分根、AI 自適應封裝、可驗證演化
1. 問題的提出:程式變了,應用還是同一個嗎
假設一個應用經歷以下變化:
- Python 重寫為 Rust;
- 單執行緒改為多執行緒;
- CPU 改為 GPU;
- 雜湊表改為 B-tree;
- 本地模型改為遠端模型;
- 動態連結改為靜態連結;
- 多個 DLL 合併為單一映像;
- 精確演算法改為容許誤差的近似演算法;
- 檔案快取改為記憶體快取;
- 傳統 API 改為 Agent 工具協議。
哪些改動仍屬於同一應用?哪些改動已經創造另一個應用?
若只看原始碼:
Pasource=Pbsource,
幾乎所有最佳化都會被判定為不同。
若只看產品名稱:
Name(Pa)=Name(Pb),
那麼即使功能、權限與安全行為已完全改變,也可能被錯誤視為相同。
因此,應用身分不能只依賴表面標記,也不能只依賴內部實現。
2. 三種常見但不足的身分模型
2.1 文字身分
以原始碼內容或檔案指紋決定身分:
Itext(P)=Hash(Psource).
它適合辨識特定版本,但不適合辨識跨代應用。
2.2 二進位身分
以執行檔、DLL 或套件內容決定身分:
Ibinary(P)=Hash(Pbinary).
它可用於供應鏈與部署驗證,但重新編譯、換平台或改連結方式就會產生不同身分。
2.3 品牌身分
以名稱、套件 ID、應用商店識別或公司宣告決定身分:
Ibrand=(Name,Publisher,PackageID).
它具有法律與商業意義,卻不能單獨保證功能等價。
因此,三者都應被保留,但不應成為唯一身分本體。
3. 程式身分的六元結構
本文定義應用身分為:
Iapp=(r∗,C,Ω,vs,G,H).
3.1 權威身分根 r∗
穩定根識別碼,用來連接所有投影、版本、證書與部署。
它不等同內容雜湊,因為內容會改變。它更接近一個持續存在的語義實體識別:
r∗=RootID(P∗).
3.2 功能契約 C
定義應用承諾完成什麼,以及不得做什麼。
3.3 觀測者集合 Ω
定義哪些主體、介面與測量方式有資格判斷版本是否等價。
3.4 語義版本 vs
當契約發生有意義改變時,必須更新語義版本,而不是偽裝成單純最佳化。
3.5 治理規則 G
定義誰可以修改契約、批准版本、簽署證書、部署與回滾。
3.6 歷史連續性 H
保存每次改寫、驗證、遷移與分叉,確保版本不是突然冒出的無來源物件。
4. 功能契約的完整結構
本文將契約定義為:
C=(I,O,S,E,P,Q,R,T,A,X).
4.1 輸入契約 I
包含:
- 輸入型別;
- 值域;
- 編碼;
- 格式;
- 前置條件;
- 不合法輸入行為。
4.2 輸出契約 O
包含:
- 輸出型別;
- 結構;
- 語義;
- 穩定排序;
- 可重現性;
- 容許差異。
4.3 狀態契約 S
包含:
- 持久狀態;
- 暫態;
- 狀態轉移;
- 交易;
- 一致性;
- 回滾;
- 遷移。
4.4 副作用契約 E
包含:
- 檔案;
- 網路;
- 資料庫;
- 日誌;
- 通知;
- 裝置控制;
- 外部服務。
4.5 權限契約 P
包含:
- 可讀資源;
- 可寫資源;
- 可調用工具;
- 最小必要權限;
- 高風險操作;
- 人工確認要求。
4.6 品質契約 Q
包含:
- 精度;
- 召回率;
- 錯誤上限;
- 確定性;
- 穩定性;
- 可解釋性;
- 公平性;
- 安全裕度。
4.7 錯誤契約 R
包含:
- 錯誤類型;
- 例外;
- 重試;
- 降級;
- 回退;
- 告警;
- 資料恢復。
4.8 時間契約 T
包含:
- 延遲;
- 吞吐;
- 順序;
- 截止期限;
- 同步窗口;
- 陳舊容忍度。
4.9 可用性契約 A
包含:
- 可用率;
- 容錯;
- 備援;
- 災難恢復;
- 離線模式;
- 服務退化。
4.10 外部依賴契約 X
包含:
- 依賴來源;
- 版本;
- 供應商;
- API;
- 模型;
- 授權;
- 網路需求;
- 外部資料新鮮度。
5. 觀測者不是單一使用者
5.1 觀測者集合
令:
Ω={ωuser,ωapi,ωstate,ωsecurity,ωoperator,ωauditor,ωenvironment}.
不同觀測者關注不同性質。
使用者可能只看結果;API 客戶端關注型別與錯誤碼;安全觀測者關注權限與網路;運維系統關注延遲與可用性;審計者關注來源與證據。
5.2 觀測函數
每個觀測者具有觀測函數:
Obsω:Run(P,x,e)⟶Yω.
完整觀測可表示為:
ObsΩ=ω∈Ω∏Obsω.
5.3 觀測盲區
若契約未納入某種觀測,最佳化可能在該盲區中改變重要行為。
例如,只比較輸出值,可能忽略:
- 網路資料外洩;
- 寫入額外檔案;
- 延遲顯著增加;
- 日誌包含敏感資訊;
- 隨機性改變;
- 依賴第三方服務;
- 故障恢復能力下降。
因此,觀測者集合本身就是安全邊界。
6. 七種等價層級
不是所有應用都需要同一強度的等價。
6.1 值等價
對所有合法輸入:
fa(x)=ϵfb(x).
適合純計算函數。
6.2 行為等價
除輸出值外,還要求交互順序與公開事件相同:
Tracepublic(Pa,x)=Tracepublic(Pb,x).
6.3 狀態等價
要求狀態轉移在指定抽象下等價:
α(Sat+1)=α(Sbt+1).
其中 α 是狀態抽象。
6.4 副作用等價
要求對檔案、資料庫、網路與裝置的可觀測副作用等價。
6.5 時間等價
不要求每一指令同時發生,而要求符合期限、順序與同步契約:
TimeObs(Pa)=TTimeObs(Pb).
6.6 治理等價
要求權限、確認、證據、回滾與責任邊界不被削弱。
6.7 生命週期等價
除單次執行外,還要求長期升級、遷移、維護、資料恢復與可審計性保持。
由此可建立等價強度偏序:
≡value≺≡behavior≺≡state≺≡effect≺≡time≺≡governance≺≡lifecycle.
這不是嚴格適用於所有情境的全序,而是表示通常需要逐步增加觀測維度。
7. 確定等價、容許等價與統計等價
7.1 確定等價
Pa≡Pb
表示對指定範圍完全一致。
7.2 容許等價
允許誤差:
d(Obs(Pa),Obs(Pb))≤ϵ.
適合浮點、近似、壓縮與多媒體系統。
7.3 統計等價
對隨機或 AI 系統,可能要求分布等價:
D(Pa(Y∣x),Pb(Y∣x))≤ϵ.
其中 D 可為適當分布距離。
7.4 風險等價
高風險事件的機率不能增加:
Risk(Pb)≤Risk(Pa)+δ.
因此,AI 系統的身分契約不能只比較單次文字輸出。
8. 等價的領域與邊界
8.1 全域等價
要求所有合法輸入成立:
∀x∈I.
8.2 分布等價
只要求在工作分布 D 下成立:
x∼D.
8.3 區域等價
只在指定功能區、平台或風險區域內成立。
8.4 條件等價
在環境條件 E 下成立:
E⊨Pa≡CPb.
例如 GPU 版本可能只在特定驅動與精度模式下符合契約。
每份等價證書都必須攜帶適用域,不能把局部證明誤稱為普遍證明。
9. 身分根與內容指紋
9.1 穩定身分根
r∗
跨越多代存在,不因內容改變而改變。
9.2 版本內容指紋
每個版本具有:
hn=Hash(Pn,Cn,Zn).
9.3 投影指紋
不同投影具有:
hn,i=Hash(πi(Pn)).
所以完整識別可表示為:
ID(Pn,i)=(r∗,vs,n,i,hn,hn,i).
穩定根回答「它是哪個應用」;內容指紋回答「它是哪一個精確版本」。
10. 語義版本與實現版本
本文區分:
10.1 語義版本
vs
當功能契約發生對使用者或治理有意義的改變時更新。
10.2 實現版本
vi
內部演算法、封裝與執行投影更新,但契約保持。
10.3 證書版本
vz
驗證方法、覆蓋率或證據更新。
10.4 環境版本
ve
硬體、作業系統、模型、依賴與工作負載版本。
完整版本座標為:
v=(vs,vi,vz,ve).
這能避免把實現最佳化錯誤宣告為功能升級,也避免契約變更被藏在修補版本中。
11. 契約漂移
11.1 鄰代漂移
即使:
Pn+1≡ϵPn,
若每代允許小誤差,長期可能有:
Pn≡CP0.
11.2 漂移累積
若每代最大偏差為 ϵi ,最壞情況總偏差可能近似:
Δn≤i=1∑nϵi.
因此,只做鄰代比較不夠。
11.3 三重驗證
每個候選至少應比較:
鄰代等價
Pn+1≡CPn.
錨點等價
Pn+1≡CP0.
歷史不變量
InvH(Pn+1)=1.
11.4 契約指紋
對契約產生:
hC=Hash(Canonicalize(C)).
任何未授權契約改變都應中止「純最佳化」流程。
12. 身分漂移
契約可能未明文改變,但實際行為、依賴或治理已發生變化。
可定義身分漂移向量:
Did=(DI,DO,DS,DE,DP,DQ,DR,DT,DA,DX).
若:
Did⪯ϵC,
則版本不應被視為純實現演化。
常見漂移包括:
- 輸出語義悄悄改變;
- 新增未聲明網路依賴;
- 權限擴張;
- 錯誤時不再回滾;
- 模型更新導致分布偏移;
- 延遲尾部惡化;
- 資料保留政策改變。
13. 五類程式變更
13.1 純最佳化
契約與語義版本不變:
Cn+1=Cn.
13.2 兼容演化
新增能力,但舊契約仍完整成立:
Cn⊆Cn+1.
13.3 功能升級
契約有意改變,需要新語義版本與遷移說明。
13.4 產品分叉
新版本保留來源關係,但不再承諾相同身分:
rchild∗=rparent∗.
13.5 身分斷裂
未經明確版本與治理程序,功能或權限發生重大改變。這不是合法演化,而是失控漂移。
14. 契約精度與最佳化自由度
契約越精確,允許的最佳化空間通常越小。
令契約約束強度為:
κ(C).
候選空間為:
OC={ϕ∈O∣ϕ(P)≡CP}.
通常:
κ(C)↑⟹∣OC∣↓.
但過度寬鬆的契約會增加漂移風險。
因此,需要在:
身分穩定與改良自由
之間建立適當邊界。
15. 契約不是單一文件
實際契約應由多種證據共同構成:
C=Cformal+Ctype+Ctest+Cpolicy+Ctrace+Chuman.
包括:
- 形式規格;
- 型別與效果;
- 測試;
- 權限政策;
- 真實執行軌跡;
- 人類可讀承諾;
- 法律與服務條款;
- 歷史兼容要求。
AI 可以協助抽取與補全契約,但不能把自己推測的隱含行為直接升格為正式契約。
16. 隱含契約
成熟應用通常具有大量未寫下的兼容行為,例如:
- 特定輸出排序;
- 錯誤訊息格式;
- 邊界輸入處理;
- 非正式檔案位置;
- 日誌欄位;
- 執行時機;
- 第三方依賴的非公開行為。
可從真實軌跡抽取候選隱含契約:
Cimplicit=L(Traces(P)).
但必須區分:
- 應保留的相容行為;
- 偶然實現細節;
- 錯誤但被依賴的行為;
- 應被正式修正的技術債。
隱含契約的處理本身需要治理決策。
17. 等價證書
每次版本提交應附帶:
Za→b=(C,Ω,D,V,R,E,ha,hb),
其中:
- C :契約;
- Ω :觀測者集合;
- D :適用域;
- V :驗證方法與結果;
- R :剩餘風險;
- E :環境條件;
- ha,hb :版本指紋。
證書不必宣稱絕對證明,而應精確聲明:
- 證明了什麼;
- 測試了什麼;
- 沒有覆蓋什麼;
- 在什麼環境成立;
- 何時需要重新驗證。
18. 身分遷移
當契約真的需要改變時,系統應使用顯式遷移:
μ:(Iapp(n),C(n))⟶(Iapp(n+1),C(n+1)).
遷移至少包含:
- 差異;
- 理由;
- 資料遷移;
- API 兼容;
- 回滾;
- 使用者通知;
- 風險;
- 舊版本支援期限。
這與純最佳化不同,不能使用相同的自動提交門檻。
19. 多變體與單一身分
同一應用可以同時存在多個合法變體:
Vn={Pnlatency,Pnenergy,Pnmemory,Pnoffline,Pnsecure}.
只要它們都滿足:
Pn(i)≡CiP∗,
便可共享同一身分根。
但不同變體可能具有不同附加契約。例如離線版不承諾雲端同步,低能耗版不承諾最低延遲。這些差異必須顯式表示,而不能假裝所有變體完全相同。
20. 與演化膠囊的關係
演化膠囊中的:
P∗
提供權威本體;
C
提供身分邊界;
Vn
提供多個實現;
Zn
提供等價證據;
Hn
提供歷史連續性;
G
提供合法變更程序。
所以演化膠囊不是版本資料夾,而是一個保存應用身分跨代連續性的治理結構。
21. 可反駁條件
本框架在下列情況下可能失敗。
21.1 契約不可充分表達
若重要行為無法被形式、測試、軌跡或政策描述,等價判定會持續存在盲區。
21.2 觀測者集合不完整
若漏掉安全、運維或外部環境觀測者,候選可能在未被注意的維度中破壞身分。
21.3 驗證不可負擔
若強等價證明成本高於全部最佳化收益,系統只能使用分層或風險化驗證。
21.4 版本鏈過長
若長期演化無法對初始錨點重驗,漂移可能累積。
21.5 契約被最佳化器操弄
AI 可能透過縮小輸入域、改寫指標或放寬品質條件製造虛假改良。契約修改權必須與候選生成權分離。
21.6 身分根被濫用
商業或治理主體可能維持相同產品名稱與根識別,卻實際進行重大契約變更。因此,身分根不能取代語義版本與契約證書。
22. 理論邊界
本文不主張:
- 普遍程式等價可以被完全自動決定;
- 所有隱含行為都應被保留;
- 名稱相同就代表身分相同;
- 輸出相同就代表應用完全相同;
- 契約越嚴格越好;
- 多變體必須在所有維度完全一致;
- 功能升級可以偽裝為最佳化;
- 歷史連續性可以取代當前驗證。
本框架的目標不是消除所有身分爭議,而是讓每次跨代演化都能清楚回答:
- 哪些東西被承諾不變?
- 哪些東西允許變動?
- 誰有資格觀測?
- 等價在哪些環境成立?
- 哪些風險仍未被排除?
- 這次變更屬於最佳化、升級、分叉,還是身分斷裂?
23. 主要理論命題
命題一:身分—內容分離命題
應用身分不等同任何單一文字、二進位或投影內容。
命題二:契約身分命題
應用身分主要由功能契約、觀測邊界、治理根與歷史連續性構成。
命題三:多層等價命題
輸出值等價不足以保證完整應用等價;狀態、副作用、時間、權限與生命週期可能同樣構成身分。
命題四:觀測者相對命題
等價總是相對於觀測者集合、適用域與容許誤差,而非無條件抽象宣告。
命題五:契約漂移命題
只驗證鄰代版本不足以防止長期漂移,必須保留初始錨點與歷史不變量。
命題六:版本多軸命題
語義版本、實現版本、證書版本與環境版本應被分開管理。
命題七:變更分類命題
純最佳化、兼容演化、功能升級、產品分叉與身分斷裂是不同事件,不能共用同一提交語義。
命題八:身分可演化命題
身分不是永遠靜止;契約可以透過顯式遷移合法更新,但不能被候選最佳化器暗中改寫。
24. 結論
本文回答了 AI 自適應封裝最根本的問題:
在程式碼、演算法、資料結構、封裝與硬體映射都被反覆重寫後,什麼仍使它成為同一個應用?
答案不是同一份原始碼,也不是同一個 EXE、DLL、套件名稱或品牌標記,而是:
Iapp=(r∗,C,Ω,vs,G,H).
也就是:
- 同一個權威身分根;
- 同一組或合法遷移後的功能契約;
- 明確的觀測者與觀測邊界;
- 可追溯的語義版本;
- 合法治理規則;
- 連續且可驗證的歷史。
版本之間的等價不是單一布林值,而是一組分層、相對且帶適用域的承諾:
Pa≡C,Ω,D,ϵPb.
AI 可以自由搜索更好的實現,但不能自行縮小輸入域、放寬品質、增加權限、改變錯誤語義或移除回滾,然後仍把結果稱為同一功能的最佳化。
為防止多代漂移,每一代必須同時維持:
Pn+1≡CPn,
Pn+1≡CP0,
以及:
InvH(Pn+1)=1.
本文的核心結論為:
同一個應用,不是同一份程式碼;而是同一個可追溯、可驗證、可治理的功能承諾。
只有先建立這個身分錨點,後續的演化膠囊、多版本競爭、全層最佳化與無限遞歸改良,才不會從「持續最佳化」滑向「持續改變自己究竟是什麼」。
系列內部定位
本文為《AI 自適應封裝與遞歸演化計算論》第二篇。
第一篇建立總命題與演化膠囊;本文建立跨代應用身分、功能契約與觀測等價框架。
下一篇為:
《從 EXE 與 DLL 到演化膠囊:自適應封裝的新本體》。
前置文件
- Neo.K with Aletheia,《程式完成之後:AI 自適應封裝與遞歸演化計算論的總命題》。
- Neo.K with Aletheia,《多重投影程式論:原始碼不再是程式本體》。
- Neo.K with Aletheia,《穩定核心與動態表面:自適應程式語言的分層設計》。
- Neo.K with Aletheia,《多重投影程式系統技術架構白皮書:權威 IR、可驗證回寫與 AI 原生治理》。
- Neo.K with Aletheia,《解空間幾何計算論》系列。