SlideShare a Scribd company logo
1 of 294
Download to read offline
Understanding Distributed Calculi
in Haskell
Pawel Szulc
@rabbitonweb
jobs@pyrofex.net
Understanding Distributed Calculi
in Haskell
Pawel Szulc
@rabbitonweb
Haskell
distributed-process
also known as Cloud Haskell
distributed-process
data Process a
distributed-process
data Process a
ProcessId
send :: Serializable a => ProcessId -> a -> Process ()
distributed-process
data Process a
ProcessId
expect :: forall a. Serializable a => Process a
send :: Serializable a => ProcessId -> a -> Process ()
master
master
ping
pong
master
ping
pong
master
ping
pong
Init(masterPid, pongPid)
master
ping
pong
master
ping
pong
Ping(pingPid)
master
ping
pong
master
ping
pong
Pong
master
ping
master
ping
Done
master
Calculus!
λ-calculus
Syntax
L, M, N :: = x variable
λx.M abstraction
M N application
Few definitions
λx.M
Few definitions
λx.M
Bound variable
Few definitions
λx.λy.(x y x) ≡ λz.λw.(z w z)
alpha equivalence
Few definitions
λx.λy.(x y x) ≡ λz.λw.(z w z)
alpha equivalence
Few definitions
λx.λy.(x y x) ≡ λz.λw.(z w z)
alpha equivalence
Few definitions
λx.M ≡ λy.M {y/x} alpha conversion
Few definitions
λx.(x y)
Few definitions
λx.(x y)
free variable
Beta reduction
● Applying argument to a function.
Beta reduction
● Applying argument to a function.
● Consider it as a single computation step.
Beta reduction
(λx.N) M ➝ N{M/x}
Beta reduction - example
Beta reduction - example
(λx.λy.x) z w
Beta reduction - example
(λx.λy.x) z w ➝
(λy.z) w
Beta reduction - example
(λx.λy.x) z w ➝
(λy.z) w ➝
z
Is that it?
L, M, N :: = x
λx.M
M N
(λx.N) M ➝ N{M/x}
Is that it?
L, M, N :: = x
λx.M
M N
(λx.N) M ➝ N{M/x}
Encodings
Encodings
● support for multi argument functions
λ(x,y).M
Encodings
● support for multi argument functions
λ(x,y).M ≡ λx.λy.M
Encodings
● support for multi argument functions
○ Moses Schönfinkel
Encodings
● support for multi argument functions
○ Haskell Curry
Encodings
● support for multi argument functions
● boolean values
Encodings
● support for multi argument functions
● boolean values
True = λt.λf.t
False = λt.λf.f
Encodings
● support for multi argument functions
● boolean values
True = λt.λf.t
False = λt.λf.f
If = λl.λm.λn l m n
And = λb.λc. b c False
Encodings
● support for multi argument functions
● boolean values
● Church numerals
Is there a
calculus for
distributed
computing?
Is there a calculus for distributed computing?
“The inevitability of the lambda-calculus arises
from the fact that the only way to observe a
functional computation is to watch which output
values it yields when presented with different
input values” [1]
Is there a calculus for distributed computing?
“Unfortunately, the world of concurrent
computation is not so orderly. Different notions of
what can be observed may be appropriate in
different circumstances, giving rise to different
definitions of when two concurrent systems have
‘the same behavior’ ” [1]
CCS & CSP
CCS & CSP
CCS - Calculus of Communicating Systems [3]
CSP - Communicating Sequential Processes [4]
π-calculus
What is π-calculus
“π -calculus is a model of computation for
concurrent systems.” [2]
What is π-calculus
“In lambda-calculus everything is a function (...)
In the pi-calculus every expression denotes a
process - a free-standing computational activity,
running in parallel with other process.” [1]
What is π-calculus
“Two processes can interact by exchanging a
message on a channel” [1]
What is π-calculus
“It lets you represent processes, parallel
composition of processes, synchronous
communication between processes through
channels, creation of fresh channels, replication of
processes, and nondeterminism.” [2]
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Input and output example
Model a program that runs single process P, which
sends message hello on channel x and then
receives a message msg on the same channel x.
Input and output example
P :: =x(hello).x(msg).0
Input and output example
P :: = x(hello).x(msg).0
P
Input and output example
P :: = x(hello).x(msg).0
P
xhello
Input and output example
P :: = x(hello).x(msg).0
P x
hello
Input and output example
P :: = x(hello).x(msg).0
P x
hello
Input and output example
P :: = x(hello).x(msg).0
P x
hello
Input and output example
P :: = x(hello).x(msg).0
P x
hello
Input and output example
P :: = x(hello).x(msg).0
P x
msg
Input and output example
P :: = x(hello).x(msg).0
Input and output example
P :: = x(hello).x(msg).0
Input and output example
P :: = x(hello).x(msg).0
P
xhello
Input and output example
P :: = x(hello).x(msg).0
P
xhello
Waits for message ‘msg’ on channel
‘x’, before continuing.
Input and output example
P :: = x(hello).x(msg).0
P
xhello
This is a synchronous call.
It waits until somebody receives it.
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
How to pronounce ν?
lower-case: ν
sound: Nee
greek name: Νι
How to pronounce ν?
lower-case: ν
sound: Nee
greek name: Νι
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
(νx)P restriction bounds a variable
P ::= yx.0
(νx)P restriction bounds a variable
P ::= yx.0
Q ::= (νx)P
(νx)P restriction bounds a variable
P ::= yx.0
Q ::= (νx)P →
(νx)(yx.0)
(νx)P restriction bounds a variable
(νx)yx.0 == (νz)yz.0
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Input and output example revisited
P :: = x(hello).0
Q :: =x(msg).0
R :: = νx(P | Q).0
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
R
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
R
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
P Q
R
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
P Qx
R
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
P Qx
hello
R
Input and output example revisited
P :: = x(hello)
Q :: =x(msg)
R :: = νx(P | Q)
P Qx
hello
R
Input and output example revisited
P :: = x(hello)
Q :: = x(msg)
R :: = νx(P | Q)
Q
msg
R
Input and output example revisited
P :: = x(hello)
Q :: = x(msg)
R :: = νx(P | Q)
Input and output example revisited
P :: = x(hello)
Q :: = x(msg)
R :: = νx(P | Q)
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Structural Congruence
“Two processes are structurally congruent, if they
are identical up to structure.” [5]
Structural Congruence
P | Q ≡ Q | P commutativity of parallel composition
Structural Congruence
P | Q ≡ Q | P commutativity of parallel composition
(P | Q) | R ≡ P | (Q | R) associativity of parallel composition
Structural Congruence
P | Q ≡ Q | P commutativity of parallel composition
(P | Q) | R ≡ P | (Q | R) associativity of parallel composition
((νx)P) | Q ≡ (νx)(P | Q) “scope extrusion”
Structural Congruence
P | Q ≡ Q | P commutativity of parallel composition
(P | Q) | R ≡ P | (Q | R) associativity of parallel composition
((νx)P) | Q ≡ (νx)(P | Q) “scope extrusion”
!P ≡ P | !P replication
Structural Congruence
P | Q ≡ Q | P commutativity of parallel composition
(P | Q) | R ≡ P | (Q | R) associativity of parallel composition
((νx)P) | Q ≡ (νx)(P | Q) “scope extrusion”
!P ≡ P | !P replication
(νx)(νy)P ≡ (νy)(νx)P restriction
Reduction rules ⟶
Think of it as a operational semantics.
P ⟶ P’ represents a single computation step
Reduction rules ⟶
xy.P | x(z).Q communication
Reduction rules ⟶
xy.P | x(z).Q communication
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → if P → Q reduction under |
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
(νx)P → if P → Q reduction under ν
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
(νx)P → (νx)Q if P → Q reduction under ν
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
(νx)P → (νx)Q if P → Q reduction under ν
P → if P ≡ P’ Q’ ≡ Q structural congruence
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
(νx)P → (νx)Q if P → Q reduction under ν
P → if P ≡ P’ → Q’ ≡ Q structural congruence
Reduction rules ⟶
xy.P | x(z).Q → P | [y/z]Q communication
P | R → Q | R if P → Q reduction under |
(νx)P → (νx)Q if P → Q reduction under ν
P → Q if P ≡ P’ → Q’ ≡ Q structural congruence
Some examples(1) - PingPong
PING ::= x(ping).x(pong)
PONG ::= x(ping).x(pong)
P ::= PING | PONG
Some examples(1) - PingPong
PING ::= x(ping).x(pong)
PONG ::= x(ping).x(pong)
P ::= x(ping).x(pong) | x(ping).x(pong)
Some examples(1) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong)
Some examples(1) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= x(pong) | x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= x(pong) | x(pong)
Some examples(1) - PingPong
P ::= x(pong) | x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= x(pong) | x(pong)
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= 0 | 0
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(1) - PingPong
P ::= 0 | 0
Some examples(1) - PingPong
P ::= 0 | 0
P | 0 ≡ P missing equivalence?
Some examples(1) - PingPong
P ::= 0 | 0
P | 0 ≡ P wikipedia equivalence
Some examples(1) - PingPong
P ::= 0
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)(P | Q)
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)xy.yw.yz | x(y).y(h).y(h))
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)xy.yw.yz | x(y).y(h).y(h))
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)xy.yw.yz | x(y).y(h).y(h))
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)yw.yz | y(h).y(h))
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)yw.yz | y(h).y(h))
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy)yz | y(h))
xy.P | x(z).Q → P | [y/z]Q communication
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= (νx)((νy) 0 | 0)
Some examples(0) - Sending channels
P ::= (νy)xy.yw.yz
Q ::= x(y).y(h).y(h)
R ::= 0
Some examples(2) - PingPong
PING ::= x(ping).x(pong)
PONG ::= x(ping).x(pong)
P ::= PING | PONG | PONG
Some examples(2) - PingPong
P ::= PING | PONG | PONG
Some examples(2) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong) | x(ping).x(pong)
Some examples(2) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong) | x(ping).x(pong)
Some examples(2) - PingPong
P ::= x(ping).x(pong) | x(ping).x(pong) | x(ping).x(pong)
Some examples(2) - PingPong
P ::=x(pong) | x(ping).x(pong) |x(pong)
Some examples(2) - PingPong
P ::=x(pong) | x(ping).x(pong) |x(pong)
Some examples(2) - PingPong
P ::= 0 | x(ping).x(pong) | 0
Some examples(3) - PingPong
PING ::= x(ping).x(pong)
PONG ::= x(ping).x(pong)
P ::= PING | PONG
Some examples(3) - PingPong
PING ::= x(ping).x(pong)
PONG ::= x(ping).x(pong)
P ::= !PING | !PONG
Some examples(3) - PingPong
P ::= !PING | !PONG
Some examples(3) - PingPong
P ::= !PING | !PONG
!P ≡ P | !P replication
Some examples(3) - PingPong
P ::= PING | !PING | PONG | !PONG
!P ≡ P | !P replication
Some examples(3) - PingPong
P ::= PING | !PING | PONG | !PONG
Some examples(3) - PingPong
P ::= 0 | !PING | 0 | !PONG
Some examples(3) - PingPong
P ::= 0 | PING | !PING | 0 | PONG | !PONG
Some examples(3) - PingPong
P ::= 0 | 0 | !PING | 0 | 0 | !PONG
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
P ::= 0 | xz | y(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
P ::= 0 | xz | y(v) P ::= xy | 0 | z(v)
Some examples(4) - Race Conditions
P ::= xy | xz | x(w).w(v)
P ::= xz | y(v) P ::= xy | z(v)
Two processes P and Q are bisimilar if ...
“Two processes P and Q are bisimilar if every
action of one can be matched by a corresponding
action of the other to reach bisimilar state” [1]
Benefits
● reason about computation
● detect dead-locks
● detect non-determinism
● reason about structure
● good to describe protocols
● a formal framework for providing semantics for
a high-level language
distributed-process
Revisited
Typed channels
data SendPort a
data ReceivePort a
Typed channels
data SendPort a
data ReceivePort a
newChan :: Serializable a => Process (SendPort a, ReceivePort a)
Typed channels
data SendPort a
data ReceivePort a
newChan :: Serializable a => Process (SendPort a, ReceivePort a)
sendChan :: Serializable a => SendPort a -> a -> Process ()
receiveChan :: Serializable a => ReceivePort a -> Process a
Example
MASTER ::= (νx)(cx.cx.(PING | PONG).c(done)
PING ::= c(x).x(ping).x(pong).x(done)
PONG::= c(x).x(ping).x(pong)
Implementation issue...
“This seems quite natural.(...).But there’s a big problem here.
ReceivePorts are not Serializable, which prevents us passing
the ReceivePort r1 to the spawned process. GHC will reject the
program with a type error.” [8]
Implementation issue...
“Why are ReceivePorts not Serializable? If you think about it a
bit, this makes a lot of sense. If a process were allowed to send
a ReceivePort somewhere else, the implementation would have
to deal with two things: routing messages to the correct desti‐
nation when a ReceivePort has been forwarded (possibly
multiple times), and routing messages to multiple destinations,
because sending a ReceivePort would create a new copy.” [8]
Implementation issue...
“This would introduce a vast amount of complexity to the
implementation, and it is not at all clear that it is a good feature
to allow. So the remote framework explicitly disallows it,
which fortunately can be done using Haskell’s type system.”
[8]
Issues
● synchronous by nature
● receiving on send channel - implementation
dilemmas
● notion of creating a named channel
async π-calculus
Chemical State Machine
“The chemical abstract machine” G. Berry, G. Boudl
Chemical State Machine
“The chemical abstract machine” G. Berry, G. Boudl
Chemical State Machine
“The chemical abstract machine” G. Berry, G. Boudl
Chemical State Machine
“The chemical abstract machine” G. Berry, G. Boudl
Chemical State Machine
“The chemical abstract machine” G. Berry, G. Boudl
Sync π syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Async π syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy.P output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Async π syntax
P, Q, R :: = 0 inert process
x(y).P input prefix
xy output prefix
P | Q parallel composition
(νx)P restriction
!P replication
Benefits
● almost all expressive power of classical
pi-calculus
● models asynchronous computation
Issues
● Is not a closed theory
● Heating / cooling rules seem like an overkill
● Not as powerful as synchronous version
○ “Comparing the expressive power of the synchronous
and asynchronous pi-calculus” Catuscia Palamidessi
ρ-calculus
ρ-calculus
“The π-calculus is not a closed theory, but rather
a theory dependent upon some theory of names.
(...) names may be tcp/ip ports or urls or object
references, etc. But, foundationally, one might ask
if there is a closed theory of processes, i.e. one in
which the theory of names arises from and is
wholly determined by the theory of processes.” [7]
Quoting
“Here we present a theory of an asynchronous
message-passing calculus built on a notion of
quoting. Names are quoted processes, and as such
represent the code of a process.(...) Name-passing,
then becomes a way of passing the code of a
process as a message.” [7]
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
x⦉P⦊
“Process P will be packaged up as its code, ⌜P⌝,
and ultimately made available as an output at the
port x” [7]
x⦉P⦊
“Process P will be packaged up as its code, ⌜P⌝,
and ultimately made available as an output at the
port x” [7]
“The lift operator turns out to play a role
analogous to (νx)”
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
⌝x⌜
“The ⌝x⌜ operator (...) eventually extracts the
process from a name. We say ‘eventually’ because
this extraction only happens when quoted process
is substituted into this expression.” [7]
⌝x⌜
“A consequence of this behaviour is that the ⌝x⌜ is
inert, except under an input prefix” [7]
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
x(y) - syntactic sugar
x(y) ≜ x⦉⌝y⌜⦊
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Syntax
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
How to create a single name even?
P, Q ::= 0 inert process
x(y).P input
⌝x⌜ drop
x⦉P⦊ lift
P | Q parallel
x, y ::= ⌜P⌝ quote
Name game!
x ::= ⌜?⌝
Name game!
x ::= ⌜0⌝
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
x(y) output
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝ // ⌜x(x)⌝
x(y) output
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
z ::= ⌜⌜0⌝(⌜0⌝).0⌝
x(y).P input
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
z ::= ⌜⌜0⌝(⌜0⌝).0⌝ // ⌜x(x).0⌝
x(y).P input
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
z ::= ⌜⌜0⌝(⌜0⌝).0⌝
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
z ::= ⌜⌜0⌝(⌜0⌝).0⌝
q ::= ⌜0 | 0 ⌝
Name game!
x ::= ⌜0⌝
y ::= ⌜⌜0⌝(⌜0⌝)⌝
z ::= ⌜⌜0⌝(⌜0⌝).0⌝
q ::= ⌜0 | 0 ⌝
p ::= ⌜0 | 0 | 0 ⌝
Are those different names?
x ::= ⌜0⌝
q ::= ⌜0 | 0 ⌝
p ::= ⌜0 | 0 | 0 ⌝
Are those different names?
“This question leads to several intriguing and
apparently fundamental questions. Firstly, if
names have structure, what is a reasonable notion
of equality on names? How much computation, and
of what kind, should go into ascertaining equality
on names?” [7]
Structural congruence
P | 0 ≡ P ≡ 0 | P
P | Q ≡ Q | P
(P | Q) | R ≡ P | (Q | R)
alpha-equivalence
x(z).w⦉y(z)⦊
x(v).w⦉y(v)⦊
alpha-equivalence
x(z).w⦉y(z)⦊
x(v).w⦉y(v)⦊
x(v).w⦉y(v)⦊ {z/v}
Name equivalence
⌜⌝x⌜⌝ ≡ x quote-drop
P ≡ Q ➝ ⌝P⌜ ≡ ⌝Q⌜ struct-equiv
Wait, what?
⌜⌝x⌜⌝ ≡ x
P ≡ Q ➝ ⌝P⌜ ≡ ⌝Q⌜
P | 0 ≡ P ≡ 0 | P
P | Q ≡ Q | P
(P | Q) | R ≡ P | (Q | R)
Wait, what?
⌜⌝x⌜⌝ ≡ x
P ≡ Q ➝ ⌝P⌜ ≡ ⌝Q⌜
P | 0 ≡ P ≡ 0 | P
P | Q ≡ Q | P
(P | Q) | R ≡ P | (Q | R)
“If you made them and they made you...”
⌜⌝x⌜⌝ ≡ x
P ≡ Q ➝ ⌝P⌜ ≡ ⌝Q⌜
P | 0 ≡ P ≡ 0 | P
P | Q ≡ Q | P
(P | Q) | R ≡ P | (Q | R)
It all works out...
⌜⌝x⌜⌝ ≡ x
P ≡ Q ➝ ⌝P⌜ ≡ ⌝Q⌜
P | 0 ≡ P ≡ 0 | P
P | Q ≡ Q | P
(P | Q) | R ≡ P | (Q | R)
Operational Semantics
Operational Semantics
x0
≡ x1
then x0
⦉(Q)⦊ | x1
(y).P ➝ P {⌝Q⌜/y}
Operational Semantics
x0
≡ x1
then x0
⦉(Q)⦊ | x1
(y).P ➝ P {⌝Q⌜/y}
P ➝ P’ then P | Q ➝ P’ | Q
Operational Semantics
x0
≡ x1
then x0
⦉(Q)⦊ | x1
(y).P ➝ P {⌝Q⌜/y}
P ➝ P’ then P | Q ➝ P’ | Q
P ≡ P’ and Q ≡ Q’ and Q’ ➝ P’ then P ➝ Q
x(y) - syntactic sugar
x(y) ≜ x⦉⌝y⌜⦊
x(y) - syntactic sugar proof!
x(z) | x(y).P
x(y) - syntactic sugar proof!
x(z) | x(y).P
P {z/y}
x(y) - syntactic sugar proof!
x(z) | x(y).P
x(y) - syntactic sugar proof!
x(z) | x(y).P ➝
x⦉⌝z⌜⦊ | x(y).P
x(y) - syntactic sugar proof!
x(z) | x(y).P ➝
x⦉⌝z⌜⦊ | x(y).P ➝
P {⌜⌝z⌜⌝/y}
x(y) - syntactic sugar proof!
x(z) | x(y).P ➝
x⦉⌝z⌜⦊ | x(y).P ➝
P {⌜⌝z⌜⌝/y} ≡
P {z/y}
RHO-lang
● Bisimulation
What we have not covered?
References
1 “Foundational Calculi for Programming Languages” Benjamin C. Pierce
2 "FAQ on π-Calculus" Jeannette M. Wing
3 “A Calculus of Communicating Systems” Robin Milner
4 “Communicating Sequential Processes” C.A.R Hoare
5 https://en.wikipedia.org/wiki/%CE%A0-calculus
6 “The Polyadic Pi-Calculus: a Tutorial” Robin Milner
7 “A Reflective Higher-Ordered Calculus” L.G. Meredith, Matthias Radestock
8 “Parallel and Concurrent Programming in Haskell: Techniques for Multicore”
Pawel Szulc@rabbitonweb
THE END
jobs@pyrofex.net

More Related Content

What's hot

Jyokyo-kai-20120605
Jyokyo-kai-20120605Jyokyo-kai-20120605
Jyokyo-kai-20120605ketanaka
 
Sep logic slide
Sep logic slideSep logic slide
Sep logic sliderainoftime
 
Approximate Bayesian Computation with Quasi-Likelihoods
Approximate Bayesian Computation with Quasi-LikelihoodsApproximate Bayesian Computation with Quasi-Likelihoods
Approximate Bayesian Computation with Quasi-LikelihoodsStefano Cabras
 
Delayed acceptance for Metropolis-Hastings algorithms
Delayed acceptance for Metropolis-Hastings algorithmsDelayed acceptance for Metropolis-Hastings algorithms
Delayed acceptance for Metropolis-Hastings algorithmsChristian Robert
 
Bayesian hybrid variable selection under generalized linear models
Bayesian hybrid variable selection under generalized linear modelsBayesian hybrid variable selection under generalized linear models
Bayesian hybrid variable selection under generalized linear modelsCaleb (Shiqiang) Jin
 
Linear Machine Learning Models with L2 Regularization and Kernel Tricks
Linear Machine Learning Models with L2 Regularization and Kernel TricksLinear Machine Learning Models with L2 Regularization and Kernel Tricks
Linear Machine Learning Models with L2 Regularization and Kernel TricksFengtao Wu
 
ABC-Xian
ABC-XianABC-Xian
ABC-XianDeb Roy
 
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmChristian Robert
 
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...SEENET-MTP
 
Code of the multidimensional fractional pseudo-Newton method using recursive ...
Code of the multidimensional fractional pseudo-Newton method using recursive ...Code of the multidimensional fractional pseudo-Newton method using recursive ...
Code of the multidimensional fractional pseudo-Newton method using recursive ...mathsjournal
 
Theory of Automata and formal languages unit 1
Theory of Automata and formal languages unit 1Theory of Automata and formal languages unit 1
Theory of Automata and formal languages unit 1Abhimanyu Mishra
 

What's hot (20)

QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
 
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
 
Jyokyo-kai-20120605
Jyokyo-kai-20120605Jyokyo-kai-20120605
Jyokyo-kai-20120605
 
Sep logic slide
Sep logic slideSep logic slide
Sep logic slide
 
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
QMC Program: Trends and Advances in Monte Carlo Sampling Algorithms Workshop,...
 
Stack of Tasks Course
Stack of Tasks CourseStack of Tasks Course
Stack of Tasks Course
 
QMC: Transition Workshop - Probabilistic Integrators for Deterministic Differ...
QMC: Transition Workshop - Probabilistic Integrators for Deterministic Differ...QMC: Transition Workshop - Probabilistic Integrators for Deterministic Differ...
QMC: Transition Workshop - Probabilistic Integrators for Deterministic Differ...
 
Approximate Bayesian Computation with Quasi-Likelihoods
Approximate Bayesian Computation with Quasi-LikelihoodsApproximate Bayesian Computation with Quasi-Likelihoods
Approximate Bayesian Computation with Quasi-Likelihoods
 
Lecture 11 f17
Lecture 11 f17Lecture 11 f17
Lecture 11 f17
 
Delayed acceptance for Metropolis-Hastings algorithms
Delayed acceptance for Metropolis-Hastings algorithmsDelayed acceptance for Metropolis-Hastings algorithms
Delayed acceptance for Metropolis-Hastings algorithms
 
Richard Everitt's slides
Richard Everitt's slidesRichard Everitt's slides
Richard Everitt's slides
 
Bayesian hybrid variable selection under generalized linear models
Bayesian hybrid variable selection under generalized linear modelsBayesian hybrid variable selection under generalized linear models
Bayesian hybrid variable selection under generalized linear models
 
Lecture 4 f17
Lecture 4 f17Lecture 4 f17
Lecture 4 f17
 
Linear Machine Learning Models with L2 Regularization and Kernel Tricks
Linear Machine Learning Models with L2 Regularization and Kernel TricksLinear Machine Learning Models with L2 Regularization and Kernel Tricks
Linear Machine Learning Models with L2 Regularization and Kernel Tricks
 
ABC-Xian
ABC-XianABC-Xian
ABC-Xian
 
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
 
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...
Aurelian Isar - Decoherence And Transition From Quantum To Classical In Open ...
 
Shanghai tutorial
Shanghai tutorialShanghai tutorial
Shanghai tutorial
 
Code of the multidimensional fractional pseudo-Newton method using recursive ...
Code of the multidimensional fractional pseudo-Newton method using recursive ...Code of the multidimensional fractional pseudo-Newton method using recursive ...
Code of the multidimensional fractional pseudo-Newton method using recursive ...
 
Theory of Automata and formal languages unit 1
Theory of Automata and formal languages unit 1Theory of Automata and formal languages unit 1
Theory of Automata and formal languages unit 1
 

Similar to Understanding Distributed Calculi in Haskell

Formal methods 5 - Pi calculus
Formal methods   5 - Pi calculusFormal methods   5 - Pi calculus
Formal methods 5 - Pi calculusVlad Patryshev
 
A Context-Based Semantics for SPARQL Property Paths over the Web
A Context-Based Semantics for SPARQL Property Paths over the WebA Context-Based Semantics for SPARQL Property Paths over the Web
A Context-Based Semantics for SPARQL Property Paths over the WebOlaf Hartig
 
Otter 2016-11-28-01-ss
Otter 2016-11-28-01-ssOtter 2016-11-28-01-ss
Otter 2016-11-28-01-ssRuo Ando
 
Kolev skalna2018 article-exact_solutiontoa_parametricline
Kolev skalna2018 article-exact_solutiontoa_parametriclineKolev skalna2018 article-exact_solutiontoa_parametricline
Kolev skalna2018 article-exact_solutiontoa_parametriclineAlina Barbulescu
 
Expectation propagation
Expectation propagationExpectation propagation
Expectation propagationDong Guo
 
Pistache: A π-Calculus Internal Domain Specific Language for Scala
Pistache: A π-Calculus Internal Domain Specific Language for ScalaPistache: A π-Calculus Internal Domain Specific Language for Scala
Pistache: A π-Calculus Internal Domain Specific Language for Scalapmatiello
 
Truth, deduction, computation lecture b
Truth, deduction, computation   lecture bTruth, deduction, computation   lecture b
Truth, deduction, computation lecture bVlad Patryshev
 
Q-Metrics in Theory and Practice
Q-Metrics in Theory and PracticeQ-Metrics in Theory and Practice
Q-Metrics in Theory and PracticeMagdi Mohamed
 
Q-Metrics in Theory And Practice
Q-Metrics in Theory And PracticeQ-Metrics in Theory And Practice
Q-Metrics in Theory And Practiceguest3550292
 
Probabilistic Control of Switched Linear Systems with Chance Constraints
Probabilistic Control of Switched Linear Systems with Chance ConstraintsProbabilistic Control of Switched Linear Systems with Chance Constraints
Probabilistic Control of Switched Linear Systems with Chance ConstraintsLeo Asselborn
 
Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Charles Martin
 
Information in the Weights
Information in the WeightsInformation in the Weights
Information in the WeightsMark Chang
 
Information in the Weights
Information in the WeightsInformation in the Weights
Information in the WeightsMark Chang
 
Coordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like samplerCoordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like samplerChristian Robert
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemTMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemIosif Itkin
 

Similar to Understanding Distributed Calculi in Haskell (20)

Formal methods 5 - Pi calculus
Formal methods   5 - Pi calculusFormal methods   5 - Pi calculus
Formal methods 5 - Pi calculus
 
A Context-Based Semantics for SPARQL Property Paths over the Web
A Context-Based Semantics for SPARQL Property Paths over the WebA Context-Based Semantics for SPARQL Property Paths over the Web
A Context-Based Semantics for SPARQL Property Paths over the Web
 
Otter 2016-11-28-01-ss
Otter 2016-11-28-01-ssOtter 2016-11-28-01-ss
Otter 2016-11-28-01-ss
 
Kolev skalna2018 article-exact_solutiontoa_parametricline
Kolev skalna2018 article-exact_solutiontoa_parametriclineKolev skalna2018 article-exact_solutiontoa_parametricline
Kolev skalna2018 article-exact_solutiontoa_parametricline
 
dma_ppt.pdf
dma_ppt.pdfdma_ppt.pdf
dma_ppt.pdf
 
Expectation propagation
Expectation propagationExpectation propagation
Expectation propagation
 
chapter9.ppt
chapter9.pptchapter9.ppt
chapter9.ppt
 
Pistache: A π-Calculus Internal Domain Specific Language for Scala
Pistache: A π-Calculus Internal Domain Specific Language for ScalaPistache: A π-Calculus Internal Domain Specific Language for Scala
Pistache: A π-Calculus Internal Domain Specific Language for Scala
 
Truth, deduction, computation lecture b
Truth, deduction, computation   lecture bTruth, deduction, computation   lecture b
Truth, deduction, computation lecture b
 
Q-Metrics in Theory and Practice
Q-Metrics in Theory and PracticeQ-Metrics in Theory and Practice
Q-Metrics in Theory and Practice
 
Q-Metrics in Theory And Practice
Q-Metrics in Theory And PracticeQ-Metrics in Theory And Practice
Q-Metrics in Theory And Practice
 
Probabilistic Control of Switched Linear Systems with Chance Constraints
Probabilistic Control of Switched Linear Systems with Chance ConstraintsProbabilistic Control of Switched Linear Systems with Chance Constraints
Probabilistic Control of Switched Linear Systems with Chance Constraints
 
Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3Applied machine learning for search engine relevance 3
Applied machine learning for search engine relevance 3
 
Information in the Weights
Information in the WeightsInformation in the Weights
Information in the Weights
 
Logic
LogicLogic
Logic
 
Information in the Weights
Information in the WeightsInformation in the Weights
Information in the Weights
 
1. Logic and Proofs.ppt
1. Logic and Proofs.ppt1. Logic and Proofs.ppt
1. Logic and Proofs.ppt
 
Coordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like samplerCoordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like sampler
 
DISMATH_Part1
DISMATH_Part1DISMATH_Part1
DISMATH_Part1
 
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light SystemTMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
 

More from Pawel Szulc

Getting acquainted with Lens
Getting acquainted with LensGetting acquainted with Lens
Getting acquainted with LensPawel Szulc
 
Maintainable Software Architecture in Haskell (with Polysemy)
Maintainable Software Architecture in Haskell (with Polysemy)Maintainable Software Architecture in Haskell (with Polysemy)
Maintainable Software Architecture in Haskell (with Polysemy)Pawel Szulc
 
Painless Haskell
Painless HaskellPainless Haskell
Painless HaskellPawel Szulc
 
Trip with monads
Trip with monadsTrip with monads
Trip with monadsPawel Szulc
 
Trip with monads
Trip with monadsTrip with monads
Trip with monadsPawel Szulc
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineersPawel Szulc
 
Software engineering the genesis
Software engineering  the genesisSoftware engineering  the genesis
Software engineering the genesisPawel Szulc
 
Make your programs Free
Make your programs FreeMake your programs Free
Make your programs FreePawel Szulc
 
Going bananas with recursion schemes for fixed point data types
Going bananas with recursion schemes for fixed point data typesGoing bananas with recursion schemes for fixed point data types
Going bananas with recursion schemes for fixed point data typesPawel Szulc
 
“Going bananas with recursion schemes for fixed point data types”
“Going bananas with recursion schemes for fixed point data types”“Going bananas with recursion schemes for fixed point data types”
“Going bananas with recursion schemes for fixed point data types”Pawel Szulc
 
Writing your own RDD for fun and profit
Writing your own RDD for fun and profitWriting your own RDD for fun and profit
Writing your own RDD for fun and profitPawel Szulc
 
The cats toolbox a quick tour of some basic typeclasses
The cats toolbox  a quick tour of some basic typeclassesThe cats toolbox  a quick tour of some basic typeclasses
The cats toolbox a quick tour of some basic typeclassesPawel Szulc
 
Introduction to type classes
Introduction to type classesIntroduction to type classes
Introduction to type classesPawel Szulc
 
Functional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenFunctional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenPawel Szulc
 
Apache spark workshop
Apache spark workshopApache spark workshop
Apache spark workshopPawel Szulc
 
Introduction to type classes in 30 min
Introduction to type classes in 30 minIntroduction to type classes in 30 min
Introduction to type classes in 30 minPawel Szulc
 
Real world gobbledygook
Real world gobbledygookReal world gobbledygook
Real world gobbledygookPawel Szulc
 
Apache spark when things go wrong
Apache spark   when things go wrongApache spark   when things go wrong
Apache spark when things go wrongPawel Szulc
 

More from Pawel Szulc (20)

Getting acquainted with Lens
Getting acquainted with LensGetting acquainted with Lens
Getting acquainted with Lens
 
Impossibility
ImpossibilityImpossibility
Impossibility
 
Maintainable Software Architecture in Haskell (with Polysemy)
Maintainable Software Architecture in Haskell (with Polysemy)Maintainable Software Architecture in Haskell (with Polysemy)
Maintainable Software Architecture in Haskell (with Polysemy)
 
Painless Haskell
Painless HaskellPainless Haskell
Painless Haskell
 
Trip with monads
Trip with monadsTrip with monads
Trip with monads
 
Trip with monads
Trip with monadsTrip with monads
Trip with monads
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Illogical engineers
Illogical engineersIllogical engineers
Illogical engineers
 
Software engineering the genesis
Software engineering  the genesisSoftware engineering  the genesis
Software engineering the genesis
 
Make your programs Free
Make your programs FreeMake your programs Free
Make your programs Free
 
Going bananas with recursion schemes for fixed point data types
Going bananas with recursion schemes for fixed point data typesGoing bananas with recursion schemes for fixed point data types
Going bananas with recursion schemes for fixed point data types
 
“Going bananas with recursion schemes for fixed point data types”
“Going bananas with recursion schemes for fixed point data types”“Going bananas with recursion schemes for fixed point data types”
“Going bananas with recursion schemes for fixed point data types”
 
Writing your own RDD for fun and profit
Writing your own RDD for fun and profitWriting your own RDD for fun and profit
Writing your own RDD for fun and profit
 
The cats toolbox a quick tour of some basic typeclasses
The cats toolbox  a quick tour of some basic typeclassesThe cats toolbox  a quick tour of some basic typeclasses
The cats toolbox a quick tour of some basic typeclasses
 
Introduction to type classes
Introduction to type classesIntroduction to type classes
Introduction to type classes
 
Functional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heavenFunctional Programming & Event Sourcing - a pair made in heaven
Functional Programming & Event Sourcing - a pair made in heaven
 
Apache spark workshop
Apache spark workshopApache spark workshop
Apache spark workshop
 
Introduction to type classes in 30 min
Introduction to type classes in 30 minIntroduction to type classes in 30 min
Introduction to type classes in 30 min
 
Real world gobbledygook
Real world gobbledygookReal world gobbledygook
Real world gobbledygook
 
Apache spark when things go wrong
Apache spark   when things go wrongApache spark   when things go wrong
Apache spark when things go wrong
 

Recently uploaded

BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 

Recently uploaded (20)

2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 

Understanding Distributed Calculi in Haskell