Computer Lab 1: Model Checking and Logic Synthesis using Spin (lab)

Similar documents
Computer Lab 1: Model Checking and Logic Synthesis using Spin (lab)

The SPIN Model Checker

Tool demonstration: Spin

The SPIN Model Checker

INF5140: Specification and Verification of Parallel Systems

Copyright 2008 CS655 System Modeling and Analysis. Korea Advanced Institute of Science and Technology

SPIN: Introduction and Examples

Network Protocol Design and Evaluation

Automated Reasoning. Model Checking with SPIN (II)

Patrick Trentin Formal Methods Lab Class, Feb 26, 2016

The Spin Model Checker : Part I/II

Design of Internet Protocols:

Patrick Trentin Formal Methods Lab Class, March 03, 2017

Lecture 3 SPIN and Promela

Design and Analysis of Distributed Interacting Systems

4/6/2011. Model Checking. Encoding test specifications. Model Checking. Encoding test specifications. Model Checking CS 4271

Computer Aided Verification 2015 The SPIN model checker

LTL Reasoning: How It Works

SPIN: Part /614 Bug Catching: Automated Program Verification. Sagar Chaki November 12, Carnegie Mellon University

MP 6 Modeling in Promela and SPIN

A Tutorial on Model Checker SPIN

Distributed Systems Programming (F21DS1) SPIN: Formal Analysis II

The Spin Model Checker : Part I. Moonzoo Kim KAIST

What is SPIN(Simple Promela Interpreter) Material About SPIN. Elements of Promela. Basic Variables and Types. Typical Structure of Promela Model

Formal Methods for Software Development

Multi-Threaded System int x, y, r; int *p, *q, *z; int **a; EEC 421/521: Software Engineering. Thread Interleaving SPIN. Model Checking using SPIN

What is SPIN(Simple Promela Interpreter) Elements of Promela. Material About SPIN. Basic Variables and Types. Typical Structure of Promela Model

CS477 Formal Software Development Methods / 32

Applications of Formal Verification

Network Protocol Design and Evaluation

Applications of Formal Verification

Applications of Formal Verification

INF672 Protocol Safety and Verification. Karthik Bhargavan Xavier Rival Thomas Clausen

Spin: Overview of PROMELA

Promela and SPIN. Mads Dam Dept. Microelectronics and Information Technology Royal Institute of Technology, KTH. Promela and SPIN

Formal Specification and Verification

Formal Specification and Verification

Software Engineering using Formal Methods

Model-Checking Concurrent Systems. The Model Checker Spin. The Model Checker Spin. Wolfgang Schreiner

THE MODEL CHECKER SPIN

A Practical approach on Model checking with Modex and Spin

Software Engineering using Formal Methods

Spin: Overview of PROMELA

Model checking Timber program. Paweł Pietrzak

CS477 Formal Software Development Methods / 39

SPIN part 2. Verification with LTL. Jaime Ramos. Departamento de Matemática, Técnico, ULisboa

Model-Checking Concurrent Systems

Distributed Systems Programming (F21DS1) SPIN: Formal Analysis I

EMBEDDED C CODE 17. SPIN Version 4 supports the inclusion of embedded C code into PROMELA models through the following fiv e new primitives:

SPIN. Carla Ferreira.

Formal Verification by Model Checking

Proving Dekker with SPIN and PROMELA

Introduction to Model Checking

T Parallel and Distributed Systems (4 ECTS)

SPIN, PETERSON AND BAKERY LOCKS

Distributed Systems Programming F29NM1 2. Promela I. Andrew Ireland. School of Mathematical and Computer Sciences Heriot-Watt University Edinburgh

Logic Model Checking

TRIAL-EXAM Software Engineering using Formal Methods TDA293 (TDA292) / DIT270. Only dictionaries may be used. Other aids are not allowed!

Well, you need to capture the notions of atomicity, non-determinism, fairness etc. These concepts are not built into languages like JAVA, C++ etc!

Logic Model Checking

FORMAL METHODS IN NETWORKING COMPUTER SCIENCE 598D, SPRING 2010 PRINCETON UNIVERSITY LIGHTWEIGHT MODELING IN PROMELA/SPIN AND ALLOY

Model Requirements and JAVA Programs MVP 2 1

TRIAL-EXAM Software Engineering using Formal Methods TDA293 (TDA292) / DIT270. Only dictionaries may be used. Other aids are not allowed!


Flow Control. CSC215 Lecture

System Correctness. EEC 421/521: Software Engineering. System Correctness. The Problem at Hand. A system is correct when it meets its requirements

Formal Methods for Software Development

TOWARDS AUTOMATED VERIFICATION OF WEB SERVICES

Hello World. Slides mostly a reproduction of Theo C. Ruys SPIN Beginners Tutorial April 23, Hello() print "Hello"

SWEN-220 Mathematical Models of Software. Process Synchronization Critical Section & Semaphores

Using Spin to Help Teach Concurrent Programming

Mapping of UML Diagrams to Extended Petri Nets for Formal Verification

Using Model Checking with Symbolic Execution for the Verification of Data-Dependent Properties of MPI-Based Parallel Scientific Software

The Design of a Distributed Model Checking Algorithm for Spin

Formal Verification of Process Communications in Operational Flight Program for a Small-Scale Unmanned Helicopter

T Parallel and Distributed Systems (4 ECTS)

Building Graphical Promela Models using UPPAAL GUI

CIS 4930/6930: Principles of Cyber-Physical Systems

SWEN-220 Mathematical Models of Software. Concurrency in SPIN Interleaving

Distributed Systems Programming (F21DS1) SPIN: Simple Promela INterpreter

Applicant. LLC Service. LAN Segment

Statements execute in sequence, one after the other, such as the following solution for a quadratic equation:

G52CON: Concepts of Concurrency

Temporal Logic and Timed Automata

[module 2.2] MODELING CONCURRENT PROGRAM EXECUTION

Application of Formal Verification to Software Security

A Verification Approach for GALS Integration of Synchronous Components

A Tutorial Introduction to Shared Memory Concurrency

Analyzing Singularity Channel Contracts

Modeling a Cache Coherence Protocol with the Guarded Action Language

Verification Options. To Store Or Not To Store? Inside the UPPAAL tool. Inactive (passive) Clock Reduction. Global Reduction

MINIX 3 Process Analysis

Model Checking with Automata An Overview

Model Checking Revision: Model Checking for Infinite Systems Revision: Traffic Light Controller (TLC) Revision: 1.12

Cyber Physical System Verification with SAL

Linear Temporal Logic. Model Checking and. Based on slides developed by Natasha Sharygina. Carnegie Mellon University.

Introduction. C provides two styles of flow control:

Towards Promela verification using VerICS

CS5232 Formal Specification and Design Techniques. Using PAT to verify the Needham-Schroeder Public Key Protocol

Hardware versus software

Transcription:

Computer Lab 1: Model Checking and Logic Synthesis using Spin (lab) Richard M. Murray Nok Wongpiromsarn Ufuk Topcu Calornia Institute of Technology AFRL, 25 April 2012 Outline Spin model checker: modeling concurrent systems and describing system requirements in Promela Model-checking with Spin Logic synthesis with Spin The Spin Model Checker Gerard J. Holzmann Addison-Wesley, 2003 http://spinroot.com

The process flow of model checking Efficient model checking tools automate the process: SPIN, nusmv, TLC,... 2

System design (behavior specication) Promela (Process Meta Language) is a nondeterministic, guarded command language for specying possible system behavior of a distributed system in Spin There are 3 types of objects in Spin verication model - asynchronous processes - global and local data objects - message channels System requirements (correctness claims) default properties - absence of system deadlock - absence of unreachable code assertions end-state labels acceptance progress Spin Verication Models fairness never claim LTL formulas trace assertions g 2 g 2 q1 process 1 ; {g1 TS 1 s0: red s1: green process 2 ; {g2 TS 2 s0: red s1: green = g 1 ^ g 2 q0 g 1 true A q2 g 1 3

Running Spin model.pml system design system requirements Spin -i -t -a pan.c (model checking code) gcc compiler ranm simulation interactive simulation guided simulation model.trail (counterexample) negative result pan (executable verier) Typical sequence of commands correctness proof $ spin -u100 model!# non-verbose simulation for 100 steps $ spin -a model!! # generate C code for analysis (pan.c) $ gcc -o pan pan.c!# generate executable verier from pan.c $./pan -a -N P1! # perform verication of specication P1 $ spin -t -p model!# show error trail Note: spin -- and./pan -- list available command-line and un-time options, resp. 4

Promela Objects: Processes A keyword proctype is used to declare process behavior 2 ways to instantiate a process - Add the prefix active to a proctype declaration. The process will be instantiated in the initial system state. - Use run operator to instantiate a process in any reachable system state # of processes to be instantiated in the initial system state active [2] proctype main() { prinf("hello world\n") keyword for initial process declaration and instantiation proctype you run(byte x) { printf("x = %d\n", x) init { run you run(0); run you run(1) Extra process init needs to be created 5

Promela Objects: Data Objects 2 levels of scope: global and process local No intermediate levels of scope The default initial value of all data objects is zero All objects must be declared before they can first be referenced User-defined type can be declared using keyword typedef Type Typical Range Sample Declaration bit 0,1 bit turn = 1 bool false, true bool flag = true byte 0...255 byte a[12] chan 1...255 chan m mtype 1...255 mtype n pid 0...255 pid p short 2 15...2 15 1 short b[4] = 89 int 2 31...2 31 1 int cnt = 67 unsigned 0...2 n 1 unsigned w : 3 = 5 all elements initialized to 0 all elements initialized to 89 unsigned stored in 3 bits (range 0...7) 6

Basic Statements Assignment - valid assignment: - invalid assignment: Expressions - must be side effect free c++, c--, c = c+1, c = c-1 ++c, --c - the only exception is the run operator, which can have a side effect Print: printf("x = %d\n", x) Assertion: assert(x+y == z), assert(x <= y) the right-hand side yields a value outside the range of c, truncation can result - always executable and has no effect on the state of the system when executed - can be used to check safety property: Spin reports a error the expression can evaluate to zero (false) int n; active proctype invariant() { assert(n <= 3) The assertion statement can be executed at any time. This can be used to check a system invariant condition: it should hold no matter when the assertion is checked. send receive message passing between processes (won t cover) 7

Rules for Executability A statement in a Spin model is either executable or blocked A statement is executable f it evaluates to true or non-zero integer value 2 < 3 is always executable x < 27 executable i x<27 3 + x executable i x 6= 3 print statements and assignments are always unconditionally executable If a process reaches a point where there is no executable statements left to execute, it simply blocks while (a!= b) { skip; nothing while waiting for a==b a == b; block until a==b :: (a == b) -> break :: else -> skip od L: :: (a == b) -> skip :: else -> goto L fi 8

Nondeterminism 2 levels of nondeterminism System level: processes execute concurrently and asynchronously - Process scheduling decisions are non-deterministic - Statement executions from dferent processes are arbitrarily interleaved in time - Basic statements execute atomically Process level: local choice within processes can also be non-deterministic byte x = 2, y = 2; active proctype A() { :: x = 3-x :: y = 3-y od active proctype B() { :: x = 3-y :: y = 3-x od At any point in an execution, any of these statements can be executed 9

Control Flow Semicolons, gotos and labels Atomic sequences: atomic{... - Define an indivisible sequence of actions - No other process can execute statements from the moment that the first statement of this sequence begins to execute until the last one has completed d step{... Deterministic steps: - Similar to atomic sequence but more restrictive, e.g., no nondeterminism, goto jumps, or unexecutable statements is allowed Nondeterministic selection: :: guard1 -> stmnt11; stmnt12;... :: guard2 -> stmnt21; stmnt22;... ::... fi Nondeterministic repetition: :: guard1 -> stmnt11; stmnt12;... :: guard2 -> stmnt21; stmnt22;... ::... Escape sequences: { P unless { E Inline definitions: inline{... the else guard is executable f none of the other guards is executable. :: x++ :: x-- :: break od swap the values of a and b atomic { tmp = b; b = a; a = tmp d step { tmp = b; b = a; a = tmp :: (n % 2!= 0) -> n = 1 :: (n >= 0) -> n = n-2 :: (n % 3 == 0) -> n = 3 :: else /* -> skip */ fi without the else clause, the statement would block until other guards becomes true. transfers control to the end of the loop 10

Nondeterministic Selection and Repetition :: guard1 -> stmnt11; stmnt12;... :: guard2 -> stmnt21; stmnt22;... ::... fi :: guard1 -> stmnt11; stmnt12;... :: guard2 -> stmnt21; stmnt22;... ::... If at least one guard is executable, the / statement is executable If more than one guard is executable, one is selected non-deterministically If none of the guard statements is executable, the / statement blocks Any type of basic or compound statement can be used as a guard statement checks once and continues; statement re-executes code until a break is reached 11

Defining Correctness Claims default properties - absence of system deadlock - absence of unreachable code assertions - local process assertions - system invariants end-state labels - define proper termination points of processes accept-state labels - when looking for acceptance cycles progress-state labels - when looking for non-progress cycles fairness never claims LTL formulas trace assertions safety nothing bad ever happens properties of reachable states liveness something good eventually happens properties of infinite sequences of states 12

Progress and Acceptance Progress Search for reachable non-progress cycles (infinite executions that not pass through any progress state) Progress states are specied using progress label Enforced by gcc -DNP and pan -l Acceptance Search for acceptance cycles (infinite executions that pass through a specially marked state) Acceptance states are specied using accept label Enforced by pan -a skip byte x = 2, y = 2; active proctype A() { :: x = 3-x :: y = 3-y; progress: skip od x = 3-x A y = 3-y a non-progress cycle is an infinite execution sequence that es not pass through any progress state P 13

Fairness Weak fairness If a statement is executable infinitely long, it will eventually be executed Process-level weak-fairness can be enforced by run-time option pan -f - a process contains at least one statement that remains executable infinitely long, that process will eventually execute a step - es not apply to non-deterministic transition choices within a process Strong fairness If a statement is executable infinitely often, it will eventually be executed Enforcing fairness increases the cost of verication Weak fairness: complexity is linear in the number of active processes Strong fairness: complexity is quadratic in the number of active processes byte x = 2, y = 2; active proctype A() { :: x = 3-x od active proctype B() { :: y = 3-y; progress: skip od $ spin -a progress.pml $ gcc -DNP -o pan pan.c $./pan -l -f 14

Never Claims Define an observer process that executes synchronously with the system Intended to monitor system behavior; not contribute to system behavior Can be either deterministic or non-deterministic Contain only side-effect free expressions Abort when they block Reports a violation when - closing curly brace of never claim is reached - an acceptance cycle is found (infinite execution passing through accept label) Typically used to enforce LTL property Old style: spin -f!spec generates never claim New style: use ltl label { spec Make sure to run pan -a when you have never claims Example: []<>g1 To make sure this is always true, need to make sure that!spec is never true (same inversion as usual) spin -f '! []<>g1' never { /*! []<>g1 */ T0_init: :: (! ((g1))) -> goto accept_s4 :: (1) -> goto T0_init fi; accept_s4: :: (! ((g1))) -> goto accept_s4 fi; 15

LTL Formulas Never-claims can define all omega-regular word-automata - Properties that can be stated in LTL can be converted mechanically into never claims Negate the LTL formula, and generate the claim from the negated form All accepting runs of the resulting omega-automaton correspond to violations of the original (non-negated) property $ spin -f!<>[]p never { /*!<>[]p */ T0 init: :: (! ((p))) -> goto accept S9 :: (1) -> goto T0 init fi; accept S9: :: (1) -> goto T0 init fi; p $ ltl2ba -f!<>[]p never { /*!<>[]p */ T0 init: :: (!p) -> goto accept S1 :: (1) -> goto T0 init fi; accept S1: :: (!p) -> goto accept S1 :: (1) -> goto T0 init fi;!p true!p true true T0_init S9 p T0_init S1 16

model.pml system design system requirements Spin Commands Spin -i -t -a pan.c (model checking code) gcc compiler ranm simulation interactive simulation Generate model-specic ANSI C code pan.c $ spin -a model.pml Generate verier from pan.c Typical command $ gcc -o pan pan.c Enforcing progress $ gcc -DNP -o pan pan.c Perform verication Typical command $./pan Enforcing progress: add -l Enforcing acceptance: add -a Enforcing fairness: add -f -a -N P1 model.pml guided simulation model.trail (counterexample) negative result pan (executable verier) correctness proof Relay error trail $ spin -t -p -g model.pml follow error trail print all statements print all global variables Note: spin -- and./pan -- list available command-line and run-time options, resp 17

Example 1: traffic lights (property veried) System TS: composition of two traffic lights and a controller q 1 q 2 {g 1 traffic light 1 TS P 1 s 1 {g 2 c 2 c 1 = s 2 traffic light 2 Property veried: c 3 controller q 2,s 1,c 2 {g 1 q 1,s 1,c 1 q 1,s 2,c 3 {g 2 lights.pml P 1 Specication : The light are never green simultaneously. [](!(g1 && g2))!<>(g1 && g2) SPIN code: A P1 ltl2ba -f "<>(g1 && g2)" > lights_safety.pml spin -a -N lights_safety.pml lights.pml gcc -o pan pan.c./pan -a 18 lights_safety.pml

Example 2: traffic lights (counterexample found property not veried) System TS: composition of two traffic lights and a controller q 1 q 2 {g 1 traffic light 1 s 1 {g 2 c 2 c 1 = s 2 traffic light 2 c 3 controller Property not veried: TS = P 2 Counterexample: (hq 1,s 1,c 1, 1ihq 1,s 2,c 3, 1i)! q 2,s 1,c 2 {g 1 q 1,s 1,c 1 q 1,s 2,c 3 {g 2 P 2 Specication : The first light is infinitely often green. []<>g1 A P2 ltl2ba -f "! []<>g1" > lights_progress.pml spin -a -N lights_progress.pml lights.pml gcc -o pan pan.c./pan -a q 2,s 1,c 2,init q 1,s 1,c 1,init q 1,s 2,c 3,init q 1,s 1,c 1, 1 q 1,s 2,c 3, 1 spin -a -N lights_simple.pml gcc -o pan pan.c./pan -a -N P2 TS A P2 19

Example 3: traffic lights (counterexample used to mody the controller) System TS: composition of two traffic lights and a modied controller q 1 q 2 {g 1 s 1 s 2 {g 2 c 1 c 2 c 4 c 3! new controller: is not a valid control signal anymore P 2 Specication : The first light is infinitely often green. Property veried: TS P 2 A P2 = q 1,s 1,c 1 {g 1 q 2,s 1,c 2 q 1,s 1,c 1,init q 2,s 1,c 2,init q 1,s 2,c 4 {g 2 q 1,s 1,c 3 q 1,s 2,c 4,init q 1,s 1,c 3,init q 1,s 1,c 3, 1 q 1,s 1,c 1, 1 q 1,s 2,c 4, 1 20 TS A P2

Example: traffic lights - find good sequence P = ; TS 1 ; TS 2 s0: red s0: red 1 1 k 2 2 s1: green s1: green {g 1 {g 2 = (g 1 ^ g 2 ) ^ g 1 ^ g 2 L! (A) =Words( ) q0 (g 1 ^ g 2 ) g 1 ^ g 2 (g 1 ^ g 2 ) g 1 ^ g 2 (g 1 ^ g 2 ) q1 q2 g 1 ^ g 2 A bool g1 = 0, g2 = 0; active proctype TL1() { :: atomic{ g1 == 0 -> g1 = 1 :: atomic{ g1 == 1 -> g1 = 0 od active proctype TL2() { :: atomic{ g2 == 0 -> g2 = 1 :: atomic{ g2 == 1 -> g2 = 0 od never { T0 init: :: (!g1) (!g2) -> goto T0 init :: (g1 &&!g2) -> goto T1 S1 fi; T1 S1: :: (!g1) (!g2) -> goto T1 S1 :: (!g1 && g2) -> goto accept S1 fi; accept S1: :: (!g1) (!g2) -> goto T0 init :: (g1 &&!g2) -> goto T1 S1 fi; 21

Example: farmer puzzle A farmer wants to cross a river in a little boat with a wolf, a goat and a cabbage. Constraints: The boat is only big enough to carry the farmer plus one other animal or object. The wolf will eat the goat the farmer is not present. The goat will eat the cabbage the farmer is not present. How can the farmer get all both animals and the cabbage safely across the river? P f0,w0 g0,c0 f1,w0 g0,c0 = (f = w = g = c = 1) ^ (w 6= g _ f = g) ^ (g 6= c _ f = g) f1,w1 g0,c0 f1,w0 g1,c0 f1,w0 g0,c1 L! (A) =Words( ) f0,w1 g0,c0 f1,w1 g1,c0 f0,w0 g1,c0 f1,w1 g0,c1 f1,w0 g1,c1 f0,w0 g0,c1 q0 (w 6= g ^ g 6= c) _ f = g (f = w = g = c = 1) ^ A p i, p = i p 2 {f,w,g,c, i 2 {0, 1 f0,w1 g1,c0 f0,w1 g0,c1 f1,w1 g1,c1 f0,w0 g1,c1 f0,w1 g1,c1 22 (w 6= g ^ g 6= c) _ f = g q1 (w 6= g ^ g 6= c) _ f = g