Software Verification 自學路線
這裡是 formace-lab 2026 暑訓 Software Verification 主題的自學教材。三篇指定讀物都是研究論文,這個站的工作是把它們拆成修過計概與線代的大一生讀得懂的東西。
三篇不是平行的,是一條線
大部分人拿到三篇論文會當成三份作業,各讀各的。實際上它們是同一個故事的三段:
你需要先會什麼
只需要兩樣,而且都是大一課程:
| 你已經有的 | 會用來理解什麼 |
|---|---|
| 計算機概論 —— 讀得懂一小段 C | 程式的執行路徑、control-flow graph |
| 線性代數 —— 子空間、投影、特徵向量 | abstract interpretation 的整套骨架 |
線代這條橋比想像中結實。abstract interpretation 裡幾乎每個概念,在線代裡都有對應:
| 論文裡的東西 | 線代裡你已經會的 | |
|---|---|---|
| lattice 的 $\sqsubseteq$ | 子空間的 $\subseteq$ | 可以用 |
| join $\sqcup$ | $\mathrm{span}(U \cup V)$ | 可以用 |
| abstraction(丟掉資訊、留下你關心的) | 投影到子空間 | 可以用,但沒有內積、沒有「最近的逼近」 |
| fixpoint($F(x) = x$) | ~~特徵向量($Ax = \lambda x$)~~ | 這階是斷的 |
最後那一列要特別小心。 特徵向量允許縮放——$Ax = 3x$ 也算,但 $3x \ne x$,它根本不是不動點。 真的需要線代錨點的話用投影矩陣的冪等性 $P^2 = P$:投影兩次跟投影一次一樣,那才是不動點。 教材各篇的第 0 節會再講一次,因為這個誤會會一路影響到 SV 2、SV 3。
邏輯、SAT、Hoare logic、CEGAR 這些沒修過的東西,會在各篇的第 0 節從頭講起——不會叫你去讀別的東西再回來。
怎麼用這個站
側欄每個單元底下有三份材料,用途不同:
| 材料 | 什麼時候用 |
|---|---|
| 投影片 | 想先掃過全貌,或討論時邊看邊講。開啟時是講義檢視,按 s 進播放模式 |
| 補充教材 | 真的要讀懂的時候。內容自成一體,中間夾一題要你自己動手算的引導式練習 |
| 程式作業 | 把概念拿去真的跑一次。每個指令都實測過,輸出就是你會看到的 |
讀完每一節會有一兩張閃卡當場自測,全部的卡也可以在複習頁混合抽。翻卡時系統會先要你按「我想好了」才顯示答案——這一步不能省,不然大腦會偷懶,看到答案覺得「喔我知道」,其實根本沒回想過。
程式作業那一份特別值得做完。 CPAchecker 跑完會在 output/ 留下 cfa.dot、ARG.dot、abstractions.txt——那些正好是教材裡 CFA、ARG、predicate abstraction 這幾個詞的實體。跑一次,名詞就不再只是定義。
進度存在瀏覽器裡,關掉再開會接續,不會歸零。右下角可以切換配色。
三篇讀完之後
卡片可以在複習頁跨三篇混合抽,系統會照你的自評安排下次出現的時間。想檢定自己的話那裡也有測驗模式:隨機抽 10 題、計時、算分,而且不影響複習進度。
授權與出處
站上只有自己寫的解讀與練習,不放論文全文——ACM 與 Springer 的版權不允許我們重新散布。
但取得原文很方便:教材裡每一個 p.NNN 都直接連到論文那一頁,連的是作者或機構自己公開的版本(SV 1 在 McMillan 的個人頁,SV 2、SV 3 在 sosy-lab)。三份的分頁都逐頁核對過與正式版一致,所以頁碼指得準。頁首另外有 DOI,校內網路可直接下載。
這樣安排是為了讓查證便宜:看到任何一句你覺得可疑的話,點旁邊的頁碼就能對原文。 這份教材的初稿被逐頁查核時抓出過八個錯誤,全部都在「我對讀到的東西下的詮釋」那一層——頁碼都是對的。所以請把那些連結當成邀請。