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.
Autoren: Thorsten Altenkirch (University of Nottingham), Nathaniel Burke (Imperial College London), Philip Wadler (University of Edinburgh and Input Output)
Klassifizierung: cs.LO (Logik in der Informatik)
Veröffentlichungskonferenz: LFMTP 2025 (International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice)
Bei der Definition von Substitutionsoperationen für Sprachen mit Bindern (wie dem einfach typisierten λ-Kalkül) ist es üblich, Substitutions- und Umbenennungsoperationen separat zu definieren, was zu erheblicher Code-Duplizierung führt. Um die kategorischen Eigenschaften des Kalküls zu verifizieren, müssen identische Argumente mehrfach wiederholt werden. Dieses Paper präsentiert einen leichtgewichtigen Ansatz zur Vermeidung dieser Wiederholungen und konstruiert eine einfach typisierte CwF (Contextual Weak Functor), die isomorph zu einer Familie initialer einfach typisierter CwFs ist. Das Paper wird als literarisches Agda-Programmierskript präsentiert.
Einheitliches Framework: Präsentation eines einheitlichen Substitutionsoperators basierend auf Sort-Parametrisierung, der die Behandlung von Variablen und Termen in einer einzigen Definition zusammenführt
Terminierungsgarantie: Geschickte Nutzung von Agdas struktureller Rekursion und lexikographischer Terminierungsprüfung zur Gewährleistung der Wohldefiniertheit
Kategorische Verifikation: Beweis, dass die rekursive Definition der Substitution alle Gesetze der einfach typisierten CwF erfüllt
Initialitätsergebnis: Etablierung eines Isomorphismus zwischen der rekursiven Substitutionssyntax und der initialen CwF
Normalisierungssatz: Die Normalform der Substitution von λ-Termen entspricht λ-Termen ohne explizite Substitution
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
Dabei entspricht Γ ⊢ [ V ] A Variablen und Γ ⊢ [ T ] A Termen.
_[_] : Γ ⊢ [ q ] A → ∆ ⊩ [ r ] Γ → ∆ ⊢ [ q ⊔ r ] A
Schlüsseleinsicht: Der Sort des Ergebnisses ist die kleinste obere Grenze der Input-Sorts, was sicherstellt, dass das Ergebnis nur dann eine Variable ist, wenn beide Eingaben Variablen/Umbenennungen sind.
Kit-Methode18,5: Abstraktion gemeinsamer Muster von Umbennung und Substitution durch Kits, erfordert aber immer noch wiederholte Beweise
Monadische Perspektive6,9: Kodierung von Substitution als Funktion von Variablen zu Termen, schwer auf abhängige Typen erweiterbar
Automatisierungswerkzeuge21,22: Die Autosubst-Bibliothek generiert automatisch Substitutionslemmata, aber die Grundlage enthält immer noch Wiederholungen