LF signatures distinguish family declarations 𝑎:𝐾 from object declarations 𝑐:𝐴. In addition to the inherited dependent-product, abstraction, application, structural, and beta–eta conversion rules, the framework-specific rules are 𝑋⋅⊢Σ𝗍𝗒𝗉𝖾𝗄𝗂𝗇𝖽Type𝑎:𝐾∈ΣΓ⊢Σ𝑎:𝐾Fam𝑐:𝐴∈ΣΓ⊢Σ𝑐:𝐴Con. Products in families and kinds bind only object variables. A canonical object at a product family is an annotated lambda; at an atomic family it is a variable or object constant fully applied to canonical arguments. The implicational object logic has exactly 𝑢:𝑃∈ΔΔ⊢⊃𝑢:𝑃Sup−AssmΔ,𝑢:𝑃⊢⊃𝐷:𝑄𝑢∉dom(Δ)Δ⊢⊃𝗌𝗎𝗉𝖨(𝑢.𝐷):𝑃⊃𝑄Sup−IΔ⊢⊃𝐷:𝑃⊃𝑄Δ⊢⊃𝐸:𝑃Δ⊢⊃𝗌𝗎𝗉𝖤(𝐷,𝐸):𝑄Sup−E. The STLC object judgment used for the binding-rich encoding has the ordinary variable, annotated-lambda, and application rules. Its LF signature declares 𝗍𝗆:𝗍𝗉→𝗍𝗒𝗉𝖾, with fully applied heads 𝗅𝖺𝗆:(𝗍𝗆𝐴→𝗍𝗆𝐵)→𝗍𝗆(𝖺𝗋𝗋𝐴𝐵) and 𝖺𝗉𝗉:𝗍𝗆(𝖺𝗋𝗋𝐴𝐵)→𝗍𝗆𝐴→𝗍𝗆𝐵, including their implicit 𝐴,𝐵:𝗍𝗉 products.
For the de Bruijn comparison, contexts list their newest declaration first. Membership is generated by
0:𝐴∈(𝐴,Γ)
Zero
𝑖:𝐴∈Γ
𝑖+1:𝐴∈(𝐵,Γ)
Succ
For the locally nameless comparison, the cofinite binder rule is
𝐿⊆fin𝔸∀𝑥∉𝐿.Γ,𝑥:𝐴⊢𝗅𝗇𝑡𝑥:𝐵
Γ⊢𝗅𝗇𝜆𝐴𝑡:𝐴→𝐵
LN-Lam
Chapter 62: nominal support, binding, and substitution
A finite set 𝑆 supports 𝑥 exactly when (∀𝜋)((∀𝑎∈𝑆.𝜋(𝑎)=𝑎)⟹𝜋⋅𝑥=𝑥),𝑎#𝑥⟺𝑎∉supp(𝑥). Name abstraction is the least equivalence generated by (𝑎,𝑥)∼(𝑏,(𝑎𝑏)⋅𝑥)when𝑏#𝑥,𝜋⋅[𝑎]𝑥=[𝜋(𝑎)](𝜋⋅𝑥). Its support equation is supp([𝑎]𝑥)=supp(𝑥)∖{𝑎}. The complete nominal STLC sheet is
𝑎:𝐴∈Γ
Γ⊢𝗇𝗈𝗆𝗏𝖺𝗋(𝑎):𝐴
Nom-Var
Γ⊢𝗇𝗈𝗆𝑡:𝐴→𝐵Γ⊢𝗇𝗈𝗆𝑢:𝐴
Γ⊢𝗇𝗈𝗆𝖺𝗉𝗉(𝑡,𝑢):𝐵
Nom-App
Γ,𝑎:𝐴⊢𝗇𝗈𝗆𝑡:𝐵𝑎∉dom(Γ)
Γ⊢𝗇𝗈𝗆𝗅𝖺𝗆𝐴([𝑎]𝑡):𝐴→𝐵
Nom-Lam
Capture-avoiding substitution at a binder first chooses a representative [𝑏]𝑡=[𝑐]𝑡′ with 𝑐#(𝑎,𝑢), then uses 𝗅𝖺𝗆𝐴([𝑏]𝑡)[𝑢/𝑎]=𝗅𝖺𝗆𝐴([𝑐](𝑡′[𝑢/𝑎])). The fresh-representative lemma makes the clause total, and abstraction comparison plus equivariance makes it independent of 𝑐. For a simultaneous typed substitution 𝜎:Γ→Δ, define 𝑜𝑝𝑒𝑟𝑎𝑡𝑜𝑟𝑛𝑎𝑚𝑒𝑠𝑢𝑝𝑝(𝜎) as the union of its component supports. At a binder fresh for both contexts and this support, the complete clause is 𝗅𝖺𝗆𝐴([𝑏]𝑡)[𝜎]=𝗅𝖺𝗆𝐴([𝑏](𝑡[𝜎+𝑏])),𝜎+𝑏(𝑏)=𝗏𝖺𝗋(𝑏), with 𝜎+𝑏 equal to 𝜎 on every old atom.
Chapter 63: contextual objects and hereditary substitution
The simply typed modal rules, with all premises, are Δ;Ψ⊢𝑀:𝐴Δ;Γ⊢𝖻𝗈𝗑(Ψ.𝑀):[Ψ⊢𝐴]Ctx−IΔ;Γ⊢𝑀:[Ψ⊢𝐴]Δ,𝑢::𝐴[Ψ];Γ⊢𝑁:𝐶Δ;Γ⊢𝗅𝖾𝗍𝖻𝗈𝗑(𝑀,𝑢.𝑁):𝐶Ctx−E𝑢::𝐴[Ψ]∈ΔΔ;Γ⊢𝜎:ΨΔ;Γ⊢𝖼𝗅𝗈(𝑢,𝜎):𝐴Meta. The dependent canonical extension adds ⊢Δ𝗆𝖼𝗍𝗑Δ⊢Ψ𝖼𝗍𝗑Δ;Ψ⊢𝐴⇐𝗍𝗒𝗉𝖾⊢Δ,𝑢::𝐴[Ψ]𝗆𝖼𝗍𝗑MCtxΔ⊢Ψ𝖼𝗍𝗑Δ;Ψ⊢𝐴⇐𝗍𝗒𝗉𝖾Δ,𝑢::𝐴[Ψ];Γ⊢𝐵⇐𝗍𝗒𝗉𝖾Δ;Γ⊢∏𝑢::𝐴[Ψ]𝐵⇐𝗍𝗒𝗉𝖾MPiΔ,𝑢::𝐴[Ψ];Γ⊢𝑀⇐𝐵Δ;Γ⊢𝗆𝗅𝖺𝗆(𝑢.𝑀)⇐∏𝑢::𝐴[Ψ]𝐵MLamΔ;Γ⊢𝑅⇒∏𝑢::𝐴[Ψ]𝐵Δ;Ψ⊢𝑁⇐𝐴Δ;Γ⊢𝗆𝖺𝗉𝗉(𝑅,̂Ψ.𝑁)⇒(𝐵[̂Ψ.𝑁/𝑢])𝑎𝐴[Ψ]MApp. Closure and explicit-substitution formation are Δ,𝑢::𝐴[Ψ],Δ′;Γ⊢𝜎⇐ΨΔ,𝑢::𝐴[Ψ],Δ′;Γ⊢𝖼𝗅𝗈(𝑢,𝜎)⇒(𝐴[𝜎])𝑎ΨMVar𝑋Δ;Γ⊢⋅⇐⋅SNilΔ;Γ⊢𝜎⇐ΨΔ;Γ⊢𝑀⇐(𝐴[𝜎])𝑎ΨΔ;Γ⊢𝜎,𝑀/𝑥⇐Ψ,𝑥:𝐴SNormΔ;Γ⊢𝜎⇐ΨΔ;Γ⊢𝑅⇒𝐴′𝐴′=(𝐴[𝜎])𝑎ΨΔ;Γ⊢𝜎,𝑅//𝑥⇐Ψ,𝑥:𝐴SAtom. The hereditary operation is partial on raw syntax. Preservation therefore requires the existence and well-formedness premises printed in theorem 63.6; they are part of the theorem, not implicit side conditions.