15 views

Uploaded by Siwar Ben Gamra

- g5m2ffinalversion
- Formal Verification
- Mu Lit Pliers Dividers Supp4
- Micro Pross e Or
- lessonplanfinal2
- 22725399 Verification and Validation
- Ass
- English MayanMath.pdf
- newsletter 12 10 21 13
- newsletter 12 10 21 13
- Grade10-4180-138-1126.pdf
- sdkfjaskdf
- LEC Verification Guide
- subtracting-fractions-1.pdf
- comp6004[1]
- Matlab Fundamentals
- Test Bank Understanding Pharmacology Essentials for Medication Safety, 2nd Edition.docx
- Chapter6_Error Detection and Correction
- Dividing Decimals
- 02-python-i

You are on page 1of 95

Introduction to Spin

Bernhard Beckert

Chalmers University, Göteborg

Spin: Previous Lecture vs. This Lecture

Previous lecture

Spin appeared as a Promela simulator

This lecture

Intro to Spin as a model checker

What Does A Model Checker Do?

It is tuned for that.

It tries the opposite.

What Does A Model Checker Do?

It is tuned for that.

It tries the opposite.

What Does A Model Checker Do?

It is tuned for that.

It tries the opposite.

What Does A Model Checker Do?

It is tuned for that.

It tries the opposite.

What does ‘exhaustive search’ mean here?

exhaustive search

=

resolving non-determinism in all possible ways

What does ‘exhaustive search’ mean here?

exhaustive search

=

resolving non-determinism in all possible ways

two kinds of non-determinism to be resolved:

I explicit, local:

if /do statements

:: guardX -> ....

:: guardY -> ....

I implicit, global:

scheduling of concurrent processes

(see next lecture)

Model Checker for This Course: Spin

Model Checker for This Course: Spin

The name is a serious understatement!

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively)

I generating a verifier

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively)

I generating a verifier

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively)

I generating a verifier

model checking:

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively)

I generating a verifier

model checking:

I exhaustively checks Promela model against correctness properties

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively)

I generating a verifier

model checking:

I exhaustively checks Promela model against correctness properties

I in case the check is negative:

generates a failing run of the model

Model Checker for This Course: Spin

The name is a serious understatement!

I simulating a model (randomly/interactively/guided)

I generating a verifier

model checking:

I exhaustively checks Promela model against correctness properties

I in case the check is negative:

generates a failing run of the model, to be simulated by Spin

Spin Workflow: Overview

model correctness

name.pml properties

executable

-a verifier C

SPIN verifier

pan.c compiler

pan

er

-t

eith

or

-i

failing

random/ interactive / guided run “errors: 0”

simulation name.pml.trail

Plain Simulation with Spin

model correctness

name.pml properties

executable

verifier C

SPIN verifier

pan.c compiler

pan

-i

failing

random/ interactive / guided run “errors: 0”

simulation model.trail

Rehearsal: Simulation Demo

interleave.pml, zero.pml

Model Checking with Spin

model correctness

name.pml properties

executable

-a verifier C

SPIN verifier

pan.c compiler

pan

er

eith

or

failing

random/ interactive / guided run “errors: 0”

simulation model.trail

Meaning of Correctness wrt. Properties

I For each correctness property Ci ,

RM,Ci is the set of all runs of M satisfying Ci .

(RM,Ci ⊆ RM )

I M is correct wrt. C1 , . . . , Cn iff (RM,C1 ∩ . . . ∩ RM,Cn ) = RM .

I If M is not correct, then

each r ∈ (RM \ (RM,C1 ∩ . . . ∩ RM,Cn )) is a counter example.

Meaning of Correctness wrt. Properties

I For each correctness property Ci ,

RM,Ci is the set of all runs of M satisfying Ci .

(RM,Ci ⊆ RM )

I M is correct wrt. C1 , . . . , Cn iff (RM,C1 ∩ . . . ∩ RM,Cn ) = RM .

I If M is not correct, then

each r ∈ (RM \ (RM,C1 ∩ . . . ∩ RM,Cn )) is a counter example.

Meaning of Correctness wrt. Properties

I For each correctness property Ci ,

RM,Ci is the set of all runs of M satisfying Ci .

(RM,Ci ⊆ RM )

I M is correct wrt. C1 , . . . , Cn iff (RM,C1 ∩ . . . ∩ RM,Cn ) = RM .

I If M is not correct, then

each r ∈ (RM \ (RM,C1 ∩ . . . ∩ RM,Cn )) is a counter example.

But how to write Correctness Properties?

Stating Correctness Properties

model correctness

name.pml properties

Stating Correctness Properties

model correctness

name.pml properties

Stating Correctness Properties

model correctness

name.pml properties

stating properties within model , using

I assertion statements

Stating Correctness Properties

model correctness

name.pml properties

stating properties within model , using

I assertion statements

I meta labels

I end labels

I accept labels

I progress labels

Stating Correctness Properties

model correctness

name.pml properties

stating properties within model , using

I assertion statements

I meta labels

I end labels

I accept labels

I progress labels

stating properties outside model , using

I never claims

I temporal logic formulas

Stating Correctness Properties

model correctness

name.pml properties

stating properties within model , using

I assertion statements (today)

I meta labels

I end labels (today)

I accept labels

I progress labels

stating properties outside model , using

I never claims

I temporal logic formulas

Assertion Statements

Assertion statements in Promela are statements of the form

assert(expr )

were expr is any Promela expression.

Assertion Statements

Assertion statements in Promela are statements of the form

assert(expr )

were expr is any Promela expression.

Assertion Statements

Assertion statements in Promela are statements of the form

assert(expr )

were expr is any Promela expression.

Assertion statements can appear anywhere where a Promela statement

is expected.

Assertion Statements

Assertion statements in Promela are statements of the form

assert(expr )

were expr is any Promela expression.

Assertion statements can appear anywhere where a Promela statement

is expected.

...

stmt1 ;

a s s e r t ( max == a ) ;

stmt2 ;

...

Assertion Statements

Assertion statements in Promela are statements of the form

assert(expr )

were expr is any Promela expression.

Assertion statements can appear anywhere where a Promela statement

is expected.

...

...

if

stmt1 ;

:: b1 -> stmt3 ;

a s s e r t ( max == a ) ;

assert (x < y)

stmt2 ;

:: b2 -> stmt4

...

...

Meaning of Boolean Assertion Statements

assert(expr )

I has no effect if expr evaluates to true

I triggers an error message if expr evaluates to false

Meaning of General Assertion Statements

assert(expr )

I has no effect if expr evaluates to non-zero value

I triggers an error message if expr evaluates to 0

Meaning of General Assertion Statements

assert(expr )

I has no effect if expr evaluates to non-zero value

I triggers an error message if expr evaluates to 0

Recall:

Meaning of General Assertion Statements

assert(expr )

I has no effect if expr evaluates to non-zero value

I triggers an error message if expr evaluates to 0

Recall:

bit 1 0

Meaning of General Assertion Statements

I has no effect if expr evaluates to non-zero value

I triggers an error message if expr evaluates to 0

Recall:

bit 1 0

Instead of using ‘printf’s for Debugging ...

if

:: a >= b -> max = a ;

:: a <= b -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

Instead of using ‘printf’s for Debugging ...

if

:: a >= b -> max = a ;

:: a <= b -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

(simulate, inject faults, add assertion, simulate again)

> spin max . pml

... we can employ Assertions

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: a <= b -> max = b ;

fi;

a s s e r t ( a > b -> max == a : max == b )

... we can employ Assertions

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: a <= b -> max = b ;

fi;

a s s e r t ( a > b -> max == a : max == b )

... we can employ Assertions

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: a <= b -> max = b ;

fi;

a s s e r t ( a > b -> max == a : max == b )

Generate Verifier in C

model correctness

max.pml properties

-a verifier

SPIN

pan.c

Generate Verifier in C

> spin -a max . pml

(plus helper files)

Formal Specification and Verification: Spin B. Beckert 20 / 47

Compile To Executable Verifier

executable

verifier C

verifier

pan.c compiler

pan

compile to executable verifier

> gcc -o pan pan . c

Compile To Executable Verifier

executable

verifier C

verifier

pan.c compiler

pan

compile to executable verifier

> gcc -o pan pan . c

Compile To Executable Verifier

executable

verifier C

verifier

pan.c compiler

pan

compile to executable verifier

> gcc -o pan pan . c

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

I prints “errors: 0”

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

I prints “errors: n” (n > 0)

Formal Specification and Verification: Spin B. Beckert 24 / 47

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

I prints “errors: n” (n > 0) ⇒ counter example found!

Formal Specification and Verification: Spin B. Beckert 24 / 47

Run Verifier (= Model Check)

executable

verifier

pan

either or

failing

“errors: 0” run

max.pml.trail

run verifier pan

> ./ pan

I prints “errors: n” (n > 0) ⇒ counter example found!

records failing run in max.pml.trail

Formal Specification and Verification: Spin B. Beckert 24 / 47

Guided Simulation

SPIN

-t

failing

guided run

simulation max.pml.trail

inject a fault, re-run verification, and then:

> spin -t -p -l max . pml

Output of Guided Simulation

Starting P with pid 0

1: proc 0 ( P ) line 8 " max . pml " ( state 1) [a = 1]

P (0) :a = 1

2: proc 0 ( P ) line 14 " max . pml " ( state 7) [b = 2]

P (0) :b = 2

3: proc 0 ( P ) line 23 " max . pml " ( state 13) [((a<=b))]

3: proc 0 ( P ) line 23 " max . pml " ( state 14) [max = a]

P (0) :max = 1

spin : line 25 " max . pml " , Error : assertion violated

spin : text of failed assertion :

a s s e r t (( (( a > b ) ) -> (( max == a ) ) : (( max == b ) ) ) )

Output of Guided Simulation

Starting P with pid 0

1: proc 0 ( P ) line 8 " max . pml " ( state 1) [a = 1]

P (0) :a = 1

2: proc 0 ( P ) line 14 " max . pml " ( state 7) [b = 2]

P (0) :b = 2

3: proc 0 ( P ) line 23 " max . pml " ( state 13) [((a<=b))]

3: proc 0 ( P ) line 23 " max . pml " ( state 14) [max = a]

P (0) :max = 1

spin : line 25 " max . pml " , Error : assertion violated

spin : text of failed assertion :

a s s e r t (( (( a > b ) ) -> (( max == a ) ) : (( max == b ) ) ) )

Output of Guided Simulation

Starting P with pid 0

1: proc 0 ( P ) line 8 " max . pml " ( state 1) [a = 1]

P (0) :a = 1

2: proc 0 ( P ) line 14 " max . pml " ( state 7) [b = 2]

P (0) :b = 2

3: proc 0 ( P ) line 23 " max . pml " ( state 13) [((a<=b))]

3: proc 0 ( P ) line 23 " max . pml " ( state 14) [max = a]

P (0) :max = 1

spin : line 25 " max . pml " , Error : assertion violated

spin : text of failed assertion :

a s s e r t (( (( a > b ) ) -> (( max == a ) ) : (( max == b ) ) ) )

values of variables whenever updated

What did we do so far?

following whole cycle (most primitive example, assertions only)

model correctness

name.pml properties

executable

-a verifier C

SPIN verifier

pan.c compiler

pan

er

-t

eith

or

-i

failing

random/ interactive / guided run “errors: 0”

simulation name.pml.trail

What did we do so far?

following whole cycle (most primitive example, assertions only)

model correctness

name.pml properties

executable

-a verifier C

SPIN verifier

pan.c compiler

pan

er

-t

eith

or

-i

failing

random/ interactive / guided run “errors: 0”

simulation name.pml.trail

-p -l -g ...

Formal Specification and Verification: Spin B. Beckert 29 / 47

Further Examples: Integer Division

i n t dividend = 15;

i n t divisor = 4;

i n t quotient , remainder ;

quotient = 0;

remainder = dividend ;

do

:: remainder > divisor ->

quotient ++;

remainder = remainder - divisor

:: e l s e ->

break

od;

p r i n t f ( " % d divided by % d = %d , remainder = % d \ n " ,

dividend , divisor , quotient , remainder ) ;

Further Examples: Integer Division

i n t dividend = 15;

i n t divisor = 4;

i n t quotient , remainder ;

quotient = 0;

remainder = dividend ;

do

:: remainder > divisor ->

quotient ++;

remainder = remainder - divisor

:: e l s e ->

break

od;

p r i n t f ( " % d divided by % d = %d , remainder = % d \ n " ,

dividend , divisor , quotient , remainder ) ;

simulate, put assertions, verify, change values, ...

Further Examples: Greatest Common Divisor

i n t x = 15 , y = 20;

int a, b;

a = x; b = y;

do

:: a > b -> a = a - b

:: b > a -> b = b - a

:: a == b -> break

od;

p r i n t f ( " The GCD of % d and % d = % d \ n " , x , y , a )

Further Examples: Greatest Common Divisor

i n t x = 15 , y = 20;

int a, b;

a = x; b = y;

do

:: a > b -> a = a - b

:: b > a -> b = b - a

:: a == b -> break

od;

p r i n t f ( " The GCD of % d and % d = % d \ n " , x , y , a )

Further Examples: Greatest Common Divisor

i n t x = 15 , y = 20;

int a, b;

a = x; b = y;

do

:: a > b -> a = a - b

:: b > a -> b = b - a

:: a == b -> break

od;

p r i n t f ( " The GCD of % d and % d = % d \ n " , x , y , a )

still, assertions can perform sanity check

Further Examples: Greatest Common Divisor

int a, b;

a = x; b = y;

do

:: a > b -> a = a - b

:: b > a -> b = b - a

:: a == b -> break

od;

p r i n t f ( " The GCD of % d and % d = % d \ n " , x , y , a )

still, assertions can perform sanity check

⇒ typical for model checking

Typical Command Lines

random simulation

spin name.pml

Typical Command Lines

random simulation

spin name.pml

interactive simulation

spin -i name.pml

Typical Command Lines

random simulation

spin name.pml

interactive simulation

spin -i name.pml

model checking

spin -a name.pml

gcc -o pan pan.c

./pan

Typical Command Lines

random simulation

spin name.pml

interactive simulation

spin -i name.pml

model checking

spin -a name.pml

gcc -o pan pan.c

./pan

and in case of error

spin -t -p -l -g name.pml

Spin Reference Card

I typical command line sequences

I options for

I Spin

I gcc

I pan

I Promela

I datatypes

I operators

I statements

I guarded commands

I processes

I channels

I temproal logic syntax

Why Spin?

I based on standard theory of ω-automata and linear temporal logic

I 2001 ACM Software Systems Award (other winning software systems

include: Unix, TCP/IP, WWW, Tcl/Tk, Java)

I used for safety critical applications

I distributed freely as research tool, well-documented, actively

maintained, large user-base in academia and in industry

I annual Spin user workshops series held since 1995

Why Spin? (Cont’d)

I good to understand a few system really well, rather than many

systems poorly

I availability of good course book (Ben-Ari)

I availability of front end jSpin (also Ben-Ari)

What is jSpin?

I developed for pedagogical purposes

I written in Java

I simple user interface

I Spin options automatically supplied

I fully configurable

I supports graphics output of transition system

What is jSpin?

I developed for pedagogical purposes

I written in Java

I simple user interface

I Spin options automatically supplied

I fully configurable

I supports graphics output of transition system

I makes back-end calls transparent

jSpin Demo

calling jSpin

> java - jar / usr / l o c a l / jSpin / jSpin . jar

(with path adjusted to to your setting)

or use shell script:

> jspin

jSpin Demo

calling jSpin

> java - jar / usr / l o c a l / jSpin / jSpin . jar

(with path adjusted to to your setting)

or use shell script:

> jspin

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

⇒ crazy “timeout” message sometimes

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

⇒ crazy “timeout” message sometimes

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

⇒ crazy “timeout” message sometimes

⇒ reports “errors: 1”

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

⇒ crazy “timeout” message sometimes

⇒ reports “errors: 1”

????

Formal Specification and Verification: Spin B. Beckert 42 / 47

Catching A Different Type of Error

/* after choosing a , b from {1 ,2 ,3} */

if

:: a >= b -> max = a ;

:: b <= a -> max = b ;

fi;

p r i n t f ( " the maximum of % d and % d is % d \ n " ,

a , b , max ) ;

⇒ crazy “timeout” message sometimes

⇒ reports “errors: 1”

Formal Specification and Verification: Spin B. Beckert 42 / 47

Catching A Different Type of Error

...

pan : invalid end state ( at depth 1)

pan : wrote max2 . pml . trail

...

Legal and Illegal Blocking

A process may legally block, as long as some other process can proceed.

Legal and Illegal Blocking

A process may legally block, as long as some other process can proceed.

for concurrent and distributed models (i.p. protocols).

Legal and Illegal Blocking

A process may legally block, as long as some other process can proceed.

for concurrent and distributed models (i.p. protocols).

But

it’s an error if a process blocks while no other process can proceed

Legal and Illegal Blocking

A process may legally block, as long as some other process can proceed.

for concurrent and distributed models (i.p. protocols).

But

it’s an error if a process blocks while no other process can proceed

⇒ “Deadlock”

Legal and Illegal Blocking

A process may legally block, as long as some other process can proceed.

for concurrent and distributed models (i.p. protocols).

But

it’s an error if a process blocks while no other process can proceed

⇒ “Deadlock”

Valid End States

An end state of a run is valid iff the location counter of each processes is

at an end location.

Valid End States

An end state of a run is valid iff the location counter of each processes is

at an end location.

End locations of a process P are:

I P’s textual end

Valid End States

An end state of a run is valid iff the location counter of each processes is

at an end location.

End locations of a process P are:

I P’s textual end

I each location marked with an end label: “endxxx:”

Valid End States

An end state of a run is valid iff the location counter of each processes is

at an end location.

End locations of a process P are:

I P’s textual end

I each location marked with an end label: “endxxx:”

End labels are not useful in max1.pml, but elsewhere, they are.

Example: end.pml

Literature for this Lecture

- g5m2ffinalversionUploaded byapi-366384722
- Formal VerificationUploaded byDilawar Singh
- Mu Lit Pliers Dividers Supp4Uploaded byNageswariah.M
- Micro Pross e OrUploaded byMahfuz Hasan
- lessonplanfinal2Uploaded byapi-300394682
- 22725399 Verification and ValidationUploaded byRimpz ╰❥
- AssUploaded byBede Ramulfo Juntilla Sedano
- English MayanMath.pdfUploaded byporfirio1830
- newsletter 12 10 21 13Uploaded byapi-219598427
- newsletter 12 10 21 13Uploaded byapi-219598427
- Grade10-4180-138-1126.pdfUploaded bydvrao_chowdary
- sdkfjaskdfUploaded byapi-271266375
- LEC Verification GuideUploaded byNguyen Hung
- subtracting-fractions-1.pdfUploaded byDianne De Guzman
- comp6004[1]Uploaded byThành Đoàn
- Matlab FundamentalsUploaded byRob Radonski
- Test Bank Understanding Pharmacology Essentials for Medication Safety, 2nd Edition.docxUploaded bybachababy
- Chapter6_Error Detection and CorrectionUploaded byJeetu Raj
- Dividing DecimalsUploaded byElvin Nobleza Palao
- 02-python-iUploaded byUDIT GUPTA
- Simplify Mixed 1Uploaded byYuan Esther
- Conditional ExecutionUploaded byaleksandarpmau
- National Term Schedule of Topics for Mathematics - Grade 7.(1)Uploaded byJennyAnneP.Victorino
- Napier's wonderful world of logarithmsUploaded byReidar Mosvold
- JavaUploaded byBhaskar Naidu
- m6u1 flyswatter vocabulary review 1Uploaded byapi-302577842
- Clerical Guide V1!9!19 03Uploaded byIvan Rodriguez
- My Highschool Math Notebook, Vol. 1Uploaded byAnonymous 0U9j6BLllB
- Chandan Mandal 11.docxUploaded byanon_31699417
- Rt Mathematics Year 3Uploaded byKamarul Najmi Hassan

- School LeadershipUploaded byNdra N' Ndri Pollepel
- newtons 3 laws of motionUploaded byapi-243587006
- Chapt 09Uploaded byAbdelmajed Saeed
- Trinidad vs CAUploaded bypyulovincent
- Ask Your BishopUploaded byClarence Tong
- Gifted Hands: The Ben Carson Story by Ben Carson & Cecil Murphey, Chapter 1Uploaded byZondervan
- Ernst Bloch Atheism in Christianity.compressedUploaded byJuanjo Gordillo
- Were the Legal Realists Legal PositivistsUploaded byPrompoing
- sdaie lesson planUploaded byapi-307224989
- Islamic Business EthicsUploaded byImanda Amalia
- Exploratory ResearchUploaded byRashid Hussain
- Sanskrit DictionaryUploaded bySudarshan S. Avadhany
- EXP 3Uploaded byValentinoDullSatin
- Salutation to the Glory of Mary St. John EudesUploaded byLaxmi Espiritu
- A Treatise on the Law of Domicil NationUploaded bycsrcorp
- Danto - The End of Art. a Philosophical DefenseUploaded bynihil_uy
- Allah is NOT GodUploaded byJames Artre
- Onno_FEM_tutorial.pdfUploaded byDaniel Ward
- Eisenstein Sergei the Psychology of CompositionUploaded byanapaulabr
- Job Satisfaction as a Predictor of Organizational Citizenship Behavior.pdfUploaded byMuhammad Zulqarnain
- Cuadernillo Ejercicios y Solucionario Tema 4 IPAUploaded byyuliya
- Research Methodology 2Uploaded byHeena Bhojwani
- Ds Lecture 6Uploaded bynoname1
- The Demonstration of Fourier Series to First Year Undergraduate Engineering StudentsUploaded byesatjournals
- Sobol-The-Monte-Carlo-Method-LML.pdfUploaded byk464265
- Learning TheoriesUploaded byMuhammad Irfan
- The LithuistUploaded byzenwoman
- 101 Practice Exam 1 Spring 2008Uploaded byTotep Reyes
- The JhanasUploaded byCatherine Johnson
- unit1-3rd grade-lesson 4Uploaded byapi-254320911