420 likes | 534 Views
Spring 2016 Program Analysis and Verification Lecture 13: Numerical Abstractions. Roman Manevich Ben-Gurion University. Tentative syllabus. Previously. Composing abstract domains (and GCs) Widening and narrowing Interval domain. Agenda. Abstractions for properties of numeric variables
E N D
Spring 2016Program Analysis and Verification Lecture 13: Numerical Abstractions Roman Manevich Ben-Gurion University
Previously Composing abstract domains (and GCs) Widening and narrowing Interval domain
Agenda • Abstractions for properties of numeric variables • Classification: • Relational vs. non-relational • Equalities vs. non-equalities • Zones
Numerical Abstractions By Quilbert (own work, partially derived from en:Image:Poly.pov) [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons
Overview • Goal: infer numeric properties of program variables (integers, floating point) • Applications • Detect division by zero, overflow, out-of-bound array access • Help non-numerical domains • Classification • Non-relational • (Weakly-)relational • Equalities / Inequalities • Linear / non-linear • Exotic
Non-relational abstractions • Abstract each variable individually • Constant propagation [Kildall’73] • Intervals (Box) • Covered in previous lecture • Sign • Parity (congruences) • Zones
Sign abstraction for variable x neg pos 0 • Concrete lattice: C = (2State, , , , , State) • Sign = {, neg, 0, pos, } • GCC,Sign=(C, , , Sign) • Concretization • () = • (neg) = • (0) = • (pos) = • () = • Abstraction • ({17}) = • ({17, 0}) = • ({-1, 1}) = • How can we represent 0?
Transformer x:=y*z Is it complete?
Transformer x:=y*z Check at home: Abstract transformer is complete
Transformer x:=y+z Is it complete?
Transformer x:=y+z Check at home: Abstract transformer is not complete
Parity abstraction for variable x E O Concrete lattice: C = (2State, , , , , State) Parity = {, E, O, } GCC,Parity=(C, , , Parity) () = ? (E) = ? (O) = ? () = ?
Boxes (intervals) y 6 5 y [3,6] 4 3 2 1 0 1 2 3 4 x • x [1,4]
Non-relational abstractions • Cannot prove properties that hold simultaneous for several variables • x = 2*y • x ≤ y
The abstraction • Abstract domain for variables x1,…,xn is the Cartesian product of a sub-domain for one variable D[x] • D[x1] … D[xn] • Need to implement join, meet, widening, narrowing just for sub-domain • Usually a non-relational is associated with a Galois Insertion • No reduction required • The Cartesian product is a reduced product
Sound assignment transformers Let remove(S, x) be the operation that removes the factoid associated with x from S Let factoid(S, x) be the operation that returns the factoid associated with x in S x := c# S = remove(S, x) ({[xc]}) x := y# S = remove(S, x) {factoid(S, y)[x/y]} x := y+c# S = remove(S, x) {factoid(S, y)[x/y] + c} x := y+z# S = remove(S, x) {factoid(S, y)[x/y] + factoid(S, z)[x/z]} x := y*c# S = remove(S, x) {factoid(S, y)[x/y] * c} x := y*z# S = remove(S, x) {factoid(S, y)[x/y] * factoid(S, z)[x/z]}
Sound assumetransformers assumex=c# S = S ({[xc]}) assumex<c# S = … assumex=y# S = S {factoid(S, y)[x/y]} {factoid(S, x)[y/x]} assumexc# S = if S ({[xc]}) then else S
Relational abstractions • Represent correlations between all program variables • Polyhedra • Linear equalities • When correlations exist only between few variables (usually 2) we say that the abstraction is weakly-relational • Linear relations example (discussed in class) • Zone abstraction (next) • Octagons • Two-variable polyhedra • Usually abstraction is defined as the reduced product of the abstract domain for any pair of variables
Zone abstraction [Mine] y 6 x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 5 4 3 2 1 0 1 2 3 4 x Maintain bounded differences between a pair of program variables (useful for tracking array accesses) Abstract state is a conjunction of linear inequalities of the form x-yc
Difference bound matrices x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 Add a special V0 variable for the number 0 Represent non-existent relations between variables by + entries Convenient for defining the partial order between two abstract elements… =?
Ordering DBMs x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 M1 = x ≤ 5 −x ≤ −1 y ≤ 3 x − y ≤ 1 M2 = How should we order M1 M2?
Joining DBMs x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 M1 = x ≤ 2 −x ≤ −1 y ≤ 0 x − y ≤ 1 M2 = How should we join M1 M2?
Widening DBMs x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 M1 = x ≤ 5 −x ≤ −1 y ≤ 3 x − y ≤ 1 M2 = How should we widen M1M2?
Potential graph x ≤ 4 −x ≤ −1 y ≤ 3 −y ≤ −1 x − y ≤ 1 V0 3 -1 -1 3 x y 1 Can we tell whether a systemof constraints is satisfiable? Can you define a semantic reduction? A vertex per variable A directed edge with the weight of the inequality Enables computing semantic reduction by shortest-path algorithms
Semantic reduction for zones Apply the following rule repeatedlyx - y ≤ c y - z ≤ d x - z ≤ e x - z ≤ min{e, c+d} When should we stop? Theorem 3.3.4. Best abstraction of potential sets and zones m∗ = (Pot ◦ Pot)(m)
Zones assignment transformers remove(S, x): removes the x-factoids from S factoid(S, x): returns all x-factoids in S x := c# S = remove(S, x) …? x := y+c# S = remove(S, x) …? x := -y# S = remove(S, x) …? x := y-z# S = remove(S, x) …? x := y+z# S = …?
Zones assignment transformers remove(S, x): removes the x-factoids from S factoid(S, x): returns all x-factoids in S x := c# S = remove(S, x) {x-V0≤c, V0-x≤c} x := y+c# S = remove(S, x) {x-y≤c, y-x≤-c} x := -y# S = remove(S, x) {x-V0≤c |V0-y≤c} {V0-x≤-c | y-V0≤c} x := y-z# S = remove(S, x) {x≤c} wherec=min{c1-c2 | y-w≤c1, z-w≤c2} x := y+z# S = x := y-t#(t := -z# S)
Octagon abstraction [Mine-01] • captures relationships common in programs (array access) Abstract state is an intersection of linear inequalities of the form x yc
Some inequality-basedrelational domains policy iteration
What is the polyhedron abstraction? y x How do we abstract a circle?
Equality-based domains • Simple congruences [Granger’89]: y=a mod k • Linear equalities [Karr’76]: a1*x1+…+ak*xk = c • Polynomial equalities:a1*x1d1*…*xkdk + b1*y1z1*…*ykzk+ … = c • Some good results are obtainable whend1+…+dk < n for some small n
Exercise: 2-linear relations Infer linear relations between pairs of variables: y=a*x+b Handout