Computing with relations, functions, and bindings
Calculer avec des relaions, des fonctions et des lieurs
Résumé
The present document pursues the decades-long study of the interactions between
mathematical logic and functional computation, and more specifically of
declarative programming. This thesis is divided into two main contributions.
Each one of those make use of modern proof theory results to design new ways to
compute with relations and with functions.
The first contribution of this work is the description and formalization of a
new technique that leverages the focusing mechanism (a way to guide
proof-search) to reveal functional computation concealed in deductive proofs. To
that extent we formulate a focused sequent calculus proof system for Heyting
arithmetic where fixed points and term equality are logical connectives and
describe a means to always drive singleton predicates into negative phases of
the proof, thus identifying them with functional computation. This method does
not extend the underlying logic in any way: no choice principle nor equality
theory nor rewriting rules are needed. As a result, our logic remains purely
relational even when it is computing functions.
The second contribution of this thesis is the design of a new functional
programming language: MLTS. Again, we make use of recent work in logic: the
semantics of MLTSis a theory inside G-logic, the reasoning logic of the
Abella interactive theorem prover. G-logic uses a specific operator:
Nabla, a fresh-name quantifier which allows for a natural treatment of proofs
over structures with bindings based on the natural handling of bindings of the
sequent calculus. The syntax of \mlts is based on the programming language OCaml
but provides additional sites so that term-level bindings can move to
programming level bindings. Moreover, all operations on syntax respect
alpha-beta-conversion. Together these two tenets form the lambda-tree syntax approach to
bindings. The resulting language was given a prototype implementation that
anyone can conveniently try online (https://trymlts.github.io).
Cette thèse s'inscrit dans la longue tradition de l'étude des relations entre
logique mathématique et calcul et plus spécifiquement de la programmation
déclarative. Le document est divisé en deux contributions principales. Chacune
d'entre-elles utilise des résultats récents de la théorie de la démonstration
pour développer de techniques novatrices utilisant déduction logique et
fonctions pour effectuer des calculs.
La première contribution de ce travail consiste en la description et la
formalisation d'une nouvelle technique utilisant le mécanisme de la focalisaton
(un moyen de guider la recherche de preuve) pour distinguer les calculs
fonctionnels qui se dissimulent dans les preuves déductives. À cet effet nous
formulons un calcul des séquents focalisé pour l'arithmétique de Heyting où
points-fixes et égalité sont définis comme des connecteurs logiques et nous
décrivons une méthode pour toujours placer les prédicats singletons dans des
phases négatives de la preuve, les identifiant ainsi avec un calcul fonctionnel.
Cette technique n'étend en aucune façon la logique sous-jacente: ni opérateur de
choix, ni règles de réécritures ne sont nécéssaires. Notre logique reste donc
purement relationnelle même lorsqu'elle calcule des fonctions.
La seconde contribution de cette thèse et le design d'un nouveau langage de
programmation fonctionnel: MLTS. De nouveau, nous utilisons des travaux
théoriques récents en logique: la sémantique de MLTSest ainsi une théorie au
sein de la logique G, la logique de raisonnement de l'assistant de preuve
Abella. La logique G utilise un opérateur spécifique: Nabla, qui est un
quantificateur sur des noms ``frais'' et autorise un traitement naturel des
preuves manipulant des objets pouvant contenir des lieurs. Ce traitement
s'appuie sur la gestion naturelle des lieurs fournie par le calcul des séquents.
La syntaxe de MLTS est basée sur celle du langage de programmation OCaml mais
fournit des constructions additionnelles permettant aux lieurs présents dans les
termes de se déplacer au niveau du programme. De plus, toutes les opérations sur
la syntaxe respectent l'alpha et la béta conversion. Ces deux aspects forment
l'approche syntaxique des lieurs appelée lambda-tree syntax. Un prototype d'implémentation
du langage est fourni, permettant à chacun d'expérimenter facilement en ligne
(https://trymlts.github.io).
Origine | Fichiers produits par l'(les) auteur(s) |
---|
Loading...