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.
Autori: Thorsten Altenkirch (University of Nottingham), Nathaniel Burke (Imperial College London), Philip Wadler (University of Edinburgh and Input Output)
Classificazione: cs.LO (Logica in Informatica)
Conferenza di Pubblicazione: LFMTP 2025 (International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice)
Nella definizione dell'operazione di sostituzione per linguaggi con legatori (come il λ-calcolo semplicemente tipato), è generalmente necessario definire separatamente le operazioni di sostituzione e rinomina, causando una considerevole duplicazione di codice. Per verificare le proprietà categoriali del calcolo, gli stessi argomenti devono essere ripetuti più volte. Questo articolo propone un approccio leggero per evitare tale duplicazione e costruisce una CwF (Categoria con Famiglie) semplicemente tipata isomorfa a una famiglia iniziale di CwF semplicemente tipate. L'articolo è presentato sotto forma di script di programmazione letteraria in Agda.
Nella dimostrazione meccanizzata, la definizione dell'operazione di sostituzione per linguaggi con legatori richiede tradizionalmente:
Definizioni separate di rinomina variabile (∆ ⊩v Γ) e sostituzione di termine (∆ ⊩ Γ)
Implementazione ripetuta di quattro diverse operazioni di sostituzione: variabile per variabile, variabile per termine, termine per variabile, termine per termine
Dimostrazione ripetuta di tutte le leggi funtoriali per le combinazioni, risultando in 8 diversi casi di prova
Framework Unificato: Propone un'operazione di sostituzione unificata basata su parametri Sort, unificando il trattamento di variabili e termini in una singola definizione
Garanzie di Terminazione: Sfrutta abilmente la ricorsione strutturale di Agda e il controllo di terminazione lessicografico per assicurare la buona fondatezza della definizione
Verifica Teorica Categoriale: Dimostra che la sostituzione definita ricorsivamente soddisfa tutte le leggi della CwF semplicemente tipata
Risultato di Inizialità: Stabilisce un isomorfismo tra la sintassi di sostituzione ricorsiva e la CwF iniziale
Teorema di Normalizzazione: La forma normale della sostituzione di λ-termini corrisponde ai λ-termini senza sostituzione esplicita
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
Dove Γ ⊢ [ V ] A corrisponde alle variabili e Γ ⊢ [ T ] A corrisponde ai termini.
_[_] : Γ ⊢ [ q ] A → ∆ ⊩ [ r ] Γ → ∆ ⊢ [ q ⊔ r ] A
Intuizione Chiave: Lo sort del risultato è il minimo limite superiore degli sort di input, assicurando che il risultato sia una variabile solo quando entrambi gli input sono variabili/rinomine.
Metodo Kit18,5: Astrae i modelli comuni di rinomina e sostituzione attraverso kit, ma richiede ancora prove ripetute
Prospettiva Monadica6,9: Codifica la sostituzione come funzione da variabili a termini, ma difficile da estendere ai tipi dipendenti
Strumenti di Automazione21,22: La libreria Autosubst genera automaticamente lemmi di sostituzione, ma il livello sottostante contiene ancora duplicazione