Models of Distributed Systems
Transcription
Models of Distributed Systems
Models of Distributed Systems Lecture 8 MSD (2015) Lecture 9 1 / 41 Overview 1 CPN-ML 2 Coloured Petri Nets Definition MSD (2015) Lecture 9 2 / 41 CPN-ML Overview 1 CPN-ML 2 Coloured Petri Nets Definition MSD (2015) Lecture 9 3 / 41 CPN-ML Simple color sets in CPN ML:Int color sets declaration syntax: colset name = int [with int exp1..int exp2]; declaration example: colset INT = int; colset SmallInt = int with 1..10; operations: ∼i i1 + i2 , i1 − i2 , i1 ∗ i2 i1 div i2 , i1 mod i2 Int.min(i1 , i2 ), Int.max(i1 , i2 ) If the int type declaration is restricted by the clause ”with” and it contains less than 100 elements, then the type is considered a small type, otherwise it is considered a large type. MSD (2015) Lecture 9 4 / 41 CPN-ML Simple color sets in CPN ML: Boolean color sets declaration syntax: colset name = bool [with (new false, new true)]; values: true, false declaration example: colset B = bool; colset Answer = bool with (no, yes); operations: not b b1 andalso b2 b1 orelse b2 MSD (2015) Lecture 9 5 / 41 CPN-ML Simple color sets in CPN ML Enumeration color sets declaration syntax: colset name = with id0|id1| . . . |idn; declaration example: colset Philosophers = with ph1|ph2|ph3; operations: - general color set functions can be used MSD (2015) Lecture 9 6 / 41 CPN-ML Simple color sets in CPN ML Index color sets declaration syntax: colset name = index id with int exp1..int exp2; The values of the type are id(i) or id i (int exp1 ≤ i ≤ int exp2) declaration example: colset Philosophers = index ph with 1..3; (values: ph(1), ph(2), ph(3)) operations: - general color set functions can be used MSD (2015) Lecture 9 7 / 41 CPN-ML Product color sets declaration syntax: colset name = product name1 ∗ name2 ∗ ... ∗ namen ; (each namei should represent a previously defined color set) values: the values of this type are n-uples (v1 , v2 , . . . , vn ) where each vi is a value of the type (color set) namei . declaration example: colset Name = string; colset Income = int with 500..3000; colset Job type = with tester |analyst|programmer ; colset Employee = product Name ∗ Income ∗ Job type; operations:#i x extracts the i-th element of the tuple x: #2 (”John”, 2000, tester ) is 2000 MSD (2015) Lecture 9 8 / 41 CPN-ML Record color sets declaration syntax: colset name = record id1 : name1 ∗ id2 : name2 ∗ . . . ∗ idn : namen ; values: {id1 = v1 , id2 = v 2, . . . , idn = vn } (each namei is a declared color set and each vi is a value from the type namei ) declaration example: colset Employee = record name : Name ∗ inc : Income ∗ job : Job type; operations: idk rec - extracts the idk element from the record rec: inc {name = ”John”, inc = 2000, job = tester } is 2000 MSD (2015) Lecture 9 9 / 41 CPN-ML Union color sets A union color set is a disjoint union of previously declared color sets. declaration syntax: colset name = union id1 [: name1 ] + id2 [: name2 ] + . . . + idn [: namen ]; (each namei is a previously declared color set) values: idk (v ) or idk v , where v is a value of type namek ; idk if namek is not declared declaration example: colset TeaType = with black tea|white tea|green tea; colset CoffeType = with arabica|robusta; colset Products = union tea : TeaType + coffe : CoffeType + water ; Example of values: tea(black tea), coffe(arabica), water MSD (2015) Lecture 9 10 / 41 CPN-ML List color sets declaration syntax: colset name = list name type[with int exp1..int exp2]; a list of values of the previously declared color set with the name name type values: [v1 , v2 , . . . , vn ] where vi has type name type for i = 1..n. [] denotes the empty list; declaration example: colset LInt = list int with 1..100; MSD (2015) Lecture 9 11 / 41 CPN-ML Some list functions from Standard ML: nil e :: l - prepend element e as head of list l hd l - head, the first element of the list l tl l - tail, list with exception of first element length l - length of list l map f l - use function f on each element in list l and returns a list with all the results List.nth(l, n) - nth element in list l, where 0 ≤ n < length l List.take(l, n) returns first n elements of list l mem l x returns true if element x is in the list l rmall x l removes all appearances (if any) of element x from list l ins l x - inserts element x at the end of list l ins new l x - if x is not a member of list l, then x is inserted at the end of l, otherwise l is returned MSD (2015) Lecture 9 12 / 41 CPN-ML Subset color sets Subsets are a selection of values in a previously declared color set. declaration syntax: 1 colset name = subset name type by subset-function; name type is a previously declared color set, subset − function returns boolean. 2 colset name = subset name type with subset-list; subset − list is a list of elements from name type. declaration example: 1 colset EvenNumbers = subset int by even; even is a previously defined function which returns true if a int number is even and false otherwise 2 colset Philosophers= index Ph with 1..100; colset First3Philosophers = subset Philosophers with [Ph(1), Ph(2), Ph(3)]; MSD (2015) Lecture 9 13 / 41 CPN-ML Variables and expressions Value bindings: val x = expr; A variable is always bound to the same value. If-expressions: if expr bool then expr1 else expr2 expr bool has type bool, expr1 and expr2 must have the same type t; the if expression has type t. MSD (2015) Lecture 9 14 / 41 CPN-ML Patterns and pattern mathcing patterns are used to bind variables to (compound) values by pattern-matching. patterns can be used to decompose compound values. patterns can be seens as special expressions, ”templates” built up with variables and constants. pattern = compound value; Pattern matching: deconstructs compound values and binds their constituents to the corresponding variables. Matching a (compound) value v against a pattern pat will either succeed or fail. If it succeeds, the match rule binds any value identifier of pat to the corresponding value components of v . Like expressions, patterns have types. MSD (2015) Lecture 9 15 / 41 CPN-ML The pattern language A variable can appear only once in a pattern. Patterns can be made from parts that contain other patterns: Wildcard: The pattern (underscore) has an arbitrary type t and matches all values of that type. The actual runtime value is discarded, i.e., it is not bound to any variable. Variable: Any variable name x (except those currently bound to datatype constructors) can be used as a pattern. Such a pattern has an arbitrary type t (which becomes the type of x within its scope) and matches any value of that type. Tuple: If p1 , . . . , pn are patterns of types t1 , . . . , tn then (p1 , . . . , pn ) is a tuple pattern of type t1 ∗ . . . ∗ tn . It matches a value (v1 , . . . , vn ) provided that for all i we have that pi matches vi . In function definitions, tuple patterns are often used to give the illusion of having multiple arguments. MSD (2015) Lecture 9 16 / 41 CPN-ML The pattern language Record Similarly, under the same assumption as above, the pattern {l1 = p1 , . . . , ln = pn } is a record pattern of type {l1 : t1 , . . . , ln : tn } and matches record values of that type. List If p1 , . . . , pn are patterns of type t, then [p1 , . . . , pn ] is a pattern of type t list. It matches list values [v1 , . . . , vn] that are precisely n elements long provided that each element vi matches its corresponding sub-pattern pi . Integer Any integer literal i is a pattern of type int that matches precisely the value i. String Any string literal s is a pattern of type string that matches precisely the value s. MSD (2015) Lecture 9 17 / 41 CPN-ML Patterns colset SI = product STRING ∗ INT ; val x = (”ana”, 2); val (y , z) = (”bbb”, 3); val (y 1, z1) = x; val (y 1, z1) = 2; val z2 :: l = [1, 2, 3, 4] (y , z) is a pattern with two variable, y and z. By pattern-matching, y will be bound to ”bbb” and z to 3. (y 1, z1) is a pattern with two variable, y 1 and z1. By pattern-matching, y 1 will be bound to ”aaa” and z1 to 2. val(y 1, z1) = 2: error z2 is 1 and l the list [2, 3, 4]; MSD (2015) Lecture 9 18 / 41 CPN-ML Patterns val x = ((”ana”, 1), 2); Type of x: (string ∗ int) ∗ int val ((n, i1), 2) = x; n = ”ana”, i1 = 1 val ((n, i1), 1) = x; error! MSD (2015) Lecture 9 19 / 41 CPN-ML Functions in CPN ML function are values belonging to function types of the form DType → RType, where type DType is the domain type (the type of arguments) of the function, and RType is its range type (the type of its results). function expressions: fn arg pattern => expression; or: fn arg pattern : Type => expression; arg is a pattern denoting the argument of the function Functions take a single argument/parameter; multiple arguments/parameters can be simulatated by the use of tuples or records; MSD (2015) Lecture 9 20 / 41 CPN-ML Functions in CPN ML The function expression fn x => x + 1 can be used in function bindings: val inc = fn x => x + 1; inc is binded to a function value of type int → int function invocation: inc 6; or: (fn x => x + 1)(6); after evaluating the expressions, the result is 7; val add = fn (x, y ) => x + y ; add is binded to a function value of type int ∗ int → int MSD (2015) Lecture 9 21 / 41 CPN-ML Functions in CPN ML Function applications: (fn arg pattern => expression)(arg expression): if val Id = fn arg pattern => expression, then function application: Id(arg expression) val Id = fn arg pattern => expression; is equilvalent to: fun Id arg pattern = expression; MSD (2015) Lecture 9 22 / 41 CPN-ML Functions in CPN ML val add = fn (x, y ) => x + y ; is equivalent with: fun add(x, y ) = x + y ; or: fun add(x : int, y : int) = x + y ; or: fun add(x : int, y : int) : int = x + y ; The name (identifier) add is binded to a function value with the type int ∗ int → int MSD (2015) Lecture 9 23 / 41 CPN-ML Function application Let Id arg pattern = expr ; and Id arg expression arg expression is evaluated and a value v is obtained (arg expression should have the same type as expr ) value v is matched against the pattern describing the parameter of the function any variable in the pattern will bind to its corresponding value the body of the function (i.e. expr ) is evaluated in the resulting environment MSD (2015) Lecture 9 24 / 41 CPN-ML Local variables declaration The let construct permits the declaration of locally-scoped variables within a function definition or expression. Synthax let val pat1 = exp1 val pat2 = exp2 ... val patn = expn in exp end; pat1 , . . . , patn are patterns; All variable occuring in these patterns can be used in exp (they bind to corresponding values after pattern matching with exp1 , . . . , expn . the above let construct is an expression having the same type as exp. MSD (2015) Lecture 9 25 / 41 CPN-ML Local variables declaration val y = 5; val x = let val (z, y ) = (2, 4) val x = 2 in x + 2 ∗ y end + y ; val z = 100; val y = 7; val x = if y > 5 then y + let val z = 2 in z ∗ 2 + z end else z; MSD (2015) Lecture 9 26 / 41 CPN-ML Functions in CPN ML The use of let in function expressions: fun length(l) = if l=[] then 0 else let val tail = tl l in if tail = [] then 1 else 1+length(tail) end; MSD (2015) Lecture 9 27 / 41 CPN-ML Functions in CPN ML Clausal definitions of functions: fun id pattern1 = expression1 | id pattern2 = expression2 ... | id patternn = expressionn ; pattern 1, pattern 2, . . . , pattern n are patterns for the functions’s arguments expression1 , expression2 , . . . , expressionn are expressions of the same type. MSD (2015) Lecture 9 28 / 41 CPN-ML Functions in CPN ML fun fact(0)=1 | fact(n)=n*fact(n-1) ; MSD (2015) Lecture 9 29 / 41 CPN-ML Functions in CPN ML fun fact(0)=1 | fact(n)=n*fact(n-1) ; fun length([])=0 | length([a])=1 | length( :: l)=1+length(l); Type of length is list ′ a → int length([”a”, ”b”, ”c”]) length([1, 3, 3]) length([]) MSD (2015) Lecture 9 29 / 41 CPN-ML Functions in CPN ML - Polymorphism fun make multiset(x, y , i) = i ′ x + +i ′ y ; type of make multiset is ′ a ∗′ a ∗ int →′ a ms make multiset(”a”, ”b”, 2) ⇒ 2‘”a” + +2′ ”b” (type string ms) (in standard ML multisets are represented internally as lists [”a”, ”a”, ”b”, ”b”]; make multiset(4, 3, 2) ⇒ 2‘4 + +2‘3 (type int ms) make multiset(”a”, 3, 2) ⇒ error: ”operator and operand don’t agree” operator domain: string ∗ string ∗ int operand: string ∗ int ∗ int MSD (2015) Lecture 9 30 / 41 Coloured Petri Nets Definition Overview 1 CPN-ML 2 Coloured Petri Nets Definition MSD (2015) Lecture 9 31 / 41 Coloured Petri Nets Definition Dining Philosophers 5 philosophers and 5 chopsticks: MSD (2015) Lecture 9 32 / 41 Coloured Petri Nets Definition Dining Philosophers colset Philo = index P with 1..5; colset Chopsticks = index c with 1..5; fun Chopstick (x : Philo) = if x = P(1) then 1‘c(1) + +1‘c(5) else if x = P(2) then 1‘c(1) + +1‘c(2) else if x = P(3) then 1‘c(2) + +1‘c(3) else if x = P(4) then 1‘c(3) + +1‘c(4) else 1‘c(4) + +1‘c(5); MSD (2015) Lecture 9 33 / 41 Coloured Petri Nets Definition Case expression Synthax case expr of pattern1 ⇒ expression1 | pattern2 ⇒ expression2 ... | patternn ⇒ expressionn ; expression1 , . . . , expressionn have all the same type; MSD (2015) Lecture 9 34 / 41 Coloured Petri Nets Definition Dining Philosophers fun Chopstick (P(i)) = case i of 1 => 1‘c(1) + +1‘c(5) |2 => 1‘c(1) + +1‘c(2) |3 => 1‘c(2) + +1‘c(3) |4 => 1‘c(3) + +1‘c(4) | => 1‘c(4) + +1‘c(5); MSD (2015) Lecture 9 35 / 41 Coloured Petri Nets Definition Example fun Chopstick(P(i)) = 1‘c(i) + +1‘c(if i = 1 then 5 else i − 1); MSD (2015) Lecture 9 36 / 41 Coloured Petri Nets Definition Behaviour of Coloured Petri Nets - Steps Definition 1 A step is any finite multiset over BE. The set of all the steps is denoted by Y: Y = {Y ∈ BEMS | 0 < |Y | < ∞} MSD (2015) Lecture 9 37 / 41 Coloured Petri Nets Definition Steps b1 , b2 ∈ B(t1 ): b1 =< x = a, y = b >, b2 =< x = a, y = c > b3 , b4 ∈ B(t2 ): b3 =< x = a, z = r 2 >, b4 =< x = a, z = r 2 > Steps: Y1 = 1′ (t1 , b1 ) + +1′ (t2 , b3 ) Y2 = 2′ (t1 , b1 ) Y3 = 1′ (t1 , b1 ) + +2′ (t1 , b2 ) + +2′ (t2 , b4 ) MSD (2015) Lecture 9 38 / 41 Coloured Petri Nets Definition The firing rule for steps Definition 2 Let CPN = (P, T , F , Σ, C, G, E, I) be a coloured Petri net, Y ∈ Y a step and M a marking of CPN. a step Y is enabled in marking M (M[Y iCPN ) iff: P ∀p ∈ P : (t,b)∈Y E(p, t) < b > ≤ M(p); if M[Y iCPN , then by firing the step Y a new marking M ′ is obtained (M[Y iCPN M ′ ), such that: ∀ p ∈ P : M ′ (p) = M(p) ⊖ P ⊕ (t,b)∈Y E(t, p) < b > . MSD (2015) P (t,b)∈Y ! E(p, t) < b > Lecture 9 39 / 41 Coloured Petri Nets Definition Example Y = (t1 , b1 ) + +(t2 , b2 ), b1 =< x = a, y = c >, b2 =< u = a, z = 3 > M0 [Y i MSD (2015) Lecture 9 40 / 41 Coloured Petri Nets Definition Example M0 [Y iM1 MSD (2015) Lecture 9 40 / 41 Coloured Petri Nets Definition Concurrency Definition 3 Let Y be a step enabled in marking M. If (t1 , b1 ), (t2 , b2 ) ∈ Y and (t1 , b1 ) 6= (t2 , b2 ), then the binding elements (t1 , b1 ) and (t2 , b2 ) are concurrently enabled in M, and also the transitions t1 and t2 are concurrently enabled in M. If Y (t, b) ≥ 2, then the binding element (t, b) is concurrently enabled with itself in M. If ∃(t, b1 ), (t, b2 ) ∈ Y , then transition t is concurrently enabled with itself in M. MSD (2015) Lecture 9 41 / 41