Skip to the content.

We design and implement trustworthy software tools (such as refactorings, compilers, and program verifiers) for Erlang, using formal methods.

In the past few years, we have mechanized the Core Erlang language in the Rocq interactive theorem prover. Currently, our team is working on building a wide range of applications on the top of this mechanized formal semantics. We want to bring high-assurance to the entire BEAM community by building formally based tools.

🏛️ A mechanized formal semantics for Core Erlang

Formal semantics describe programming languages with mathematical precision. With the semantics, one can examine program behaviour, define program equivalence, and formally verify program correctness or program safety. We defined formal semantics for Core Erlang, a standard intermediate language in Erlang/OTP; this allows us to develop high assurance tools not only for Erlang but also for other BEAM-based languages such as Elixir, Gleam and LFE.

Our mechanized formal semantics includes the complete, mathematically precise definition of the behaviour of both the sequential and the concurrent features of Core Erlang. In particular, we have a fairly complete mechanization of Erlang’s actor model. Furthermore, we have defined program equivalence (contextual, CIU, log.rel., and bisimulations) so we can mathematically prove if two programs behaviours are indistinguishable.

Our formal definition has been validated against the reference implementation (i.e. we tested if the behaviour we defined for programs matches their behaviour when run in the interpreter).

Technical highlights:

Security verification

Property verification

Certified compilation

Featured publications