Refinements for Session-typed Concurrency
Josh Acay & Frank Pfenning
1 May 4, 2016
Refinements for Session-typed Concurrency Josh Acay & Frank - - PowerPoint PPT Presentation
Refinements for Session-typed Concurrency Josh Acay & Frank Pfenning May 4, 2016 1 Message-passing Concurrency Processes represented as nodes Channels between processes as edges Each channel is provided by a specific
1 May 4, 2016
P c Q d R e
2 May 4, 2016
P c Q d R e
3 May 4, 2016
P c Q d R e 3
3 May 4, 2016
P c Q d R e 3 “aaa”
3 May 4, 2016
P c Q d R e 3 “aaa” end
3 May 4, 2016
P c Q d 3 “aaa”
3 May 4, 2016
P c Q d R e
4 May 4, 2016
P c Q d R e e
4 May 4, 2016
P c Q d e R e
4 May 4, 2016
P c : B Q
d : int ⊃ string ∧ A
R e : 1
5 May 4, 2016
P c : B Q 3 R e : 1
d : string ∧ A 5 May 4, 2016
P c : B Q 3 “aaa” R e : 1
d : A 5 May 4, 2016
P c : B Q 3 “aaa” end R e : 1
d : A 5 May 4, 2016
P c : B Q 3 “aaa”
d : A 5 May 4, 2016
1 Terminate &{labi:Ai}i External choice (receive) between labi, continue as Ai A –o B Receive channel of type A, continue as B τ ⊃ B Receive value of type τ, continue as B
A ⊗ B Send channel of type A, continue as B τ ∧ B Send value of type τ, continue as B
queue = &{enq: A –o queue, deq: ⊕{none: 1, some: A ⊗ queue}}
* where A is some predetermined type
6 May 4, 2016
queue = &{enq: A –o queue, deq: ⊕{none: 1, some: A ⊗ queue}} empty : queue q ← empty = case q enq x ← recv q ; e ← empty ; q ← elem x e deq q.none ; close q elem : A –o queue –o queue q ← elem x r = case q enq y ← recv q ; r.enq ; send r y ; q ← elem x r deq q.some ; send q x ; q ← r
7 May 4, 2016
8 May 4, 2016
empty-queue = &{enq: A –o nonempty-queue, deq: ⊕{none: 1}} nonempty-queue = &{enq: A –o nonempty-queue, deq: ⊕{some: A ⊗ queue}}
9 May 4, 2016
queue A = empty-queue ⊔ nonempty-queue empty : empty-queue elem : (A –o queue –o nonempty-queue) concat : (empty-queue –o empty-queue –o empty-queue) ⊓ (queue –o nonempty-queue –o nonempty-queue) ⊓ (nonempty-queue –o queue –o nonempty-queue)
10 May 4, 2016
11 May 4, 2016
12 May 4, 2016