
測試能告訴你程式在一些情況下會不會壞;正式驗證想追問的是:核心規則能不能被寫成一個機器也無法含糊帶過的論證。
來源:Zero Knowledge Podcast Episode 396 | 原始發表日期:2026 年 3 月 25 日
Alex Hicks 在訪談中談的正式驗證,起點不是「少一個 bug」的口號。一般測試會選擇輸入、跑出結果,再比對預期。它能抓到很多錯誤,也永遠只能覆蓋被選到的情況。只要輸入空間夠大,仍可能有一個沒被測到的角落,剛好破壞安全性或經濟規則。
正式驗證的作法不同:先把系統應滿足的性質明確寫下來,再用證明助手檢查從定義到結論的每一步。它不會保證「整個世界都安全」,但能讓某個精確命題不再依賴直覺、文件描述或人工覆核。
核心差別:測試問「這些案例有沒有成功?」;證明問「在寫清楚的假設下,這個性質是否必然成立?」
訪談是 lean Ethereum 系列的最後一集。它關心的不只是某個密碼學原語是否正確,而是從 RISC-V、zkVM、電路、編譯器到證明系統的連接處。每一層都可能把上一層「看似正確」的結果,轉換成下一層不再等價的實作。
因此,目標不是替每個元件貼上一個「已驗證」標籤,而是逐步縮小元件間的未說明空隙。例如,一段程式被編譯後,是否仍維持原先的語意?一個電路是否正確表達要驗證的計算?一個證明系統接受後,究竟能推出什麼?
Hicks 區分了證明助手與自動求解器的工作方式。像 Lean 的系統讓研究者把定義、引理與推導留成可檢查的文本,適合建立長期可被重讀、修改與組合的知識。自動求解器則能在特定形式下快速找出滿足條件或反例,適合把一些子問題交給自動化處理。
兩者不是二選一。難題在於知道什麼要被人明確表達、什麼可交給工具搜尋,以及工具成功後留下的產物能否被另一個檢查器驗證。這關係到未來維護:當編譯器、曲線或協定版本改變,團隊能否知道哪個假設失效,而不是只得到一串過期的「通過」。
訪談沒有把正式驗證說成一次完成整個 Ethereum 或整個 ZK 堆疊的工程。它描述的是長期工作:選定一段重要邊界,定義它,證明它,再把經驗帶到下一段。證明範圍、成本與維護責任都需要明確寫下來,否則「形式化」也可能只是新的宣傳詞。
對使用者和協定設計者,這帶來一個較實際的閱讀方式:不要只問某專案是否用了 Lean 或 ZK。更應問它究竟證明了哪個性質、前提是什麼、實作與規格的距離還有多遠,以及遇到升級或例外時誰負責重新檢查。
正式驗證不是替系統加上一張「不會出錯」的貼紙,
而是把最不能含糊的主張,
寫成機器也必須逐步核對的證明。
選完之後,分享你的觀點
Zero Knowledge Podcast Episode 396 保留 Alex Hicks 對 lean Ethereum、證明助手、zkVM 與正式驗證進度的完整討論。
閱讀完整文章 →