Tail Modulo Cons, OCaml, and Relational Separation Logic

Fuente: arXiv
Gespeichert in:
Bibliographische Detailangaben
Hauptverfasser: Allain, Clément, Bour, Frédéric, Clément, Basile, Pottier, François, Scherer, Gabriel
Format: Preprint
Veröffentlicht: 2024
Schlagworte:
Online-Zugang:
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
_version_ 1866913590244540416
author Allain, Clément
Bour, Frédéric
Clément, Basile
Pottier, François
Scherer, Gabriel
author_facet Allain, Clément
Bour, Frédéric
Clément, Basile
Pottier, François
Scherer, Gabriel
contents Common functional languages incentivize tail-recursive functions, as opposed to general recursive functions that consume stack space and may not scale to large inputs. This distinction occasionally requires writing functions in a tail-recursive style that may be more complex and slower than the natural, non-tail-recursive definition. This work describes our implementation of the *tail modulo constructor* (TMC) transformation in the OCaml compiler, an optimization that provides stack-efficiency for a larger class of functions -- tail-recursive *modulo constructors* -- which includes in particular the natural definition of `List.map` and many similar recursive data-constructing functions. We prove the correctness of this program transformation in a simplified setting -- a small untyped calculus -- that captures the salient aspects of the OCaml implementation. Our proof is mechanized in the Coq proof assistant, using the Iris base logic. An independent contribution of our work is an extension of the Simuliris approach to define simulation relations that support different calling conventions. To our knowledge, this is the first use of Simuliris to prove the correctness of a compiler transformation.
format Preprint
id arxiv_https___arxiv_org_abs_2411_19397
institution arXiv
publishDate 2024
record_format arxiv
spellingShingle Tail Modulo Cons, OCaml, and Relational Separation Logic
Allain, Clément
Bour, Frédéric
Clément, Basile
Pottier, François
Scherer, Gabriel
Programming Languages
Common functional languages incentivize tail-recursive functions, as opposed to general recursive functions that consume stack space and may not scale to large inputs. This distinction occasionally requires writing functions in a tail-recursive style that may be more complex and slower than the natural, non-tail-recursive definition. This work describes our implementation of the *tail modulo constructor* (TMC) transformation in the OCaml compiler, an optimization that provides stack-efficiency for a larger class of functions -- tail-recursive *modulo constructors* -- which includes in particular the natural definition of `List.map` and many similar recursive data-constructing functions. We prove the correctness of this program transformation in a simplified setting -- a small untyped calculus -- that captures the salient aspects of the OCaml implementation. Our proof is mechanized in the Coq proof assistant, using the Iris base logic. An independent contribution of our work is an extension of the Simuliris approach to define simulation relations that support different calling conventions. To our knowledge, this is the first use of Simuliris to prove the correctness of a compiler transformation.
title Tail Modulo Cons, OCaml, and Relational Separation Logic
topic Programming Languages
url https://arxiv.org/abs/2411.19397