Dependency grammar substrate #
Core data types for dependency grammar: words connected by typed directed
edges (Dependency), trees built over them (DepTree), and enhanced
graphs allowing multiple incoming arcs (DepGraph). Argument structures
(ArgStr) record direction and selectional category for each slot.
Dependency relations use UD.DepRel from Core/UD.lean (Universal
Dependencies v2). [Hud10], [Gib25].
Main declarations #
Dependency,DepTree,DepGraph— the basic graph-shaped data.ArgStr,argStrV0/VN/VNN/VPassive— argument-structure schemas for the standard intransitive / transitive / ditransitive / passive valences.hasUniqueHeads,isAcyclic,isWellFormed— structural well-formedness predicates (Bool-valued; see Implementation notes).mkSVTree,mkSVOTree,mkDetNVTree,mkDitransTree— small fixture builders used by Studies and Formal/ test data.
Implementation notes #
- Predicate-shape definitions return
Boolrather thanProp+[Decidable]; this is a substrate-wide convention that downstream files inherit, and migrating it is a separate refactor.
Direction of a dependent relative to head.
Instances For
Equations
- DepGrammar.instReprDir.repr DepGrammar.Dir.left prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "DepGrammar.Dir.left")).group prec✝
- DepGrammar.instReprDir.repr DepGrammar.Dir.right prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "DepGrammar.Dir.right")).group prec✝
Instances For
Equations
- DepGrammar.instReprDir = { reprPrec := DepGrammar.instReprDir.repr }
Equations
- DepGrammar.instDecidableEqDir x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- DepGrammar.instInhabitedDir = { default := DepGrammar.instInhabitedDir.default }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- DepGrammar.instReprArgSlot = { reprPrec := DepGrammar.instReprArgSlot.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- DepGrammar.instReprArgStr = { reprPrec := DepGrammar.instReprArgStr.repr }
Equations
- DepGrammar.instReprArgStr.repr x✝ prec✝ = Std.Format.bracket "{ " (Std.Format.nil ++ Std.Format.text "slots" ++ Std.Format.text " := " ++ (Std.Format.nest 9 (repr x✝.slots)).group) " }"
Instances For
Equations
- DepGrammar.instDecidableEqArgStr.decEq { slots := a } { slots := b } = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Dependencies and trees #
A dependency: directed edge from head to dependent. Uses UD.DepRel for the relation label.
- headIdx : ℕ
- depIdx : ℕ
- depType : UD.DepRel
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- DepGrammar.instReprDependency = { reprPrec := DepGrammar.instReprDependency.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
A dependency tree for a sentence. frames carries the DG-specific lexical
argument-structure premises, aligned with words (missing/short = no frame):
the frame is framework apparatus (like HPSG's ARG-ST), so it lives on DG's
tree, not on the shared Word token. Frames come from the lexical carrier at
tree construction (complementToArgStr applied to a verb's complementType).
- words : List Word
- deps : List Dependency
- rootIdx : ℕ
- frames : List (Option ArgStr)
Instances For
Equations
- DepGrammar.instReprDepTree = { reprPrec := DepGrammar.instReprDepTree.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
An enhanced dependency graph: like DepTree but allows multiple heads per word. Relaxes the unique-heads constraint.
- words : List Word
- deps : List Dependency
- rootIdx : ℕ
Instances For
Equations
- DepGrammar.instReprDepGraph = { reprPrec := DepGrammar.instReprDepGraph.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
Intransitive verb: subject to the left
Equations
- DepGrammar.argStr_V0 = { slots := [{ depType := UD.DepRel.nsubj, dir := DepGrammar.Dir.left, cat := some UD.UPOS.DET }] }
Instances For
Transitive verb: subject left, object right
Equations
- One or more equations did not get rendered due to their size.
Instances For
Ditransitive verb: subject left, indirect object right, object right
Equations
- One or more equations did not get rendered due to their size.
Instances For
Passive transitive: subject left (was patient), optional by-phrase right
Equations
- One or more equations did not get rendered due to their size.
Instances For
Map a complement type to the corresponding standard DG argument structure.
Returns none for frames without a standard schema: clause-embedding
types take xcomp/ccomp, not obj, and .np_pp has no fixture here.
Equations
Instances For
Check if every word except root has exactly one head.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Check for cycles: no word is its own ancestor.
Equations
- DepGrammar.isAcyclic t = (List.range t.words.length).all fun (start : ℕ) => DepGrammar.isAcyclic.follow t start [] (t.words.length + 1)
Instances For
Equations
- One or more equations did not get rendered due to their size.
- DepGrammar.isAcyclic.follow t current visited 0 = true
Instances For
Bundled well-formedness: unique heads + valid index bounds. Collects the three hypotheses that most dominance/planarity theorems need.
- uniqueHeads : hasUniqueHeads t = true
- depIdx_lt (d : Dependency) : d ∈ t.deps → d.depIdx < t.words.length
- headIdx_lt (d : Dependency) : d ∈ t.deps → d.headIdx < t.words.length
Instances For
Check subject-verb number agreement.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Check determiner-noun number agreement.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Check if a dependency tree satisfies an argument structure
Equations
- One or more equations did not get rendered due to their size.
Instances For
Core argument relations governed by lexical frames.
Equations
Instances For
Every core-argument dependent of headIdx is licensed by a slot of
argStr — the closed-world half of frame checking (satisfiesArgStr
only checks that required slots are filled).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Check each verb's dependents against its lexical frame: required slots
filled in the right direction (satisfiesArgStr) and no unlicensed core
arguments (coreArgsLicensed). Verbs without a frame are skipped.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create a simple SV tree: subject -> verb.
Equations
- DepGrammar.mkSVTree subj verb frame = { words := [subj, verb], deps := [{ headIdx := 1, depIdx := 0, depType := UD.DepRel.nsubj }], rootIdx := 1, frames := [none, frame] }
Instances For
Create a simple SVO tree: subject -> verb <- object.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create Det-N-V tree: det -> noun -> verb.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Create a ditransitive tree: subj -> verb <- iobj <- obj.
Equations
- One or more equations did not get rendered due to their size.