Software Verification 自學路線
這裡是 formace-lab 2026 暑訓 Software Verification 主題的自學教材。三篇指定讀物都是研究論文,這個站的工作是把它們拆成修過計概與線代的大一生讀得懂的東西。
三篇不是平行的,是一條線
大部分人拿到三篇論文會當成三份作業,各讀各的。實際上它們是同一個故事的三段:
SV 1 (POPL'04) SV 2 (CAV'07) SV 3 (JAR'18)
predicate 怎麼來? → 怎麼把所有分析統一? → 統一後能公平比較什麼?
Craig interpolation CPA = (D, ⇝, merge, stop) BMC / k-induction / IMPACT
└───────────── 是 CPA 的一個 configuration ─────────────┘
SV 1 解決一個很具體的技術問題,SV 2 給出一個統一框架,SV 3 則回頭證明「SV 1 只是這個框架的一種設定」。看懂最後那條連線的當下,三份作業才變成一條線。
這張圖之後會換成可點擊的互動版本(issue #12)。
你需要先會什麼
只需要兩樣,而且都是大一課程:
| 你已經有的 | 會用來理解什麼 |
|---|---|
| 計算機概論 —— 讀得懂一小段 C | 程式的執行路徑、control-flow graph |
| 線性代數 —— 子空間、投影、特徵向量 | abstract interpretation 的整套骨架 |
線代這條橋比想像中結實。abstract interpretation 裡幾乎每個概念,在線代裡都有對應:
| 論文裡的東西 | 線代裡你已經會的 |
|---|---|
| lattice 的 $\sqsubseteq$ | 子空間的 $\subseteq$ |
| join $\sqcup$ | $\mathrm{span}(U \cup V)$ |
| fixpoint($F(x) = x$) | 特徵向量($Ax = \lambda x$) |
| abstraction(丟掉資訊、留下你關心的) | 投影到子空間 |
邏輯、SAT、Hoare logic、CEGAR 這些沒修過的東西,會在各篇的第 0 節從頭講起——不會叫你去讀別的東西再回來。
怎麼用這個站
每篇教材固定七節:先補前置知識,再讀論文本體,中間夾一題要你自己動手算的引導式練習。
讀完每一節會有一兩張閃卡當場自測,全部的卡也可以在複習頁混合抽。翻卡時系統會先要你按「我想好了」才顯示答案——這一步不能省,不然大腦會偷懶,看到答案覺得「喔我知道」,其實根本沒回想過。
進度存在瀏覽器裡,關掉再開會接續,不會歸零。
授權與出處
站上只有自己寫的解讀與練習,不放論文全文。每一節都標了對應的章節與 DOI,方便回頭查證我的簡化有沒有失真。三篇原文用台大校內網路都下載得到。