This is an opportunity to join a team researching a new and exciting foundation for static type systems as part of the 3-year project Types for Incorrectness, led by Dr. Steven Ramsay. It is often said that a typical purpose of a static type system is to detect runtime errors at compile time, but very few systems are designed with this in mind. Indeed, traditional type systems are incapable of reasoning about programs with bugs: since well‑typed programs cannot go wrong, programs harbouring runtime errors simply don't exist as far as the type system is concerned. By contrast, two‑sided type systems (Ramsay and Walpole, POPL'24), a new generalisation of traditional static type systems, can both certify that correct programs are type safe, and certify that defective programs have a bug. This second ability underpins the use of type systems in precision bug‑finding, with zero false positives, and opens exciting possibilities for new type‑based static analyses for dynamic languages like Erlang, Elixir and Python. The Senior Research Associate role is expected to lead the investigation of the algorithmic aspects of these systems and the design and implementation of prototype tools for Erlang or Elixir. They will engage with our project partners to understand how Erlang/Elixir developers can make use of program analyses for bug finding and, ultimately, turn the theory of two‑sided type systems into a tool that can really benefit the community.
Responsibilities
* Designing and analysing algorithms for type inference.
* Designing and analysing type systems suitable for bug finding.
* Implementing prototype static analysis tooling.
* Authoring research papers suitable for venues in programming languages.
* Conducting case studies to evaluate potential impact.
* Engaging with the Erlang/Elixir community on relevant practical aspects of the project.
Qualifications
* Having a PhD in programming languages, logic, formal verification or a related field.
* Having some experience building programming language tooling (e.g. compilers, interpreters, program analysis tools, program synthesis tools, documentation generators) through research, teaching or hobby projects.
* Having some background in formal aspects of programming language theory, such as operational semantics, type systems, or program logics.
* Being able to communicate technical concepts clearly to both academic and non‑academic audiences.
* Being excited about the idea of making elegant theory work in practice, and building a tool that programmers will really use and value.
#J-18808-Ljbffr