Glue Semantics #
@cite{asudeh-2022}
Glue Semantics is a composition framework where meanings are assembled via proof search in the implicational fragment of linear logic (⊸). Meaning constructors are pairs M : G, where M is a lambda term and G is a linear logic formula. Composition corresponds to ⊸-elimination (functional application) and ⊸-introduction (lambda abstraction) via the Curry-Howard isomorphism.
Key properties (@cite{asudeh-2022}, §1) #
- Resource-sensitive composition: Each premise is used exactly once (no weakening, no contraction). This subsumes the Theta Criterion, Projection Principle, Full Interpretation, Completeness/Coherence, No Vacuous Quantification, and the Inclusiveness Condition as instances of a single logical principle.
- Flexible composition: The logic is commutative — word order doesn't determine composition order.
- Autonomy of syntax: Structural syntax and the logical syntax of composition are separate levels.
- Syntax/semantics non-isomorphism: One word may contribute multiple or zero meaning constructors.
Scope ambiguity #
"Everybody loves somebody" (@cite{asudeh-2022}, §4.2) yields two scope readings. Each reading corresponds to a different instantiation of the second-order ∀ in the quantifier types, producing a different premise multiset. Each multiset has exactly one normal-form proof.
Integration with linglib #
This module connects Glue to:
ScopeConfigfromMontague/Scope.leaninterp-based QR composition fromComposition/Tree.leanQuantifierComposition.leanfor the same scope example via H&K
The bridge theorem glue_qr_agree proves that Glue proof search and
QR tree interpretation yield the same truth values on the canonical
scope example.
Glue types: the implicational fragment of linear logic.
Atomic types are parameterized by strings corresponding to
s-structure nodes (e.g. "e" for the subject's semantic
contribution, "l" for the clause). The linear implication
A ⊸ B corresponds to lolli A B.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Semantics.Composition.Glue.instDecidableEqGlueTy.decEq (Semantics.Composition.Glue.GlueTy.atom a) (Semantics.Composition.Glue.GlueTy.atom b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueTy.decEq (Semantics.Composition.Glue.GlueTy.atom a) (a_1 ⊸ a_2) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueTy.decEq (a ⊸ a_1) (Semantics.Composition.Glue.GlueTy.atom a_2) = isFalse ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
A meaning constructor: a meaning term M paired with a Glue type G.
Written M : G in the Glue literature (@cite{asudeh-2022}, §2).
- meaning : α
- glue : GlueTy
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Proof terms for the implicational fragment of linear logic.
By Curry-Howard, these are simply-typed linear lambda terms:
ax n: use the term at context index n (premise or hypothesis)lolliE f a: ⊸-elimination = functional applicationlolliI hypTy body: ⊸-introduction = lambda abstraction. Extends the context withhypTy; the hypothesis is accessed inbodyvia its new index (ctx.length).
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (Semantics.Composition.Glue.GlueProof.ax a) (Semantics.Composition.Glue.GlueProof.ax b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (Semantics.Composition.Glue.GlueProof.ax a) (a_1.lolliE a_2) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (Semantics.Composition.Glue.GlueProof.ax a) (Semantics.Composition.Glue.GlueProof.lolliI a_1 a_2) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (a.lolliE a_1) (Semantics.Composition.Glue.GlueProof.ax a_2) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (a.lolliE a_1) (Semantics.Composition.Glue.GlueProof.lolliI a_2 a_3) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (Semantics.Composition.Glue.GlueProof.lolliI a a_1) (Semantics.Composition.Glue.GlueProof.ax a_2) = isFalse ⋯
- Semantics.Composition.Glue.instDecidableEqGlueProof.decEq (Semantics.Composition.Glue.GlueProof.lolliI a a_1) (a_2.lolliE a_3) = isFalse ⋯
Instances For
Type-check a proof against a context (premises ++ hypotheses).
lolliI extends the context by appending the hypothesis type;
the hypothesis is accessed in the body at index ctx.length.
Returns the conclusion type if well-typed.
Equations
- One or more equations did not get rendered due to their size.
- Semantics.Composition.Glue.GlueProof.check ctx (Semantics.Composition.Glue.GlueProof.ax a) = ctx[a]?
- Semantics.Composition.Glue.GlueProof.check ctx (Semantics.Composition.Glue.GlueProof.lolliI a a_1) = do let bodyTy ← Semantics.Composition.Glue.GlueProof.check (ctx ++ [a]) a_1 some (a ⊸ bodyTy)
Instances For
Indices of premises (from the original context) used by a proof. Hypothesis indices (≥ numPremises) are excluded.
Equations
- One or more equations did not get rendered due to their size.
- Semantics.Composition.Glue.GlueProof.usedPremises numPremises (Semantics.Composition.Glue.GlueProof.ax a) = if a < numPremises then [a] else []
- Semantics.Composition.Glue.GlueProof.usedPremises numPremises (Semantics.Composition.Glue.GlueProof.lolliI a a_1) = Semantics.Composition.Glue.GlueProof.usedPremises numPremises a_1
Instances For
A proof is resource-correct if every premise is used exactly once.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The logic landscape #
@cite{asudeh-2022} (§3) situates linear logic in a hierarchy of substructural logics (Figure 1). Logics are characterized by which structural rules they admit:
- Weakening: A premise can be freely added (Γ⊢B → Γ,A⊢B)
- Contraction: A duplicate premise can be freely discarded (Γ,A,A⊢B → Γ,A⊢B)
- Commutativity: Premises can be freely reordered (Γ,A,B⊢C → Γ,B,A⊢C)
Lambek logic L has none of these. Linear logic adds commutativity. Relevance logic adds contraction. Affine/BCK logic adds weakening. Intuitionistic logic has all three.
Semantics is best modeled by a commutative resource logic: composition is order-independent (Klein & Sag 1985: types, not order, determine composition) but resource-sensitive (each meaning used exactly once).
Structural rules that characterize logics in the substructural hierarchy.
- weakening : StructuralRule
- contraction : StructuralRule
- commutativity : StructuralRule
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Substructural logics, ordered by which structural rules they admit (@cite{asudeh-2022}, §3, Figure 1).
- lambekL : SubstructuralLogic
- linearLogic : SubstructuralLogic
- relevance : SubstructuralLogic
- affineBCK : SubstructuralLogic
- intuitionistic : SubstructuralLogic
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Semantics.Composition.Glue.SubstructuralLogic.lambekL.admitsRule x✝ = false
- Semantics.Composition.Glue.SubstructuralLogic.linearLogic.admitsRule Semantics.Composition.Glue.StructuralRule.commutativity = true
- Semantics.Composition.Glue.SubstructuralLogic.linearLogic.admitsRule x✝ = false
- Semantics.Composition.Glue.SubstructuralLogic.relevance.admitsRule Semantics.Composition.Glue.StructuralRule.weakening = false
- Semantics.Composition.Glue.SubstructuralLogic.relevance.admitsRule x✝ = true
- Semantics.Composition.Glue.SubstructuralLogic.affineBCK.admitsRule Semantics.Composition.Glue.StructuralRule.contraction = false
- Semantics.Composition.Glue.SubstructuralLogic.affineBCK.admitsRule x✝ = true
- Semantics.Composition.Glue.SubstructuralLogic.intuitionistic.admitsRule x✝ = true
Instances For
Equations
Instances For
The Glue logic is linear logic.
Equations
Instances For
Simple transitive composition (@cite{asudeh-2022}, §2) #
The simplest Glue derivation: a transitive verb with two arguments. Given meaning constructors:
likes : λy.λx.like(y)(x) : b ⊸ a ⊸ l
alex : alex : a
blake : blake : b
The unique normal-form proof applies likes to blake, then to alex:
likes : b⊸a⊸l blake : b
────────────────────────── ⊸ε
like(blake) : a⊸l alex : a
────────────────────────────── ⊸ε
like(blake)(alex) : l
Instances For
Instances For
Instances For
Premises for "Alex likes Blake".
Equations
- One or more equations did not get rendered due to their size.
Instances For
Proof: apply likes to blake, then to alex.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Argument reordering: the same proof works regardless of premise order, because the Glue logic is commutative (@cite{asudeh-2022}, §2).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Meaning constructors (@cite{asudeh-2022}, §4.2) #
Lexical entries (before instantiation):
love : λy.λx.love(y)(x) : (↑ OBJ)σ ⊸ (↑ SUBJ)σ ⊸ ↑σ
every : λQ.every(person, Q) : ∀S.(e ⊸ S) → S
some : λQ.some(person, Q) : ∀S.(s ⊸ S) → S
The ∀ quantifier in the Glue logic ranges over Glue types. Different instantiations of S yield different premise contexts, and each context has exactly one normal-form proof.
Surface scope (∀>∃): every instantiated with S=l, some with S=e⊸l. Inverse scope (∃>∀): some instantiated with S=l, every with S=s⊸l.
Instances For
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface scope proof: every(some(love)) : l
Proof structure (cf. @cite{asudeh-2022}, Figure 4):
- Apply some(S=e⊸l) to love → e ⊸ l
- Apply every(S=l) to result → l
Equations
Instances For
Inverse scope proof: some(every(λv.λu.love(u)(v))) : l
Proof structure (cf. @cite{asudeh-2022}, Figure 5):
- Assume [v:e]³, [u:s]⁴
- Apply love to u (s-arg) then to v (e-arg) → l
- Abstract over u → s⊸l, then over v → e⊸s⊸l
- Apply every(S=s⊸l) → s⊸l
- Apply some(S=l) → l
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surface proof type-checks to l.
Inverse proof type-checks to l.
Surface proof uses each premise exactly once.
Inverse proof uses each premise exactly once.
The Glue logic tells us how to compose meanings but not what
the meanings are. The meaning terms are ordinary Montague-style
denotations. We connect Glue proofs to truth conditions by
evaluating them over the same toyModel used by
QuantifierComposition.lean.
The toy model has no `love` predicate, so we use `sees_sem` as
the transitive relation. The logical structure is identical.
Surface scope: every(person, λx. some(person, λy. sees(y)(x)))
Inverse scope: some(person, λy. every(person, λx. sees(y)(x)))
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two Glue readings differ (genuine ambiguity).
Surface scope is true in the toy model (each person sees some person).
Inverse scope is false in the toy model (no single person is seen by everyone).
Both Glue and QR are extensionally equivalent on the canonical
scope example: both yield exactly {∀>∃, ∃>∀} with the same
truth values. The QR side is computed via interp from
Composition/Tree.lean, connecting Glue to the H&K composition
engine.
Map ScopeConfig to truth values via Glue evaluation.
Equations
Instances For
Map ScopeConfig to truth values via QR tree interpretation (@cite{heim-kratzer-1998} Ch. 5).
Equations
- One or more equations did not get rendered due to their size.
Instances For
QR surface scope tree produces the same truth value as Glue.
QR inverse scope tree produces the same truth value as Glue.
Glue and QR yield identical truth values for both scope readings.
Two fundamentally different composition mechanisms — proof search in linear logic (Glue, @cite{asudeh-2022}) vs. covert movement with Predicate Abstraction (QR, @cite{heim-kratzer-1998}) — produce the same semantic results.
@cite{asudeh-2022} (§3) argues that linear logic resource sensitivity subsumes several well-formedness conditions from different frameworks. These are all instances of: in a valid linear logic proof, each premise is used exactly once.
- completenessCoherence : ResourceCondition
- thetaCriterion : ResourceCondition
- projectionPrinciple : ResourceCondition
- noVacuousQuantification : ResourceCondition
- fullInterpretation : ResourceCondition
- inclusivenessCondition : ResourceCondition
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Resource sensitivity = no weakening + no contraction. No weakening means every premise must be consumed (captures fullInterpretation, inclusivenessCondition). No contraction means each premise consumed at most once (captures thetaCriterion, noVacuousQuantification). Together they enforce completenessCoherence and projectionPrinciple.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
@cite{asudeh-2022} (§4) distinguishes three approaches to the syntax-semantics interface:
1. **Interpretive** (H&K/QR): Syntax produces LF, which is
directly interpreted. Scope ambiguity requires a syntactic
operation (QR/covert movement) — two distinct LF trees.
2. **Parallel** (CG/CCG): Syntax and semantics computed in
lockstep. Scope ambiguity requires type-shifting operations
and corresponding categorial modifications.
3. **Glue** (separable logic): Syntax produces meaning
constructors; composition is proof search. Scope ambiguity
arises from multiple ∀-instantiations — no syntactic ambiguity
or type-shifting needed.
linglib formalizes all three: H&K in `Composition/Tree.lean`,
CCG in `CCG/Interface.lean`, Glue here.
- interpretive : CompositionApproach
- parallel : CompositionApproach
- glueSeparable : CompositionApproach
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
How each approach handles scope ambiguity.
- covertMovement : ScopeAmbiguityMechanism
- typeShifting : ScopeAmbiguityMechanism
- proofSearch : ScopeAmbiguityMechanism
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Semantics.Composition.Glue.CompositionApproach.interpretive.scopeMechanism = Semantics.Composition.Glue.ScopeAmbiguityMechanism.covertMovement
- Semantics.Composition.Glue.CompositionApproach.parallel.scopeMechanism = Semantics.Composition.Glue.ScopeAmbiguityMechanism.typeShifting
- Semantics.Composition.Glue.CompositionApproach.glueSeparable.scopeMechanism = Semantics.Composition.Glue.ScopeAmbiguityMechanism.proofSearch
Instances For
Glue is the only approach that derives scope ambiguity from proof search rather than syntactic or type-theoretic operations.
In Glue, the structural syntax need not be ambiguous to derive scope ambiguity — the ambiguity is in the proof space.
Equations
- Semantics.Composition.Glue.requiresSyntacticOperation Semantics.Composition.Glue.CompositionApproach.interpretive = true
- Semantics.Composition.Glue.requiresSyntacticOperation Semantics.Composition.Glue.CompositionApproach.parallel = false
- Semantics.Composition.Glue.requiresSyntacticOperation Semantics.Composition.Glue.CompositionApproach.glueSeparable = false