Built with Alectryon, running . Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.

An abstract, certified account of operational game semantics

This is the companion artifact to the paper. The main contributions of this library are:


  • Author(s):
    • Peio Borthelle
    • Tom Hirschowitz
    • Guilhem Jaber
    • Yannick Zakowski
  • License: GPLv3
  • Compatible Coq versions: 8.17
  • Additional dependencies:
  • Coq namespace: OGS
  • Documentation

Building instructions

Installing dependencies

Download the project with

git clone https://github.com/lapin0t/ogs.git
cd ogs

We stress that the development has been only checked to compile against these specific dependencies. In particular, it does not compiled at the moment against latest version of coq-coinduction due to major changes in the interface.

Installing the opam dependencies automatically:

opam install --deps-only .

or manually:

opam pin coq 8.17
opam pin coq-equations 1.3
opam pin coq-coinduction 1.6

Building the project

dune build

Alectryon documentation

To build the html documentation, first install Alectryon:

opam install "coq-serapi==8.17.0+0.17.1"
python3 -m pip install --user alectryon

Then build with:

make doc

You can start a local web server to view it with:

make serve


Structure of the repository

The Coq development is contained in the theory directory, which has the following structure, in approximate order of dependency.

  • Readme.v: this file
  • Prelude.v: imports and setup
  • Utils directory: general utilities
    • Rel.v: generalities for relations over indexed types
    • Psh.v: generalities for type families
  • Ctx directory: general theory of contexts and variables
    • Family.v: definition of scoped and sorted families
    • Abstract.v: definition of context and variable structure
    • Assignment.v: generic definition of assignments
    • Renaming.v: generic definition of renamings
    • Ctx.v: definition of concrete contexts and DeBruijn indices
    • Covering.v: concrete context structure for Ctx.v
    • DirectSum.v: direct sum of context structures
    • Subset.v: sub context structure
  • ITree directory: implementation of a variant of interaction trees over indexed types
    • Event.v: indexed events parameterizing the interactions of an itree
    • ITree.v: coinductive definition
    • Eq.v: strong and weak bisimilarity over interaction trees
    • Structure.v: combinators (definitions)
    • Properties.v: general theory
    • Guarded.v: (eventually) guarded equations and iterations over them
    • Delay.v: definition of the delay monad (as a special case of trees)
  • OGS directory: construction of a sound OGS model for an abstract language
    • Subst.v: axiomatization of substitution monoid, substitution module
    • Obs.v: axiomatization of observation structure, normal forms
    • Machine.v: axiomatization of evaluation structures, language machine
    • Game.v: abstract game and OGS game definition
    • Strategy.v: machine strategy and composition
    • CompGuarded.v: proof of eventual guardedness of the composition of strategies
    • Adequacy.v: proof of adequacy of composition
    • Congruence.v: proof of congruence of composition
    • Soundness.v: proof of soundness of the OGS
  • Examples directory: concrete instances of the generic construction
    • STLC_CBV.v: simply typed, call by value, lambda calculus
    • ULC_CBV.v: untyped, call by value, lambda calculus
    • SystemL_CBV.v: mu-mu-tilde calculus variant System L, in call by value
    • SystemD.v: mu-mu-tilde calculus variant System D, polarized


The whole development relies only on axiom K, a conventional and sound axiom from Coq's standard library (more precisely, Eq_rect_eq.eq_rect_eq).

This can be double checked as follows:

  • for the abstract result of soundness of the OGS by running Print Assumptions ogs_correction. at the end of OGS/Soundness.v
  • for any particular example, for instance by running Print Assumptions stlc_ciu_correct. at the end of Example/CBVTyped.v