Typed Slot-Filler Representation #
@cite{dunn-2025} @cite{kay-fillmore-1999} @cite{fillmore-kay-oconnor-1988} @cite{goldberg-1995}
Constructions are sequences of slots, where each slot is either fixed (a specific lexeme), open (any word of a given syntactic category), or headed (a phrase headed by a specific lexeme). @cite{dunn-2025}'s variationist CxG treats abstraction as continuous (the proportion of open slots). @cite{kay-fillmore-1999} add grammatical functions, coreference indices, and syntactic constraints to the slot representation.
Architecture #
Slot Lex combines six pieces of information into one type:
| Field | Type | Source |
|---|---|---|
filler | SlotFiller Lex | @cite{dunn-2025} + @cite{kay-fillmore-1999} (fixed/open/headed) |
role | Option String | @cite{goldberg-1995} (semantic role) |
isHead | Bool | ArgumentStructure.lean |
gf | Option GramFunction | @cite{kay-fillmore-1999} (grammatical function) |
refIdx | Option RefIndex | @cite{kay-fillmore-1999} (coreference index) |
constraints | List SlotConstraint | @cite{kay-fillmore-1999} (syntactic constraints) |
TypedForm Lex := List (Slot Lex) is the typed form side of a construction.
The existing ConstructionSlot (which only represents open slots) embeds
into Slot String via ConstructionSlot.toSlot (§3).
Key definitions #
abstractionLevel: continuous [0,1] proportion of open slots (ℚ)derivedSpecificity: derivesSpecificityfrom slot structurehasConstraint/refGroupCount: cross-slot constraint queriesConstructionSlot.toSlot: embeds existing all-open slots
Verification theorems live in Phenomena/Constructions/Bridge/SlotVerification.lean.
A slot's filler: the representation level of slot content.
@cite{dunn-2025} distinguishes three representation levels for slot content:
- LEX (lexeme): a specific word form →
fixed "must" - SYN (syntactic): any word of a given POS category →
open_.VERB - SEM+ (semantic): any expression satisfying a semantic constraint →
semantic "animate"(any animate NP)
@cite{kay-fillmore-1999} add headed phrases: headed "doing".VERB (a VP
headed by doing). These are LEX-level (they fix the head lexeme).
Parameterized over Lex (the lexeme type) so the same representation
works for strings, morphemes, or phonological forms.
- fixed {Lex : Type} : Lex → SlotFiller Lex
- open_ {Lex : Type} : UD.UPOS → SlotFiller Lex
- headed {Lex : Type} : Lex → UD.UPOS → SlotFiller Lex
- semantic
{Lex : Type}
: String → SlotFiller Lex
A semantically constrained slot (@cite{dunn-2025}, SEM+ level).
semantic "animate"means any expression satisfying the semantic property "animate". More abstract than SYN (category-based): the filler is constrained by meaning, not by syntactic category.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.fixed a) (ConstructionGrammar.SlotFiller.fixed b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.fixed a) (ConstructionGrammar.SlotFiller.open_ a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.fixed a) (ConstructionGrammar.SlotFiller.headed a_1 a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.fixed a) (ConstructionGrammar.SlotFiller.semantic a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.open_ a) (ConstructionGrammar.SlotFiller.fixed a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.open_ a) (ConstructionGrammar.SlotFiller.open_ b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.open_ a) (ConstructionGrammar.SlotFiller.headed a_1 a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.open_ a) (ConstructionGrammar.SlotFiller.semantic a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.headed a a_1) (ConstructionGrammar.SlotFiller.fixed a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.headed a a_1) (ConstructionGrammar.SlotFiller.open_ a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.headed a a_1) (ConstructionGrammar.SlotFiller.semantic a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.semantic a) (ConstructionGrammar.SlotFiller.fixed a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.semantic a) (ConstructionGrammar.SlotFiller.open_ a_1) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.semantic a) (ConstructionGrammar.SlotFiller.headed a_1 a_2) = isFalse ⋯
- ConstructionGrammar.instDecidableEqSlotFiller.decEq (ConstructionGrammar.SlotFiller.semantic a) (ConstructionGrammar.SlotFiller.semantic b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- ConstructionGrammar.instBEqSlotFiller.beq (ConstructionGrammar.SlotFiller.fixed a) (ConstructionGrammar.SlotFiller.fixed b) = (a == b)
- ConstructionGrammar.instBEqSlotFiller.beq (ConstructionGrammar.SlotFiller.open_ a) (ConstructionGrammar.SlotFiller.open_ b) = (a == b)
- ConstructionGrammar.instBEqSlotFiller.beq (ConstructionGrammar.SlotFiller.headed a a_1) (ConstructionGrammar.SlotFiller.headed b b_1) = (a == b && a_1 == b_1)
- ConstructionGrammar.instBEqSlotFiller.beq (ConstructionGrammar.SlotFiller.semantic a) (ConstructionGrammar.SlotFiller.semantic b) = (a == b)
- ConstructionGrammar.instBEqSlotFiller.beq x✝¹ x✝ = false
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Grammatical function of a valence member (@cite{kay-fillmore-1999}, Figure 12). Distinct from semantic role: a subject (gf) can be an agent, theme, or experiencer (role).
- subj : GramFunction
- comp : GramFunction
- obj : GramFunction
- pred : GramFunction
Instances For
Equations
- ConstructionGrammar.instBEqGramFunction.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Referential index for cross-slot coreference constraints. Slots sharing the same RefIndex must have their semantic values unified. @cite{kay-fillmore-1999} use #1, #2, etc. to express identity between a construction's semantic arguments and its valence members' semantic values.
Equations
Instances For
Syntactic constraint on a slot (@cite{kay-fillmore-1999}, Figure 12).
- locMinus : SlotConstraint
- negMinus : SlotConstraint
- refEmpty : SlotConstraint
Instances For
Equations
- ConstructionGrammar.instBEqSlotConstraint.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
A slot in a construction: filler content + semantic role + headedness.
Subsumes ConstructionSlot (which only represents open slots) by adding
the fixed/open distinction via SlotFiller. Fixed slots (like "let" in
let alone) have role := none since they carry no independent semantic
role.
- filler : SlotFiller Lex
What fills this slot: a specific lexeme, open category, or headed phrase
Semantic role label (agent, theme, etc.), if any
- isHead : Bool
Whether this slot is the head of the construction
- gf : Option GramFunction
Grammatical function (subj, comp, obj, pred) — @cite{kay-fillmore-1999}
Coreference index: slots sharing an index have unified semantics
- constraints : List SlotConstraint
Syntactic constraints on this slot ([loc -], [neg -], [ref ∅])
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.
- ConstructionGrammar.instBEqSlot.beq x✝¹ x✝ = false
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
A typed form: the form side of a construction as a sequence of slots.
This replaces Construction.form : String with a structured representation
that supports computation (abstraction level, specificity derivation).
Equations
Instances For
Proportion of open slots: a continuous [0,1] measure of abstraction.
This computes the fraction of slots that are open (SYN or SEM+).
@cite{dunn-2025} defines four discrete abstraction orders based on
which representation levels appear (1st = all LEX, 2nd = mostly LEX,
3rd = mixed, 4th = all abstract). This function computes the continuous
proportion underlying those orders; derivedSpecificity (below)
maps to the three-way Specificity enum.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Derive Specificity from the slot structure.
| Condition | Result |
|---|---|
| All slots open | .fullyAbstract |
| No slots open | .lexicallySpecified |
| Mix of fixed and open | .partiallyOpen |
This makes Specificity a derived property rather than a stipulated one:
changing a slot from open to fixed automatically changes the specificity.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Convert an ArgStructureConstruction's slot list to a TypedForm.
Equations
Instances For
All-open slots are always open (by construction).
Does any slot in the form bear a given constraint?
Equations
- ConstructionGrammar.hasConstraint form c = List.any form fun (x : ConstructionGrammar.Slot Lex) => x.constraints.any fun (x : ConstructionGrammar.SlotConstraint) => x == c
Instances For
Count of distinct coreference groups in a form.
Equations
- ConstructionGrammar.refGroupCount form = (List.filterMap (fun (x : ConstructionGrammar.Slot Lex) => x.refIdx) form).eraseDups.length