*/ err = nondet(); // bind(fd, addr->ai_addr, addr->ai_addrlen); if (err < 0) PostgreSQL StreamServer { /* ereport(LOG, */ /* (errcode_for_socket_access(), */ /* /\* translator: %s is IPv4, IPv6, or Unix *\/ */ int StreamServerPort( int family, ...) /* errmsg("could not bind %s socket: %m", */ /* familyDesc), */ /* (IS_AF_UNIX(addr_ai_family)) ? */ Proving this statically is challenging. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, remove socket file \"%s\" and retry.", */ /* (int) portNumber, sock_path) : */ Reason about termination. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, wait a few seconds and retry.", */ /* (int) portNumber))); */ Reason about reachability. closesocket(fd); continue; } #ifdef HAVE_UNIX_SOCKETS if (addr_ai_family == AF_UNIX) { � � if (nondet() != STATUS_OK) { closesocket(fd); break; } } #endif /* * Select appropriate accept-queue length limit. PG_SOMAXCONN is * only intended to provide a clamp on the request on platforms * where an overly large request provokes a kernel error (are * there any?). */ maxconn = MaxBackends * 2; if (maxconn > PG_SOMAXCONN) maxconn = PG_SOMAXCONN; err = listen(fd, maxconn); if (err < 0) { timeout Previous technique closesocket(fd); continue; } ListenSocket_OF_listen_index = fd; ( G ¬ error ) ⇒ F ( added>0 ∧ F ret=OK ) added++; } //freeaddrinfo_all(hint.ai_family, addrs); Monday, June 25, 12
*/ err = nondet(); // bind(fd, addr->ai_addr, addr->ai_addrlen); if (err < 0) PostgreSQL StreamServer { /* ereport(LOG, */ /* (errcode_for_socket_access(), */ /* /\* translator: %s is IPv4, IPv6, or Unix *\/ */ int StreamServerPort( int family, ...) /* errmsg("could not bind %s socket: %m", */ /* familyDesc), */ /* (IS_AF_UNIX(addr_ai_family)) ? */ Proving this statically is challenging. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, remove socket file \"%s\" and retry.", */ /* (int) portNumber, sock_path) : */ Reason about termination. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, wait a few seconds and retry.", */ /* (int) portNumber))); */ Reason about reachability. closesocket(fd); continue; } #ifdef HAVE_UNIX_SOCKETS if (addr_ai_family == AF_UNIX) { � � if (nondet() != STATUS_OK) { closesocket(fd); break; Our work } } #endif /* * Select appropriate accept-queue length limit. PG_SOMAXCONN is * only intended to provide a clamp on the request on platforms * where an overly large request provokes a kernel error (are * there any?). */ maxconn = MaxBackends * 2; if (maxconn > PG_SOMAXCONN) maxconn = PG_SOMAXCONN; err = listen(fd, maxconn); if (err < 0) { timeout Previous technique closesocket(fd); continue; } ListenSocket_OF_listen_index = fd; ( G ¬ error ) ⇒ F ( added>0 ∧ F ret=OK ) added++; } //freeaddrinfo_all(hint.ai_family, addrs); Monday, June 25, 12
*/ err = nondet(); // bind(fd, addr->ai_addr, addr->ai_addrlen); if (err < 0) PostgreSQL StreamServer { /* ereport(LOG, */ /* (errcode_for_socket_access(), */ /* /\* translator: %s is IPv4, IPv6, or Unix *\/ */ int StreamServerPort( int family, ...) /* errmsg("could not bind %s socket: %m", */ /* familyDesc), */ /* (IS_AF_UNIX(addr_ai_family)) ? */ Proving this statically is challenging. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, remove socket file \"%s\" and retry.", */ /* (int) portNumber, sock_path) : */ Reason about termination. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, wait a few seconds and retry.", */ /* (int) portNumber))); */ Reason about reachability. closesocket(fd); continue; } #ifdef HAVE_UNIX_SOCKETS if (addr_ai_family == AF_UNIX) { � � if (nondet() != STATUS_OK) { closesocket(fd); ✔ break; Our work } } #endif /* * Select appropriate accept-queue length limit. PG_SOMAXCONN is * only intended to provide a clamp on the request on platforms * where an overly large request provokes a kernel error (are * there any?). */ maxconn = MaxBackends * 2; if (maxconn > PG_SOMAXCONN) maxconn = PG_SOMAXCONN; err = listen(fd, maxconn); if (err < 0) { timeout Previous technique closesocket(fd); continue; } ListenSocket_OF_listen_index = fd; ( G ¬ error ) ⇒ F ( added>0 ∧ F ret=OK ) added++; } //freeaddrinfo_all(hint.ai_family, addrs); Monday, June 25, 12
*/ err = nondet(); // bind(fd, addr->ai_addr, addr->ai_addrlen); if (err < 0) PostgreSQL StreamServer { /* ereport(LOG, */ /* (errcode_for_socket_access(), */ /* /\* translator: %s is IPv4, IPv6, or Unix *\/ */ int StreamServerPort( int family, ...) /* errmsg("could not bind %s socket: %m", */ /* familyDesc), */ /* (IS_AF_UNIX(addr_ai_family)) ? */ Proving this statically is challenging. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, remove socket file \"%s\" and retry.", */ /* (int) portNumber, sock_path) : */ Reason about termination. /* errhint("Is another postmaster already running on port %d?" */ /* " If not, wait a few seconds and retry.", */ /* (int) portNumber))); */ Reason about reachability. closesocket(fd); continue; } #ifdef HAVE_UNIX_SOCKETS if (addr_ai_family == AF_UNIX) { � � if (nondet() != STATUS_OK) 9.56 s { closesocket(fd); ✔ break; Our work } } #endif /* * Select appropriate accept-queue length limit. PG_SOMAXCONN is * only intended to provide a clamp on the request on platforms * where an overly large request provokes a kernel error (are * there any?). */ maxconn = MaxBackends * 2; if (maxconn > PG_SOMAXCONN) maxconn = PG_SOMAXCONN; err = listen(fd, maxconn); if (err < 0) { timeout Previous technique closesocket(fd); continue; } ListenSocket_OF_listen_index = fd; ( G ¬ error ) ⇒ F ( added>0 ∧ F ret=OK ) added++; } //freeaddrinfo_all(hint.ai_family, addrs); Monday, June 25, 12
Previous work CAV’11 Reduction P ⊢ φ ∀ CTL program analysis task (symbolic MC, AI) using Frontiers Monday, June 25, 12
Previous work These tools are good at finding the “right” abstraction CAV’11 Reduction P ⊢ φ ∀ CTL program analysis task (symbolic MC, AI) using Frontiers Monday, June 25, 12
Previous work These tools are good at finding the “right” abstraction POPL’11 CAV’11 Trace-based Reduction properties (eg. LTL) P ⊢ φ P ⊢ φ ∀ CTL LTL program synth decision analysis task predicates (symbolic MC, AI) using Frontiers Monday, June 25, 12
Previous work prove trace-based with These tools are good iterated state-based at finding the “right” techniques abstraction POPL’11 CAV’11 Trace-based Reduction properties (eg. LTL) P ⊢ φ P ⊢ φ ∀ CTL LTL program synth decision analysis task predicates (symbolic MC, AI) using Frontiers Monday, June 25, 12
Previous work Traditional Program Property Time(s) Example from Sec. 2 AFAGp 2.32 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 Toy acq/rel AG(p ⇒ AFq) 103.48 Toy lin. arith. 1 p ⇒ AFq 126.86 Toy lin. arith. 2 p ⇒ AFq timeout PostgreSQL strsrv AG(p ⇒ AFAGq) timeout PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 PostgreSQL pgarch AFAGp 31.50 PostgreSQL dropbuf AGp timeout PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 Apache child AG(p ⇒ AGAFq) timeout Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 Windows frag. 1 AG(p ⇒ AFq) 901.81 Windows frag. 2 AFAGp 16.47 Windows frag. 2+bug AFAGp 26.15 Windows frag. 3 AFAGp 4.21 Windows frag. 4 AG(p ⇒ AFq) timeout Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 Windows frag. 5 AG(p ⇒ AFq) timeout Windows frag. 6 AFAGp 149.41 Windows frag. 6+bug AFAGp 6.06 Windows frag. 7 AGAFp timeout Windows frag. 8 FGp timeout Monday, June 25, 12
Previous work Traditional Our Approach Program Property Time(s) Time(s) Example from Sec. 2 AFAGp 2.32 1.98 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 27.94 Toy acq/rel AG(p ⇒ AFq) 103.48 14.18 Toy lin. arith. 1 p ⇒ AFq 126.86 34.51 Toy lin. arith. 2 p ⇒ AFq timeout 6.74 PostgreSQL strsrv AG(p ⇒ AFAGq) timeout 9.56 PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 47.16 PostgreSQL pgarch AFAGp 31.50 15.20 PostgreSQL dropbuf AGp timeout 1.14 PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 27.54 Apache child AG(p ⇒ AGAFq) timeout 197.41 Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 684.24 Windows frag. 1 AG(p ⇒ AFq) 901.81 539.00 Windows frag. 2 AFAGp 16.47 52.10 Windows frag. 2+bug AFAGp 26.15 30.37 Windows frag. 3 AFAGp 4.21 15.75 Windows frag. 4 AG(p ⇒ AFq) timeout 1,114.18 Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 100.68 Windows frag. 5 AG(p ⇒ AFq) timeout timeout Windows frag. 6 AFAGp 149.41 59.56 Windows frag. 6+bug AFAGp 6.06 22.12 Windows frag. 7 AGAFp timeout 55.77 Windows frag. 8 FGp timeout 5.24 Monday, June 25, 12
Previous work Traditional Our Approach Program Property Time(s) Time(s) Example from Sec. 2 AFAGp 2.32 1.98 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 27.94 Toy acq/rel AG(p ⇒ AFq) 103.48 14.18 Toy lin. arith. 1 p ⇒ AFq 126.86 34.51 Toy lin. arith. 2 p ⇒ AFq timeout 6.74 PostgreSQL strsrv AG(p ⇒ AFAGq) timeout 9.56 PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 47.16 PostgreSQL pgarch AFAGp 31.50 15.20 PostgreSQL dropbuf AGp timeout 1.14 PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 27.54 Apache child AG(p ⇒ AGAFq) timeout 197.41 Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 684.24 Windows frag. 1 AG(p ⇒ AFq) 901.81 539.00 Windows frag. 2 AFAGp 16.47 52.10 Windows frag. 2+bug AFAGp 26.15 30.37 Windows frag. 3 AFAGp 4.21 15.75 Windows frag. 4 AG(p ⇒ AFq) timeout 1,114.18 Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 100.68 Windows frag. 5 AG(p ⇒ AFq) timeout timeout Windows frag. 6 AFAGp 149.41 59.56 Windows frag. 6+bug AFAGp 6.06 22.12 Windows frag. 7 AGAFp timeout 55.77 Windows frag. 8 FGp timeout 5.24 Monday, June 25, 12
Previous work Traditional Our Approach Program Property Time(s) Time(s) Example from Sec. 2 AFAGp 2.32 1.98 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 27.94 Toy acq/rel AG(p ⇒ AFq) 103.48 14.18 Toy lin. arith. 1 p ⇒ AFq 126.86 34.51 Toy lin. arith. 2 p ⇒ AFq timeout 6.74 PostgreSQL strsrv AG(p ⇒ AFAGq) timeout 9.56 PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 47.16 PostgreSQL pgarch AFAGp 31.50 15.20 PostgreSQL dropbuf AGp timeout 1.14 PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 27.54 Apache child AG(p ⇒ AGAFq) timeout 197.41 Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 684.24 Windows frag. 1 AG(p ⇒ AFq) 901.81 539.00 Windows frag. 2 AFAGp 16.47 52.10 Windows frag. 2+bug AFAGp 26.15 30.37 Windows frag. 3 AFAGp 4.21 15.75 Windows frag. 4 AG(p ⇒ AFq) timeout 1,114.18 Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 100.68 Windows frag. 5 AG(p ⇒ AFq) timeout timeout Windows frag. 6 AFAGp 149.41 59.56 Windows frag. 6+bug AFAGp 6.06 22.12 Windows frag. 7 AGAFp timeout 55.77 POPL’11, CAV’11 Windows frag. 8 FGp timeout 5.24 Monday, June 25, 12
Previous work Traditional Our Approach Program Property Time(s) Time(s) Example from Sec. 2 AFAGp 2.32 1.98 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 27.94 Toy acq/rel AG(p ⇒ AFq) 103.48 14.18 Toy lin. arith. 1 p ⇒ AFq 126.86 34.51 Toy lin. arith. 2 p ⇒ AFq timeout 6.74 PostgreSQL strsrv AG(p ⇒ AFAGq) timeout 9.56 PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 47.16 PostgreSQL pgarch AFAGp 31.50 15.20 PostgreSQL dropbuf AGp timeout 1.14 PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 27.54 Apache child AG(p ⇒ AGAFq) timeout 197.41 Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 684.24 Windows frag. 1 AG(p ⇒ AFq) 901.81 539.00 Windows frag. 2 AFAGp 16.47 52.10 timeout Windows frag. 2+bug AFAGp 26.15 30.37 Windows frag. 3 AFAGp 4.21 15.75 Windows frag. 4 AG(p ⇒ AFq) timeout 1,114.18 Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 100.68 Windows frag. 5 AG(p ⇒ AFq) timeout timeout Windows frag. 6 AFAGp 149.41 59.56 Windows frag. 6+bug AFAGp 6.06 22.12 Windows frag. 7 AGAFp timeout 55.77 POPL’11, CAV’11 Windows frag. 8 FGp timeout 5.24 Monday, June 25, 12
Previous work all “A” properties Traditional Our Approach Program Property Time(s) Time(s) Example from Sec. 2 AFAGp 2.32 1.98 Example from Fig. 8 of [15] AG(p ⇒ AFq) 209.64 27.94 Toy acq/rel AG(p ⇒ AFq) 103.48 14.18 Toy lin. arith. 1 p ⇒ AFq 126.86 34.51 Toy lin. arith. 2 p ⇒ AFq timeout 6.74 PostgreSQL strsrv AG(p ⇒ AFAGq) timeout 9.56 PostgreSQL strsrv+bug AG(p ⇒ AFAGq) 87.31 47.16 PostgreSQL pgarch AFAGp 31.50 15.20 PostgreSQL dropbuf AGp timeout 1.14 PostgreSQL dropbuf AG(p ⇒ AFq) 53.99 27.54 Apache child AG(p ⇒ AGAFq) timeout 197.41 Apache child accept liveness AG(p ⇒ (AFa ∨ AFb)) 685.34 684.24 Windows frag. 1 AG(p ⇒ AFq) 901.81 539.00 Windows frag. 2 AFAGp 16.47 52.10 Windows frag. 2+bug AFAGp 26.15 30.37 Windows frag. 3 AFAGp 4.21 15.75 Windows frag. 4 AG(p ⇒ AFq) timeout 1,114.18 Windows frag. 4 (AFp) ∨ (AFq) 1,223.96 100.68 Windows frag. 5 AG(p ⇒ AFq) timeout timeout Windows frag. 6 AFAGp 149.41 59.56 Windows frag. 6+bug AFAGp 6.06 22.12 Windows frag. 7 AGAFp timeout 55.77 Windows frag. 8 FGp timeout 5.24 Monday, June 25, 12
all “A” properties AF p Across all paths, eventually reach p AG p Across all paths, p always holds Monday, June 25, 12
all “A” properties AF p Across all paths, eventually reach p Extend beyond the universal fragment, include existential properties . . . AG p Across all paths, p always holds Monday, June 25, 12
The behavior of software is often nondeterministic Initial states if (read(&buf)) { computeA(); read() else { computeB(); } ≤ 0 >0 Monday, June 25, 12
Modern software systems have elaborate control-flow. Initial states Monday, June 25, 12
... and infinite state spaces! Initial states . . . . . . . . . Monday, June 25, 12
Many important properties involve the branching behaviors of a program Initial states . . . Example: does there exist a way to reach a red state? EF red Monday, June 25, 12
Many important properties involve the branching behaviors of a program Initial states . . . Example: are you assured you will always reach a state from which point you can always be in a green state? AF (EG green) Monday, June 25, 12
Many important properties involve the branching behaviors of a program Initial states . . . Example: are you assured you will always reach a state from which point you can always be in a green state? AF (EG green) Monday, June 25, 12
branching Branching properties can be found in many temporal logics. CTL Computation Tree Logic [Clarke 1986] AFp Across all paths, eventually reach p EFp There is a path that eventually reaches p AGp Across all paths, p always holds EGp There is a path along which p always holds Monday, June 25, 12
branching Branching properties can be found in many temporal logics. CTL Computation Tree Logic [Clarke 1986] AFp Across all paths, eventually reach p EFp There is a path that eventually reaches p AGp Across all paths, p always holds EGp There is a path along which p always holds Monday, June 25, 12
branching existential and universal • Planning Is there a position I can move to such that escape is possible? At any point system could terminate and when it does p holds. Monday, June 25, 12
branching existential and universal • Planning Is there a position I can move to such that escape is possible? At any point system could terminate and when it does p holds. • Games Are there choices that I can make (“exists”) such that I will always outwit every move (“universal”) my opponent makes? Monday, June 25, 12
branching existential and universal • Planning Is there a position I can move to such that escape is possible? At any point system could terminate and when it does p holds. • Games Are there choices that I can make (“exists”) such that I will always outwit every move (“universal”) my opponent makes? • Security Can the system eventually repair itself after an intrusion? Is is possible that, no matter what inputs an attacker enters, the system can escape being compromised. Monday, June 25, 12
branching existential and universal Can be treated similarly Can be treated similarly Monday, June 25, 12
AG and EG (reachability) Initial states AG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states AG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states AG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states AG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Looks like AG yellow Monday, June 25, 12
AG and EG (reachability) Initial states EG yellow . . . . . . . . . Side Condition : Looks like AG yellow Recurrent set? Monday, June 25, 12
AF and EF (termination) Initial states AF green Monday, June 25, 12
AF and EF (termination) Initial states AF green Monday, June 25, 12
AF and EF (termination) Initial states EF red Monday, June 25, 12
AF and EF (termination) Initial states EF red Monday, June 25, 12
AF and EF (termination) Initial states EF red Looks like AF red Monday, June 25, 12
AF and EF (termination) Initial states EF red Side Condition : Looks like AF red Recurrent set? Monday, June 25, 12
Treat universal and existential fragments similarly . . . Monday, June 25, 12
Treat universal and existential fragments similarly . . . EF green X . . . . . . C F . . . C ≡ { s | color ( s ) = yellow } F ≡ { s | color ( s ) = green } Monday, June 25, 12
Treat universal and existential fragments similarly . . . EF green X . . . . . . C “Chute” F . . . C ≡ { s | color ( s ) = yellow } F ≡ { s | color ( s ) = green } Monday, June 25, 12
Treat universal and existential fragments similarly . . . EF green X . . . . . . C “Chute” F “Frontier” . . . C ≡ { s | color ( s ) = yellow } F ≡ { s | color ( s ) = green } Monday, June 25, 12
Treat universal and existential fragments similarly . . . EF green X . . . . . . C “Chute” F “Frontier” . . . C ≡ { s | color ( s ) = yellow } For AF p , chute is simply S F ≡ { s | color ( s ) = green } Monday, June 25, 12
Treat universal and existential fragments similarly . . . Characterization for CTL . . . EF green X . . . . . . C “Chute” F “Frontier” . . . C ≡ { s | color ( s ) = yellow } For AF p , chute is simply S F ≡ { s | color ( s ) = green } Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Set of states Monday, June 25, 12
Treat universal and existential fragments similarly . . . Property X ` Φ Set of states Monday, June 25, 12
Treat universal and existential fragments similarly . . . Property X ` Φ Set of states Standard CTL semantics Monday, June 25, 12
Treat universal and existential fragments similarly . . . Property X ` Φ Set of states I ` Φ ( ) 8 s 2 I. s ✏ Φ Standard CTL semantics Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Decompose temporal operators: Similar to CTL* Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ X, C , F � γ Second kind of judgement Decompose temporal operators: Similar to CTL* Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ X, C , F � γ Monday, June 25, 12
Treat universal and existential fragments similarly . . . Side Condition : X ` Φ Recurrent set? X, C , F � γ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ X, C , F � γ W alk Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Termination X, C , F � γ W alk Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Termination X, C , F � γ } well-founded W alk Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ X, C , F � γ W alk Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Safety X, C , F � γ W alk Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ Soundness and Completeness Proof System CTL semantics I ` Φ ( ) 8 s 2 I. s ✏ Φ Monday, June 25, 12
Treat universal and existential fragments similarly . . . X ` Φ X, C , F � γ • Sets-of-states rather than singleton states • Works well for infinite state spaces • Partition rather than enumerate states • Symbolic representations/overapproximations • We believe it will work well in practice ... Monday, June 25, 12
Side Condition : Recurrent set? Monday, June 25, 12
Side Condition : Recurrent set? C F X ✘ Monday, June 25, 12
Side Condition : Recurrent set? In practice , C F 1. Guess an invariant I for chute C X ✘ (using, e.g., Octagon) 2. Check that I is recurrent set (using an SMT solver) Monday, June 25, 12
x = 0 EF (AF (EG x )) x := 0 x := 1 Monday, June 25, 12
x = 0 EF (AF (EG x )) x := 0 x := 1 Monday, June 25, 12
x = 0 EF (AF (EG x )) x := 0 x := 1 x Monday, June 25, 12
x = 0 EF (AF (EG x )) x := 0 x := 1 x EG x Monday, June 25, 12
x = 0 EF (AF (EG x )) x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
x = 0 EF AF EG x EF AF EG x EF (AF (EG x )) x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
x = 0 EF AF EG x EF AF EG x x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x • (Finite) derivation despite infinite state spaces • Partition rather than enumerate states x := 1 • Symbolic representations/overapproximations x EG x • We believe it will work well in practice ... Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x How do we discover Frontiers and Chutes? x := 1 x EG x Monday, June 25, 12
F 1 pc = 4 x = 0 ≡ EF AF EG x C 1 pc = 0 ⇒ ρ 1 ∧ pc = 2 ⇒ ρ 2 ≡ F 2 pc = 6 ≡ C 2 pc = 2 ⇒ ¬ ρ 2 ≡ EF AF EG x F 3 ≡ true x := 0 AF EG x • (Finite) derivation despite infinite state spaces How do we discover Frontiers and Chutes? • Partition rather than enumerate states x := 1 • Symbolic representations/overapproximations x EG x • We believe it will work well in practice ... Monday, June 25, 12
Automation How do we discover frontiers ? (see our work in CAV 2011) Monday, June 25, 12
Automation How do we discover chutes ? EF red Initial states . . . Monday, June 25, 12
Recommend
More recommend