Choreographies


Choreographies are a way of describing communicating systems as global programs

        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      

        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      

A


        x = crunch()
        

        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      

A


        x = crunch()
        

B


        y = crunch()
        

        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      

A


        x = crunch()
        send("A",x)
        

B


        y = crunch()
        x = receive("A")
        

        let x@A = crunch()
        let y@B = crunch()
        A[x] -> B.x
        B[y] -> A.y
      

A


        x = crunch()
        send("B",x)
        y = receive("B")
        

B


        y = crunch()
        x = receive("A")
        send("A",y)
        

Features



        A[x] -> B.x
        B[y] -> A.y
      


        A[x] -> B.x
        B[y] -> A.y
      


        A[x] -> B.x
        B[y] -> A.y
      

  • Verified choreography compiler
  • Published on ITP2022