Overview

Beluga allows specification of formal systems (such as lambda calculi and type systems) using a foundation of contextual modal logic. As in the Twelf system, we can encode object-level binding constructs using higher order abstract syntax. We also pair terms with the contexts that give them meaning and then reason about these contextual objects. Proofs in Beluga are represented by recursive programs according to the Curry-Howard Isomorphism.

Beluga is developed at the Complogic group at McGill University, led by Professor Brigitte Pientka. It is implemented in OCaml.

To learn more about Beluga we recommend the following tutorial style papers and talks. If you have trouble discerning Beluga code from older releases, consult the legacy syntax for clarification.

Tutorial:

Mechanizing Meta-Theory in Beluga (CADE-25 Tutorial), August 2015

Mechanizing Types and Programming Languages: A Companion: This is a companion that loosely follows B. Pierce's book "Types and Programming Languages" and shows how to mechanize the material in Beluga. The code to the companion is available on GitHub (see beluga-code)

For an up-to-date version or to contribute see our GitHub repository.



Overview Talks: