Abstract Representation of Binders in OCaml using the Bindlib Library

07/05/2018
by   Rodolphe Lepigre, et al.
0

The Bindlib library for OCaml provides a set of tools for the manipulation of data structures with variable binding. It is very well suited for the representation of abstract syntax trees, and has already been used for the implementation of half a dozen languages and proof assistants (including a new version of the logical framework Dedukti). Bindlib is optimised for fast substitution, and it supports variable renaming. Since the representation of binders is based on higher-order abstract syntax, variable capture cannot arise during substitution. As a consequence, variable names are not updated at substitution time. They can however be explicitly recomputed to avoid "visual capture" (i.e., distinct variables with the same apparent name) when a data structure is displayed.

READ FULL TEXT

page 8

page 11

research
02/11/2023

E-unification for Second-Order Abstract Syntax

Higher-order unification (HOU) concerns unification of (extensions of) λ...
research
05/03/2021

Abstract clones for abstract syntax

We give a formal treatment of simple type theories, such as the simply-t...
research
07/04/2018

The Implementation of the Colored Abstract Simplicial Complex and its Application to Mesh Generation

We introduce CASC: a new, modern, and header-only C++ library which prov...
research
01/02/2023

Nominal Recursors as Epi-Recursors

We study nominal recursors from the literature on syntax with bindings a...
research
01/20/2017

Using LLVM-based JIT Compilation in Genetic Programming

The paper describes an approach to implementing genetic programming, whi...
research
09/06/2022

Variable binding and substitution for (nameless) dummies

By abstracting over well-known properties of De Bruijn's representation ...
research
07/11/2018

Everybody's Got To Be Somewhere

The key to any nameless representation of syntax is how it indicates the...

Please sign up or login with your details

Forgot password? Click here to reset