Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Erlang Meets Dependent Types

Erlang Meets Dependent Types

Talk given at EdLambda, in July 2015.

Dissertation Link: http://lenary.co.uk/publications/dissertation/

Sam Elliott

July 14, 2015
Tweet

More Decks by Sam Elliott

Other Decks in Research

Transcript

  1. Erlang Meets Dependent Types
    Sam Elliott
    edλ, 14 July 2015

    View Slide

  2. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Erlang
    • Actor-based Concurrent Programming Language
    • !, receive, and spawn
    • Mailbox per Isolated Process
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  3. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Erlang Advanced Features
    • Dynamically Typed
    • dialyzer
    • OTP: Behaviours
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  4. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Dependently-Typed Languages
    • Idris
    • Agda
    • Coq
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  5. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Idris
    • Dependently-typed Pure Programming Language
    • Types are Values
    • Values are Types
    • Programs and Proofs
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  6. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Idris IRs
    “Cross-platform Compilers for Functional Languages”
    • Idris
    • TT
    • TTcase
    • IRcase
    • IRlift
    • IRdefunc
    • IRANF
    • Idris Bytecode
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  7. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    IRdefunc
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  8. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Actors
    data Actor : Type → Type → Type
    proc : Actor l ()
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  9. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Actors
    data Actor : Type → Type → Type
    proc : Actor l ()
    recieve : Actor l l
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  10. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Actors
    data Actor : Type → Type → Type
    proc : Actor l ()
    recieve : Actor l l
    spawn : (Actor l’ a) → Actor l (ActorID l’)
    data ActorID : Type → Type
    pid : ActorID l
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  11. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Actors
    data Actor : Type → Type → Type
    proc : Actor l ()
    recieve : Actor l l
    spawn : (Actor l’ a) → Actor l (ActorID l’)
    data ActorID : Type → Type
    pid : ActorID l
    send : ActorID l’ → l’ → Actor l ()
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  12. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC
    data RPCLang : (r : Type)
    → (r → Type)
    → Type
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  13. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC
    data RPCLang : (r : Type)
    → (r → Type)
    → Type
    data LockReq = Lock | Unlock
    data LockLockResp = Grant | Wait
    total
    LockResp : LockReq → Type
    LockResp Lock = LockLockResp
    LockResp Unlock = Unit
    LockLang : RPCLang LockReq LockResp
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  14. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC II
    data RPCRef : RPCLang rq rs → Type
    rpc : {l : RPCLang rq rs}
    → RPCRef l
    → (m : rq)
    → EIO (rs m)
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  15. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC II
    data RPCRef : RPCLang rq rs → Type
    rpc : {l : RPCLang rq rs}
    → RPCRef l
    → (m : rq)
    → EIO (rs m)
    pid : RPCRef LockLang
    rpc pid Lock : LockLockResp
    rpc pid Unlock : Unit
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  16. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC III
    spawn : {l : RPCLang rq rs}
    → (r : rq → rs r)
    → EIO (RPCRef l)
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  17. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC III
    spawn : {l : RPCLang rq rs}
    → (r : rq → rs r)
    → EIO (RPCRef l)
    total
    lock : (m : LockReq) → LockResp m
    lock Lock = Grant -- Oh Crap!
    lock Unlock = ()
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  18. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    RPC III
    spawn : {l : RPCLang rq rs}
    → (r : rq → rs r)
    → EIO (RPCRef l)
    total
    lock : (m : LockReq) → LockResp m
    lock Lock = Grant -- Oh Crap!
    lock Unlock = ()
    State? Side Effects?
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  19. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    OTP
    • “Open Telecoms Platform”
    • Lots of great defaults
    • Generic Behaviours!
    • Supervisors!
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  20. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Generic Behaviours
    • gen server
    • gen fsm
    • gen event
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  21. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    gen server
    data GSL : (cl : Type)
    → (cl → Type)
    → Type
    → Type
    data GSRef : GSL cl cr ct → Type
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  22. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    gen server
    data GSL : (cl : Type)
    → (cl → Type)
    → Type
    → Type
    data GSRef : GSL cl cr ct → Type
    call : {l : GSL cl cr ct}
    → GSRef l
    → (m : cl)
    → EIO (cr m)
    cast : {l : GSL cl cr ct}
    → GSRef l
    → ct
    → EIO Unit
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  23. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    gen server
    data GS : (GSL cl cr ct)
    → Type
    → Type
    → Type
    spawn : (GS l st i)
    → i
    → EIO (GSRef i)
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  24. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Conclusion
    • We can produce verified concurrent programs in Idris
    • We can compile these programs to work with Erlang
    • We can run verified programs in Erlang
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  25. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Read More
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  26. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Thanks To
    Edwin Brady
    Rob Stewart
    Skyscanner & Mike Moran
    Sam Elliott Erlang Meets Dependent Types

    View Slide

  27. Erlang Dependent Types Compiler Concurrency OTP Conclusion
    Any Questions?
    Sam Elliott Erlang Meets Dependent Types

    View Slide