( C , ≤ ) ⇌ α γ ( A , ⊑ ) (C, \leq) \xrightleftharpoons[\alpha]{\gamma} (A, \sqsubseteq) (C,≤)γ
α(A,⊑)
定義如下:
對于給定的兩個偏序集 ( C , ≤ ) (C, \leq) (C,≤) 和 ( A , ⊑ ) (A, \sqsubseteq) (A,⊑)( C C C 是 Concrete, A A A 是 Abstract),如果存在函數對 α : C → A \alpha:C \rightarrow A α:C→A 和 γ : A → C \gamma:A \rightarrow C γ:A→C 滿足如下性質的話,那麼我們認為這個函數對 ( α , γ ) (\alpha, \gamma) (α,γ) 是具體域 C C C 和抽象域 A A A 之間的 伽羅瓦連接配接。
∀ a ∈ A , c ∈ C : α ( c ) ⊑ a ⇔ c ≤ γ ( a ) \forall a \in A, c \in C : \alpha(c) \sqsubseteq a \Leftrightarrow c \leq \gamma(a) ∀a∈A,c∈C:α(c)⊑a⇔c≤γ(a)
該性質可以如此了解,假設把具體世界裡的一個元素 c c c 抽象化之後得到 α ( c ) \alpha(c) α(c)。 α ( c ) \alpha(c) α(c) 比抽象域裡另一進制素 a a a 要小,當且僅當将抽象元素 a a a 映射回具體世界裡面得到 γ ( a ) \gamma(a) γ(a) 時, c c c 應比 γ ( a ) \gamma(a) γ(a) 要小。這裡所說的 “小”,對應的是一個序關系。
I = def ( Z ∪ { − ∞ } ) × ( Z ∪ { + ∞ } ) I \stackrel{\text { def }}{=}(\mathbb{Z} \cup\{-\infty\}) \times(\mathbb{Z} \cup\{+\infty\}) I= def (Z∪{−∞})×(Z∪{+∞})
接下來我們來看 α \alpha α 和 γ \gamma γ 怎麼定義。對于具體域上的一個元素,這個元素肯定是這個幂集裡面的一個元素,即整數集合 Z \mathcal{Z} Z 的一個子集,我們把這個整數子集記作 X X X,那麼 α ( X ) \alpha(X) α(X) 會把它映射成一個區間,取這個集合 X X X 裡面最小的整數值作為區間的下界,最大的整數值作為區間的上界,這就是抽象化函數 α \alpha α 的定義。
α ( X ) = def [ min X , max X ] \alpha(X) \stackrel{\text { def }}{=}[\min X, \max X] α(X)= def [minX,maxX]
同樣的反過來,如果給定一個抽象元素,比如說一個區間 [ a , b ] [a,b] [a,b],我們怎麼把它映射回具體域的元素(即一個集合)呢? 這個整數集合會包含所有大于等于 a a a 且小于等于 b b b 的整數。
γ ( [ a , b ] ) = def { x ∈ Z ∣ a ≤ x ≤ b } \gamma([a, b]) \stackrel{\text { def }}{=}\{x \in \mathbb{Z} \mid a \leq x \leq b\} γ([a,b])= def {x∈Z∣a≤x≤b}
這方面工作的主要技術思想是,我們把原來采用的傳統線性不等式,變拓展成了帶區間系數的線性不等式,或者把原來隻關注 x x x, y y y 這些變量間關系拓展為關注 x x x、 ∣ x ∣ |x| ∣x∣、 y y y、 ∣ y ∣ |y| ∣y∣ 之間的關系,即我們利用這種絕對值函數來描述一些非凸的程式行為。
舉個栗子
舉個簡單的例子來講,傳統八邊形抽象域域元素采用的限制形式是 ± x ± y ≤ c \pm x \pm y \leq c ±x±y≤c,即它隻能描述兩個變量 x x x 和 y y y 之間的這種受限形式關系,其中變量系數隻能是 + 1 +1 +1, − 1 -1 −1 或者 0 0 0。那麼,我們可以對它簡單做一些擴充,比如考慮允許其中一個變量帶絕對值的情形,還可以進一步考慮允許兩個變量都帶絕對值的情形。按照這種方式擴充之後,就隻會存在下面所列的這幾種可能的限制表示:
八邊形限制: ± x ± y ≤ a \pm x \pm y \le a ±x±y≤a
僅含一個變量的絕對值: − ∣ x ∣ ± y ≤ b , ± x − ∣ y ∣ ≤ c -|x|\pm y \le b,\pm x - |y| \le c −∣x∣±y≤b,±x−∣y∣≤c
含兩變量的絕對值: − ∣ x ∣ − ∣ y ∣ ≤ d -|x|-|y|\le d −∣x∣−∣y∣≤d
另一方面,基于數值程式分析,我們可以開展一些應用分析。除了缺陷檢測,我們可以基于數值程式分析來分析程式資源的使用量上界(類似于 WCET 分析)。此外,除了傳統的程式(如 C 程式),深度學習相關程式代碼也包含大量的數值運算,也可能出現一些數值缺陷,那麼怎麼用抽象解釋來檢測這一類程式的缺陷呢?除了數值不變式,這類程式還涉及到一些新的結構,如張量,這就需要一些新的抽象技術。
基于抽象解釋的數值不變式生成
數值抽象域的設計
數值程式分析
結合數值抽象域與SMT的塊級程式分析
軟體中資源使用量上界分析
神經網絡架構中的數值缺陷檢測
相關論文推薦
數值程式分析:
Tengbin Wang, Liqian Chen, Taoqing Chen, Guangsheng Fan, Ji Wang. Making Rigorous Linear Programming Practical for Program Analysis. In CP 2021.
Banghu Yin, Liqian Chen, Jiangchao Liu, Ji Wang. Hierarchical Analysis of Loops With Relaxed Abstract Transformers. IEEE Transactions on Reliability. 2020.
數值程式驗證:
Pengfei Yang, Jianlin Li, Jiangchao Liu, Cheng-Chao Huang, Renjue Li, Liqian Chen, Xiaowei Huang, Lijun Zhang. Enhancing Robustness Verification for Deep Neural Networks via Symbolic Propagation. Formal Aspects of Computing, 2021.
Banghu Yin, Liqian Chen, Jiangchao Liu, Ji Wang, Patrick Cousot. Verifying Numerical Programs via Iterative Abstract Testing. In SAS 2019.
Jiangchao Liu, Liqian Chen and Xavier Rival. Automatic Verification of Embedded System Code Manipulating Dynamic Structures Stored in Contiguous Regions. IEEE TCAD, 2018.
參考
P. Cousot and R. Cousot. Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints. In Conference Record of the Fourth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 238–252, Los Angeles, California, 1977. ACM Press, New York, NY. ↩︎
Jiahong Jiang, Liqian Chen, Xueguang Wu and Ji Wang.Block-wise abstract interpretation by combining abstract domains with SMT. In VMCAI 2017. ↩︎
Program Analysis via Efficient Symbolic Abstraction. Peisen Yao, Qingkai Shi, Heqing Huang, and Charles Zhang. The 36th ACM SIGPLAN Conference on Objected Oriented Programming, Systems, Languages, and Applications, OOPSLA 2021. ↩︎
Guangsheng Fan, Taoqing Chen, Banghu Yin, Liqian Chen, Tengbin Wang, Ji Wang. Static Bound Analysis of Dynamically Allocated Resources for C Programs. In ISSRE 2021. ↩︎
Yuhao Zhang, Luyao Ren, Liqian Chen, Yingfei Xiong, Shing-Chi Cheung, Tao Xie. Detecting Numerical Bugs in Neural Network Architectures. In FSE 2020. (ACM SIGSOFT Distinguished Paper Award). ↩︎