ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. ·...

41
Concurrent Programming in Linear Type Theory Frank Pfenning Carnegie Mellon University Joint work with Luís Caires, Bernardo Toninho, Jorge Peréz, Dennis Griffith, Elsa Gunter, et al. 1/9/2014 1 ABCD Project MeeQng

Transcript of ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. ·...

Page 1: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Concurrent  Programming  in  Linear  Type  Theory  

Frank  Pfenning  Carnegie  Mellon  University  

Joint  work  with  Luís  Caires,  Bernardo  Toninho,  Jorge  Peréz,  Dennis  Griffith,  Elsa  Gunter,  et  al.  

1/9/2014   1  ABCD  Project  MeeQng  

Page 2: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

1/9/2014   ABCD  Project  MeeQng   2  

Page 3: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Outline  

•  A  new  foundaQon  for  session  types  •  SILL  by  example  – Prime  sieve  

– Bit  strings  •  Language  highlights  – Types  and  programs  

–  ImplementaQon  – Ongoing  research  

1/9/2014   ABCD  Project  MeeQng   3  

Page 4: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Session  Types  

•  Prescribe  communicaQon  behavior  between  message-­‐passing  concurrent  processes  

•  May  be  synchronous  or  asynchronous  •  Linear  channels  with  two  endpoints  •  Shared  channels  with  mulQple  endpoints  •  Messages  exchanged  can  be  – data  values  (including  process  expressions)  – channels  (as  in  the  π-­‐calculus)  –  labels  (to  indicate  choice)  

1/9/2014   ABCD  Project  MeeQng   4  

Page 5: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Curry-­‐Howard  Isomorphisms  

•  Logical  origins  of  computaQonal  phenomena  •  IntuiQonisQc  logic  ⇔  funcQonal  programming  

•  S4  modal  logic  ⇔  quote/eval  staging  

•  S5  modal  logic  ⇔  distributed  programming  

•  Temporal  logic  ⇔  parQal  evaluaQon  

•  Linear  logic  ⇔  session-­‐typed  concurrency  

•  More  than  an  analogy!  

1/9/2014   ABCD  Project  MeeQng   5  

Page 6: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Linear  Logic:  A  New  FoundaQon  

•  Linear  proposiQons  ⇔  session  types  •  Sequent  proofs  ⇔  process  expressions  •  Cut  ⇔  process  composiQon  •  IdenQty  ⇔  message  forwarding  •  Proof  reducQon  ⇔  communicaQon  •  Linear  type  theory  generalizes  linear  logic  – Logic:  proposiQons  do  not  menQon  proofs  – Type  theory:  proofs  are  internalized  as  terms  

1/9/2014   ABCD  Project  MeeQng   6  

Page 7: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Benefits  of  Curry-­‐Howard  Design  

•  Integrated  development  of  programming  constructs  and  reasoning  principles  – Correct  programs  via  simple  reasoning  principles  – Even  if  they  are  not  formalized  in  the  language!  

•  Elegant  and  expressive  language  primiQves  

•  Orthogonality  and  compaQbility  of  constructs  

•  Programming  language  theory  as  proof  theory  

1/9/2014   ABCD  Project  MeeQng   7  

Page 8: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Some  Choices  for  SILL  

•  SILL  =  Sessions  in  IntuiQonisQc  Linear  Logic  •  ConservaQvely  extend  funcQonal  language  – Process  expressions  form  a  (contextual)  monad  

– CommunicaQon  may  be  observable  

•  Manifest  noQon  of  process  – Offer  vs.  use  of  a  service  – Process  ⇔  channel  along  which  service  is  offered  

•  Later:  CILL,  sessions  in  a  C-­‐like  language  

1/9/2014   ABCD  Project  MeeQng   8  

Page 9: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

ProperQes  of  SILL  

•  Type  preservaQon  – Entails  session  fidelity  on  processes  

•  Progress  – Absence  of  deadlock  – Absence  of  race  condiQons  

•  TerminaQon  and  producQvity  – Some  restricQons  on  recursive  types  required  

•  Obeys  a  general  theory  of  logical  relaQons!  

1/9/2014   ABCD  Project  MeeQng   9  

Page 10: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

SILL  by  Example  

•  Syntax  close  to  implementaQon  in  O’Caml  •  No  inference  rules,  just  intuiQon  •  Examples  – Endless  streams  of  integers  – Streams  of  integers  – Stream  filter  – Prime  sieve  – Bit  strings  –  Increment  and  addiQon  

1/9/2014   ABCD  Project  MeeQng   10  

Page 11: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Stream  of  Numbers  

•  Data  types  τ  ::=  bool  |  int  |  τ1→  τ2  |  …  |  {  A  }  

•  {  A  }  is  type  of  process  offering  service  A    

•  Session  types  A  ::=  …  

•  Data  and  session  types  may  be  recursive  

•  In  type  theory,  should  be  inducQve  or  coinducQve  (ongoing  work)  

1/9/2014   ABCD  Project  MeeQng   11  

Page 12: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Endless  Streams  of  Integers  

•  c  :  τ  ∧  A          send  value  v:τ  along  c  and  behave  as  A  •  Non-­‐dependent  version  of  ∃x:τ.  A  •  Tail  call  represents  process  conQnuaQon  •  A  single  process  will  send  stream  of  integers  •  Channel  variables  and  session  types  in  red  

1/9/2014   ABCD  Project  MeeQng   12  

ints = int ∧ ints; "

from : int → {ints};"c ← from n =" send c n ;" c ← from (n+1)"

Page 13: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Streams  of  Integers  

•  c  :  &{li  :  Ai}i        receive  label  li  along  c  and  conQnue  as  Ai  •  Labeled  n-­‐ary  version  of  linear  logic  A  &  B  •  External  (client’s)  choice  •  c  :  1        terminate  process;  as  linear  logic  1  •  Closing  a  channel  c  terminates  offering  process  

1/9/2014   ABCD  Project  MeeQng   13  

ints = &{next:int ∧ ints, stop:1}; "

from : int → {ints};"c ← from n =" case (recv c)" | next ⇒ send c n ;" c ← from (n+1)" | stop ⇒ close c"

Page 14: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Filtering  a  Stream  

•  {A  ←  A1,  …,  An}  process  offering  A,  using  Ai’s  •  Type  of  channels  changes  based  on  process  state!  •  Type  error,  say,  if  we  forget  to  stop  d  

1/9/2014   ABCD  Project  MeeQng   14  

ints = &{next:int ∧ ints, stop:1}; "filter : (int → bool) → {ints ← ints};"filterNext : (int → bool) → {int ∧ ints ← ints};"

c ← filter q ← d =" case (recv c)" | next ⇒ c ← filterNext q ← d" | stop ⇒ send d stop ;" wait d ;" close c"

Page 15: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Finding  the  Next  Element  

•  filter/filterNext  process  idenQfied  with  channel  c  

1/9/2014   ABCD  Project  MeeQng   15  

ints = &{next:int ∧ ints, stop:1}; "filter : (int → bool) → {ints ← ints};"filterNext : (int → bool) → {int ∧ ints ← ints};"

c ← filterNext q ← d =" send d next ;" n ← recv d ;" case (q n)" | true ⇒ send c n ;" c ← filter q ← d" | false ⇒ c ← filterNext q ← d"

Page 16: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Prime  Sieve  

1/9/2014   ABCD  Project  MeeQng   16  

d0  ←  from  2  

d1  ←  filter  (%2)  ←  d0  

d2  ←  filter  (%3)  ←  d1  

c  ←  sieve  ←  d2  

2  3  4  5  6  7  

3  5  7  

5  7  

d0  d1  d2  c  

•  c  ←  sieve  ←  d  sends  first  value  p  on  d  along  c  •  Then  spawns  new  process  to  filter  out  %p  

Page 17: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Prime  Sieve  

1/9/2014   ABCD  Project  MeeQng   17  

•  c  ←  sieve  ←  d  sends  first  value  p  on  d  along  c  •  Then  spawns  new  process  to  filter  out  %p  

d0  ←  from  2  

d1  ←  filter  (%2)  ←  d0  

d2  ←  filter  (%3)  ←  d1  

d3  ←  filter  (%5)  ←  d2  

2  3  4  5  6  7  

3  5  7  

5  7  

7  

d0  d1  d2  d3  

c  ←  sieve  ←  d3  

c  

Page 18: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Prime  Sieve  

•   e  ←  filter  (mod  p)  ←  d    spawns  new  process  •  Uses  d,  offers  e  (which  is  used  by  sieve)  

1/9/2014   ABCD  Project  MeeQng   18  

ints = &{next:int ∧ ints, stop:1}; "sieve : {ints ← ints};"

c ← sieve ← d =" case (recv c)" | next ⇒ send d next ;" p ← recv d ;" send c p ;" e ← filter (mod p) ← d ;" c ← sieve ← e" | stop ⇒ send d stop ; wait d ; close c"

Page 19: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Primes  

•  Primes  correct  with  sync  or  async  communicaQon  •  n+2  processes  for  n  primes  

1/9/2014   ABCD  Project  MeeQng   19  

ints = &{next:int ∧ ints, stop:1}; "primes : {ints};"

c ← primes =" d ← from 2 ;" c ← sieve ← d"

Page 20: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Bit  Strings  

•  Lowest  bit  on  the  let  (above  represents  6)  •  c  :  ⊕{li:Ai}i      send  a  label  li  along  c  and  cont.  as  Ai  

•  n-­‐ary  version  of  linear  logic  A  ⊕  B  •  Internal  (provider’s)  choice  

1/9/2014   ABCD  Project  MeeQng   20  

d0  ←  empty  

d1  ←  bit  true  ←  d0  

d2  ←  bit  true  ←  d1  

c  ←  bit  false  ←  d2  

d0  d1  d2  c  

bits = ⊕{eps:1, bit:bool ∧ bits}; "

Page 21: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Bit  String  Constructors  

•  Forwarding  c  ←  d  represents  logical  idenQty  –  Process  offering  along  c  terminates  –  Client  subsequently  talks  to  process  offering  along  d  

1/9/2014   ABCD  Project  MeeQng   21  

bits = ⊕{eps:1, bit:bool ∧ bits};"

empty : {bits};"c ← empty =" send c eps ;" close c"

bit : bool → {bits ← bits};"c ← bit b ← d =" send c bit ;" send c b ;" c ← d; "

Page 22: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

AlternaQve  Constructor  

•  num  as  a  single  process  holding  an  int  n  •  Channel  type  is  process  interface,  not  representaQon  

1/9/2014   ABCD  Project  MeeQng   22  

bits = ⊕{eps:1, bit:bool ∧ bits};"

num : int → {bits};"c ← num n ="case n == 0"| true ⇒ send c eps ; close c"| false ⇒ send c bit ;" send c (odd n) ;" c ← num (n/2)"

Page 23: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Increment  

•  inc  process  generates  one  bit  string  from  another  •  Spawns  a  new  inc  process  in  case  of  a  carry  

1/9/2014   ABCD  Project  MeeQng   23  

bits = ⊕{eps:1, bit:bool ∧ bits};"inc : {bits ← bits};"

c ← inc ← d =" case (recv d)" | eps ⇒ wait d ;" e ← eps ;" c ← bit true ← e" | bit ⇒ b ← recv d ;" case b" | true ⇒ e ← inc ← d ;" c ← bit false ← e" | false ⇒ c ← bit true ← d"

Page 24: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

AddiQon  

•  add  uses  two  channels,  provides  one  •  Receives  are  sequenQal;  addiQonal  parallelism  could  be  

jusQfied  by  commuQng  conversions  in  proof  theory  

1/9/2014   ABCD  Project  MeeQng   24  

bits = ⊕{eps:1, bit:bool ∧ bits};"add : {bits ← bits, bits};"c ← add ← d, e =" case (recv d)" | eps ⇒ wait d ;" c ← e" | bit ⇒ b1 ← recv d ;" case (recv e)" | eps ⇒ wait e ;" send c bit;" send c b1;" c ← d" | bit ⇒ b2 ← recv e ; …"

Page 25: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Other  Examples  

•  Data  structures  – Stacks,  queues,  hash  tables,  binary  search  trees  

•  Algorithms  – Lazy  and  eager  prime  sieve  – Merge  sort,  odd/even  sort,  inserQon  sort  

•  Protocols  – Needham/Schroeder,  safe  and  unsafe  

1/9/2014   ABCD  Project  MeeQng   25  

Page 26: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Outline  

•  A  new  foundaQon  for  session  types  •  SILL  by  example  – Prime  sieve  

– Bit  strings  •  Language  highlights  – Types  and  programs  

–  ImplementaQon  – Ongoing  research  

1/9/2014   ABCD  Project  MeeQng   26  

Page 27: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Session  Type  Summary  

•  From  the  point  of  view  of  session  provider  

1/9/2014   ABCD  Project  MeeQng   27  

c  :  τ  ∧  A   send  value  v  :  τ  along  c,  conQnue  as  A  

c  :  τ  →  A   receive  value  v  :  τ  along  c,  conQnue  as  A  

c  :  A  ⊗  B   send  channel  d  :  A  along  c,  conQnue  as  B  

c  :  A  —o  B   receive  channel  d  :  A  along  c,  conQnue  as  B  

c  :  1   close  channel  c  and  terminate  

c  :  ⊕{li  :  Ai}   send  label  li  along  c,  conQnue  as  Ai  

c  :  &{li  :  Ai}   receive  label    li  along  c,  conQnue  as  Ai  

c  :  !A   send  persistent  !u  :  A  along  c  and  terminate  

!u  :  A   receive  c  :  A  along  !u  for  fresh  instance  of  A  

Page 28: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Contextual  Monad  

•  M  :  {  A  ←  A1,  …,  An  }    process  expressions  offering  service  A,  using  services  A1,  …,  An  

•  ComposiQon      c  ←  M  ←  d1,  …,  dn  ;  P  – c  fresh,  used  (linearly)  in  P,  consuming  d1,  …,  dn  

•  IdenQty    c  ←  d  – NoQfy  client  of  c  to  talk  to  d  instead  and  terminate  

•  Strong  noQon  of  process  idenQty  

1/9/2014   ABCD  Project  MeeQng   28  

Page 29: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

StaQc  Type  Checking  

•  BidirecQonal  – Precise  locaQon  of  type  errors  – Based  on  definiQon  of  normal  proofs  in  logic  – Fully  compaQble  with  linearity  

•  Natural  noQon  of  behavioral  subtyping,  e.g.  – &{l:A,  k:B}  ≤  &{l:A}  (we  can  offer  unused  alt’s)  – ⊕{l:A}  ≤  ⊕{l:A,  k:B}  (we  need  not  produce  all  alt’s)  

•  Supports  ML-­‐style  value  polymorphism  •  No  behavioral  polymorphism  yet  

1/9/2014   ABCD  Project  MeeQng   29  

Page 30: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Dynamic  SemanQcs  

•  Three  back  ends  – Synchronous  threads  – Asynchronous  threads  – Distributed  processes  

•  Some  cryptographic  primiQves  

•  Not  released  (but  mulQple  “friendly”  users)  

1/9/2014   ABCD  Project  MeeQng   30  

Page 31: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Dynamic  Type  Checking  

•  May  not  trust  all  parQcipaQng  processes  •  Type  system  compaQble  with  – Value  dependent  types,  e.g.  nat  =  {x:int  |  x  ≥  0}  – Full  dependent  types,  but  sQll  under  invesQgaQon:  •  “Right”  equivalence  on  process  expressions  •  RestricQons  on  recursive  types  

•  Contracts  are  parQal  idenQty  processes  – Blame  assignment  (ongoing)  – Causality  (ongoing)  

1/9/2014   ABCD  Project  MeeQng   31  

Page 32: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Some  Refinements  

•  eq  and  gt    are  value  type  families  •  succs  and  incrs  are  session  type  families  •  Last  line  illustrates  ∃  as  dependent  ∧  •  Not  yet  implemented  

1/9/2014   ABCD  Project  MeeQng   32  

nat = {x:int | x ≥ 0};"nats = &{next:nat ∧ nats, stop:1};"

eq n = {x:int | x = n};"succs n = &{next:eq n ∧ succs(n+1), stop:1};"

gt n = {x:int | x > n};"incrs n = &{next:∃k:gt n. incrs k, stop:1};"

Page 33: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Other  Logical  Thoughts  

•  Affine  logic  (=  linear  logic  +  weakening)  – StaQc  deallocaQons  inserted  – Shorter  programs,  but  errors  more  likely  

•  Hybrid  linear  logic  (=  linear  logic  +  worlds)  – Worlds  represenQng  security  domains  – Accessibility  relaQon  between  domains  

– Ongoing  •  AffirmaQon  modality  for  digital  signatures  

1/9/2014   ABCD  Project  MeeQng   33  

Page 34: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Session  Types  in  a  C-­‐like  Language  

•  C0:  a  type-­‐safe  subset  of  C  – Designed  for  teaching  imperaQve  programming,  algorithms,  and  data  structures  to  freshmen  

– Extended  with  contracts  (pure  boolean  funcQons)  – Contracts  are  crucial  for  design,  proof,  and  tesQng  

•  C1:  funcQon  pointers  and  polymorphism  

•  CILL:  session-­‐typed  concurrency?  

1/9/2014   ABCD  Project  MeeQng   34  

Page 35: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

CILL  

•  Channels  $c  are  linearly  typed  (as  in  SILL)  •  Persistent  channels  $$c,  variables  x  as  usual  •  Channel  types  must  be  loop  invariants  –  lub  at  all  join  points  in  control-­‐flow  graph  

•  Possible  with  or  without  shared  memory  – No  safety  in  the  presence  of  shared  memory  

•  Exploring  robustness  of  SILL  concepts  in  different  se�ng  

1/9/2014   ABCD  Project  MeeQng   35  

Page 36: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Integer  Streams  in  CILL  

1/9/2014   ABCD  Project  MeeQng   36  

choice intstream {" int /\ choice intstream next;" void stop;"};"typedef choice intstream ints;"

ints $c from(int n) {" while (true) {" switch ($c) {" case next:" send($c, n);" n = n+1;" case stop:" close($c);" }" }"}"

Page 37: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

SpeculaQng  on  Contracts  

•  Value  contracts  must  be  pure  boolean  funcQons  •  Channel  contracts  must  be  parQal  idenQty  proc’s  

1/9/2014   ABCD  Project  MeeQng   37  

ints $c from(int n)"//@requires n >= 0;"//@ensures $c = all_pos($c);"{" while (true) {" switch ($c) {" case next:" send($c, n);" n = n+1;" case stop:" close($c);" }" }"}"

Page 38: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

ParQal  IdenQty  Process  

•  Synthesized  in  a  type-­‐directed  way  

1/9/2014   ABCD  Project  MeeQng   38  

ints $c all_pos(ints $d) {" switch ($c) {" case next:" $d.next;" int n = recv($d);" if (n <= 0) abort;" send($c, n);" $c = all_pos($d);" case stop:" $d.stop; wait($d);" close($c);" }"}"

Page 39: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Summary  

•  SILL,  a  funcQonal  language  with  a  contextual  monad  for  session-­‐typed  message-­‐passing  concurrency  –  Type  preservaQon  (session  fidelity)  –  Progress  (deadlock  and  race  freedom)  –  ImplementaQon  with  subtyping,  polymorphism,  recursive  types  

•  Based  on  a  Curry-­‐Howard  interpretaQon  of  intuiQonisQc  linear  logic  

•  Full  dependent  type  theory  in  progress  

1/9/2014   ABCD  Project  MeeQng   39  

Page 40: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Thanks!  

•  Luís  Caires,  Bernardo  Toninho,  Jorge  Peréz  (Universidade  Nova  de  Lisboa)  –  FCT  and  CMU|Portugal  collaboraQon  

•  Dennis  Griffith,  Elsa  Gunter  (UIUC)  [ImplementaQon]  –  NSA  

•  Michael  Arntzenius,  Limin  Jia  (CMU)  [Blame]  •  Stephanie  Balzer  (CMU)  [New  foundaQon  for  OO]  •  Henry  DeYoung  (CMU)  [From  global  specs  to  local  types]  •  Much  more  to  say;  see  h�p://www.cs.cmu.edu/~fp  •  Apologies  for  the  lack  of  references  to  related  work  

1/9/2014   ABCD  Project  MeeQng   40  

Page 41: ConcurrentProgramming)in) Linear)Type)Theory)fp/talks/london14.pdf · 2014. 1. 10. · ConcurrentProgramming)in) Linear)Type)Theory) Frank)Pfenning) Carnegie)Mellon)University) Jointwork)with)

Some  References  

•  2010  –  CONCUR:  the  basic  idea,  

revised  for  MSCS,  2012  

•  2011  –  PPDP:  dependent  types  –  CPP:  digital  signatures  (♢A)  

•  2012  –  CSL:  asynchronous  comm.    –  ESOP:  logical  relaQons  –  FOSSACS:  funcQons  as  

processes  

•  2013  –  ESOP:  behavioral  

polymorphism  –  ESOP:  monadic  integraQon  

(SILL)  

•  2014  (in  progress)  –  Security  domains  (A  @  w),  

spaQal  distribuQon  

–  CoinducQve  types  –  Blame  assignment  

1/9/2014   ABCD  Project  MeeQng   41