Who Watches the Watchers: Toward Provably-correct Decision Diagram Code
Yousra Lembachar, Ryan Rusich, Iulian Neamtiu, Gianfranco Ciardo
University of California, Riverside
1 / 18
Who Watches the Watchers: Toward Provably-correct Decision Diagram - - PowerPoint PPT Presentation
Who Watches the Watchers: Toward Provably-correct Decision Diagram Code Yousra Lembachar , Ryan Rusich, Iulian Neamtiu, Gianfranco Ciardo University of California, Riverside 1 / 18 Toward a Completely Verified Software Toolchain 2 / 18 Toward
1 / 18
2 / 18
2 / 18
2 / 18
2 / 18
2 / 18
2 / 18
◮ A calculus for reasoning about decision diagram library and
◮ Provides a sound type system with operational semantics ◮ Enables compile-time detection of dynamic errors ◮ Enforces correct structural properties and semantics for
3 / 18
1 1 1 1 h = x.y 1 1 1 j = x+y 1 y x
4 / 18
1 1 1 1 x y 1 1 1 1 h = x.y j = x+y
4 / 18
1 1 1 1 x y h = x.y 1 1 1 j = x+y 1 z
4 / 18
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 v1 v2 v3 v4 1 1 1 1 1 1 1
5 / 18
{(01,01) (00,11) (01,10) (01,11) (10,01) (11,00) (11,01) (10,11) (11,10) (11,11)}
6 / 18
6 / 18
7 / 18
8 / 18
1 0 )
9 / 18
1 0 )
9 / 18
1 0 )
9 / 18
1 0 )
9 / 18
1 0 )
9 / 18
1 0 )
9 / 18
10 / 18
10 / 18
10 / 18
11 / 18
Bnode(3,id7,x2,ref t4,ref t5) Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
Bnode(3,id7,x2,ref t4,ref t5)
Bnode(2,id6,x1 ref t2,ref t3) Bnode(2,id5,x1,ref t2,ref t1) Bnode(1,id4,x3,ref 0 ,ref 0 ) Bnode(1,id3,x3,ref 1 ,ref 0 ) Bnode(1,id2,x3,ref 0 ,ref 1 )
12 / 18
13 / 18
13 / 18
14 / 18
14 / 18
15 / 18
15 / 18
16 / 18
◮
◮
◮
17 / 18
18 / 18