Defining substitution for a language with binders like the simply typed $λ$-calculus requires repetition, defining substitution and renaming separately. To verify the categorical properties of this calculus, we must repeat the same argument many times. We present a lightweight method that avoids repetition and that gives rise to a simply typed category with families (CwF) isomorphic to the initial simply typed CwF. Our paper is a literate Agda script.
Auteurs: Thorsten Altenkirch (University of Nottingham), Nathaniel Burke (Imperial College London), Philip Wadler (University of Edinburgh and Input Output)
Classification: cs.LO (Logique en Informatique)
Conférence de publication: LFMTP 2025 (International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice)
Lors de la définition d'opérations de substitution pour les langages comportant des liants (comme le λ-calcul simplement typé), il est généralement nécessaire de définir séparément les opérations de substitution et de renommage, ce qui entraîne une duplication considérable de code. Pour vérifier les propriétés catégoriques du calcul, les mêmes arguments doivent être répétés plusieurs fois. Cet article propose une approche légère pour éviter cette redondance et construit une CwF simplement typée isomorphe à la famille initiale de CwF simplement typées. L'article est présenté sous la forme d'un script de programmation littéraire en Agda.
Lors de la définition mécanique d'opérations de substitution pour les langages avec liants, la méthode traditionnelle nécessite:
Définition séparée du renommage de variables (∆ ⊩v Γ) et de la substitution de termes (∆ ⊩ Γ)
Implémentation répétée de quatre opérations de substitution différentes: variable-pour-variable, variable-pour-terme, terme-pour-variable, terme-pour-terme
Preuve répétée de toutes les lois fonctorielles pour les combinaisons, entraînant 8 cas de preuve distincts
Cadre unifié: Proposition d'une opération de substitution unifiée basée sur un paramètre Sort, fusionnant le traitement des variables et des termes en une seule définition
Garantie de terminaison: Utilisation astucieuse de la récursion structurelle d'Agda et de la vérification de terminaison par ordre lexicographique pour assurer le bien-fondé de la définition
Vérification théorique catégorique: Preuve que la substitution définie récursivement satisfait toutes les lois de la CwF simplement typée
Résultat d'initialité: Établissement d'un isomorphisme entre la syntaxe de substitution récursive et la CwF initiale
Théorème de normalisation: La forme standard de substitution des λ-termes correspond aux λ-termes sans substitution explicite
data _ ⊢ [_]_ : Con → Sort → Ty → Set where
zero : Γ ▷ A ⊢ [ V ] A
suc : Γ ⊢ [ V ] A → (B : Ty) → Γ ▷ B ⊢ [ V ] A
`_ : Γ ⊢ [ V ] A → Γ ⊢ [ T ] A
_ ·_ : Γ ⊢ [ T ] A ⇒ B → Γ ⊢ [ T ] A → Γ ⊢ [ T ] B
λ_ : Γ ▷ A ⊢ [ T ] B → Γ ⊢ [ T ] A ⇒ B
Où Γ ⊢ [ V ] A correspond aux variables et Γ ⊢ [ T ] A correspond aux termes.
_[_] : Γ ⊢ [ q ] A → ∆ ⊩ [ r ] Γ → ∆ ⊢ [ q ⊔ r ] A
Intuition clé: Le sort du résultat est la borne supérieure minimale des sorts d'entrée, garantissant que le résultat n'est une variable que lorsque les deux entrées sont des variables/renommages.
Méthode Kit18,5: Abstraction des motifs communs du renommage et de la substitution via des kits, mais nécessite toujours des preuves répétées
Perspective monadique6,9: Codage de la substitution comme fonction des variables vers les termes, mais difficile à étendre aux types dépendants
Outils d'automatisation21,22: La bibliothèque Autosubst génère automatiquement les lemmes de substitution, mais la base contient toujours de la duplication