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.dotARG.dotabstractions.txt——那些正好是教材裡 CFA、ARG、predicate abstraction 這幾個詞的實體。跑一次,名詞就不再只是定義。

進度存在瀏覽器裡,關掉再開會接續,不會歸零。右下角可以切換配色。

三篇讀完之後

卡片可以在複習頁跨三篇混合抽,系統會照你的自評安排下次出現的時間。想檢定自己的話那裡也有測驗模式:隨機抽 10 題、計時、算分,而且不影響複習進度。

授權與出處

站上只有自己寫的解讀與練習,不放論文全文——ACM 與 Springer 的版權不允許我們重新散布。

但取得原文很方便:教材裡每一個 p.NNN 都直接連到論文那一頁,連的是作者或機構自己公開的版本(SV 1 在 McMillan 的個人頁,SV 2、SV 3 在 sosy-lab)。三份的分頁都逐頁核對過與正式版一致,所以頁碼指得準。頁首另外有 DOI,校內網路可直接下載。

這樣安排是為了讓查證便宜:看到任何一句你覺得可疑的話,點旁邊的頁碼就能對原文。 這份教材的初稿被逐頁查核時抓出過八個錯誤,全部都在「我對讀到的東西下的詮釋」那一層——頁碼都是對的。所以請把那些連結當成邀請。