SV 1 — Abstractions from Proofs

原文:POPL 2004 · doi:10.1145/982962.964021

這頁目前是骨架。 各節內容由 #3(前置補完)與 #4(論文本體)填上,手算題見 #5。現在放的是節標題與大綱,用來確認版面。

0 你需要先會的東西

這一節從零講起,不會叫你去讀別的資料再回來。會鋪的東西:

先看一段程式:

int x = 1;
int y = x + 1;
if (y < 0) { ERROR; }   // 到得了嗎?

你一眼就看得出 ERROR 到不了,因為 y 一定是 2。那電腦要怎麼自動看出來?這一問就是整篇 POPL'04 的入口。

1 這篇要解決的問題

三句話講完問題本身。待 #4。

2 在這之前人們怎麼做

CEGAR 的迴圈長什麼樣,以及它的痛點:predicate 要從哪裡來。前人的做法會讓 predicate 集合爆炸,驗證器跑不動。待 #4。

3 關鍵洞察

用 Craig interpolation 從 infeasible path 的「無解證明」裡,把 predicate 直接抽出來;而且是 per-location 的——不同的程式位置用不同的 predicate 集合,不是全域共用一大包。

這個洞察為什麼有效,跟 interpolant 的一個性質有關:它只會用到前後兩段公式共同出現的變數。待 #4。

4 手算一遍

這一節你要自己動手。給定一條走不通的路徑,一步一步算出它的 interpolant:

$$x_1 = 1 \;\wedge\; y_1 = x_1 + 1 \;\wedge\; y_1 < 0$$

五個步驟,答錯會即時提示,答對才解鎖下一步。待 #5。

5 對後續的影響

這篇的實作是 BLAST。更重要的是,它後來被收進 SV 2 的 CPA 框架,成為其中一種 configuration——這條線在 SV 3 會收束。待 #4。

6 讀原文時的導覽

哪幾節必讀、哪幾節可以先跳過、台大校內網路怎麼取得。待 #4。