Program verification via Machine learning
Aditya V. Nori Programming Languages & Tools group Microsoft Research India
Joint work with Rahul Sharma, Alex Aiken (Stanford University)
Machine learning Aditya V. Nori Programming Languages & Tools - - PowerPoint PPT Presentation
Program verification via Machine learning Aditya V. Nori Programming Languages & Tools group Microsoft Research India Joint work with Rahul Sharma, Alex Aiken (Stanford University) Program verification 1: x = y = 0; 1: gcd(int x, int
Aditya V. Nori Programming Languages & Tools group Microsoft Research India
Joint work with Rahul Sharma, Alex Aiken (Stanford University)
1: x = y = 0; 2: while (*) 3: x++; y++; 4: while (x != 0) 5: x--; y--; 6: assert (y == 0); 1: gcd(int x, int y) 2: { 3: assume(x>0 && y>0); 4: while (x !=y ) { 5: if (x > y) x = x-y; 6: if (y > x) y = y-x; 7: } 8: return x; 9 }
Qu Questi tion
Is the assertion satisfied for all possible inputs?
Qu Questi tion
Does gcd terminate for all inputs π¦, π§?
quality
for regression or fuzz testing
correctness?
infer a candidate invariant (use ML techniques)
sound program analysis techniques
and repeat guess+check
invariants
programs and existing ML algorithms for analysis
program
Guess Check
π π’
ο±Interpolants as Classifiers. Sharma, N, Aiken, Computer-Aided Verification (CAV 2012) ο±Program Verification as Learning Geometric Concepts. Sharma, Gupta, Hariharan, Aiken, N. Submitted
ο±A Data Driven Approach for Algebraic Loop Invariants. Sharma, Gupta, Hariharan, Aiken, N. European Symposium on Programming (ESOP 2012)
ο±Termination proofs from tests. N, Sharma. submitted
formula π½ satisfying:
x y
examples from βββ examples
computing invariants
Unroll the loops
invariants)
Get positive and negative examples
generalizes to test data
1: x = y = 0; 2: while (*) 3: x++; y++; 4: while (x != 0) 5: x--; y--; 6: assert (y == 0);
1: x = y = 0; 2: while (*) 3: x++; y++; 4: while (x != 0) 5: x--; y--; 6: assert (y == 0);
π§1 + 1, π¦ = π¦1 β§ π§ = π§1)
π¦ β§ π§2 = π§) β§ π¦2 = 0 β§ π§2 β 0
π΅ πΆ
x y (0,0) + + (1,1)
ο‘ π΅ β‘ π¦1 = 0 β§ π§1 = 0 β§ ππ’π(π, π¦ = π¦1 + 1 β§
π§ = π§1 + 1, π¦ = π¦1 β§ π§ = π§1)
ο‘ πΆ β‘ ππ’π(π¦ = 0, π¦2= π¦ β 1 β§ π§2 = π§ β
1, π¦2 = π¦ β§ π§2 = π§) β§ π¦2 = 0 β§ π§2 β 0
ο‘ π½1 β‘ 2π§ β€ 2π¦ + 1
x y (0,0) + + (1,1)
Interpolant!
ο‘ π΅ β‘ π¦1 = 0 β§ π§1 = 0 β§ ππ’π(π, π¦ = π¦1 + 1 β§
π§ = π§1 + 1, π¦ = π¦1 β§ π§ = π§1)
ο‘ πΆ β‘ ππ’π(π¦ = 0, π¦2= π¦ β 1 β§ π§2 = π§ β
1, π¦2 = π¦ β§ π§2 = π§) β§ π¦2 = 0 β§ π§2 β 0
ο‘ π½2 β‘ 2π§ β€ 2π¦ + 1 β§ 2π§ β₯ 2π¦ β 1
π½ππ’ππ ππππππ’(π΅, πΆ) (π+, πβ) = π½πππ’(π΅, πΆ) while(true) { πΌ = ππππ½(π+, πβ) Find candidate interpolant if (ππ΅π π΅ β§ Β¬πΌ ) π΅ β π½ Add π‘ to π+and continue; if (ππ΅π πΆ β§ Β¬πΌ ) π½ β§ πΆ =β₯ Add π‘ to πβand continue; break; Exit if interpolant found } return πΌ; Theorem: π½ππ’ππ ππππππ’(π΅, πΆ) terminates only if
1: gcd(int x, int y) 2: { 3: assume(x>0 && y>0); 4: while (x !=y ) { 5: if (x > y) x = x-y; 6: if (y > x) y = y-x; 7: } 8: return x; 9 }
π¦, π§ = { 1,2 , 2,1 , 1,3 , 3,1 }
1 π π 1 1 2 1 2 1 1 1 3 1 1 3 1 3 1 1 3 1 , C = π 1 1 1 2 1 2
1: gcd(int x, int y) 2: { 3: assume(x>0 && y>0); 4: // instrumented code 5: a = x; b = y; c = 0; 6: while (x !=y ) { 7: // instrumented code 8: c = c+1; 9: writeLog(a, b, c, x, y); 10: if (x > y) x = x-y; 11: if (y > x) y = y-x; 12: } 13: return x; 14: }
π‘. π’. π΅π₯ β₯ π·
π β€ π + π β π¦ β π§ β§ π¦ > 0 β§ π§ > 0
with integer coefficients
discovering disjunctive loop bounds
1: gcd(int x, int y) 2: { 3: assume(x>0 && y>0); 4: a = x; b = y; c = 0; 5: while (x !=y ) { 6: // annotation 7: free_invariant(c <= a+b-x-y); 8: // annotation 9: assert(c <= a+b-2); 10: if (x > y) x = x-y; 11: if (y > x) y = y-x; 12: } 13: return x; 14: }
in program verification
learning for scalable proofs
a Driven ven Program ram An Analys lysis is