Dependent case #
Structural case read off the arrangement of NPs in a domain, under a disjunctive hierarchy: case a lexical head has valued is kept; otherwise an NP that c-commands a distinct caseless NP in the domain takes the domain's high case and one c-commanded by such an NP its low case, the two rules reading the same configuration, so a domain with both marks the higher NP and the lower NP at once; whatever remains takes the domain's elsewhere case. Which of the two dependent rules a clause has is its alignment: accusative, ergative, tripartite or neutral. The passes are generic in what an NP is, so a phase-cyclic grammar can run them domain by domain.
Main definitions #
Case.Mechanism: what valued a case, a lexical head, a dependent rule, Agree, or the elsewhere case, shared by every account of case assignment.Case.lexicalValuation: the valuation of NPs by lexical case.DependentCase.Rules: the high, low and elsewhere cases of one domain, andRules.ofAlignment, the rules of an alignment.Rules.dependentPass,Rules.unmarkedPass: the passes, over the NPs a predicate selects.Rules.valuations: the valuations the rules can assign.Rules.assign,assignCases: the one-domain algorithm, and its form for an alignment.
Main results #
Rules.dependentPass_high,Rules.dependentPass_low,Rules.dependentPass_alone: what the dependent rules do to an NP with a caseless NP below it, above it, or neither.Rules.extends_dependentPass,Rules.extends_unmarkedPass,Rules.extends_assign: each pass extends the valuation by what the rules assign.Rules.assign_length: the algorithm is total.Rules.assign_getElem?_of_some: lexical case is kept, so it bleeds the dependent rules.Rules.case_mem_cases: a caseless NP is valued only with a case the rules mention.Rules.assign_singleton,Rules.assign_pair: the algorithm in closed form on domains of one and two NPs.Rules.classifies_marking_ofAlignment: the rules of an alignment mark S, A and P with that alignment.
Implementation notes #
List position encodes structural height: earlier is higher, and c-commands everything later.
The NPs are of any type, identified by that type rather than by a label; a study's NPs are
its own positions, and Valuation.valueOf reads off the case of one. The passes are
Valuation.fill, so what they share (totality, persistence of values) comes from
Case.Valuation.Extends.
References #
Mechanisms #
Equations
- Case.instDecidableEqMechanism x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Case.instReprMechanism = { reprPrec := Case.instReprMechanism.repr }
Equations
- Case.instReprMechanism.repr Case.Mechanism.lexical prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Case.Mechanism.lexical")).group prec✝
- Case.instReprMechanism.repr Case.Mechanism.dependent prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Case.Mechanism.dependent")).group prec✝
- Case.instReprMechanism.repr Case.Mechanism.agree prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Case.Mechanism.agree")).group prec✝
- Case.instReprMechanism.repr Case.Mechanism.unmarked prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Case.Mechanism.unmarked")).group prec✝
Instances For
The lexical valuation #
Every NP with its lexical case valued and nothing else.
Equations
- Case.lexicalValuation lexicalCase xs = Case.Valuation.initial (fun (x : α) => Option.map (fun (x : Case) => (x, Case.Mechanism.lexical)) (lexicalCase x)) xs
Instances For
Rules #
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
Equations
- DependentCase.instReprRules = { reprPrec := DependentCase.instReprRules.repr }
The clausal rules of an alignment: accusative on the lower NP, ergative on the higher, both, or neither, with the elsewhere case nominative where the lower NP is marked and absolutive otherwise. A split-S system is not a dependent-case setting and gets the neutral rules.
Equations
- DependentCase.Rules.ofAlignment Alignment.AlignmentType.accusative = { low := some Case.acc, unmarked := some Case.nom }
- DependentCase.Rules.ofAlignment Alignment.AlignmentType.ergative = { high := some Case.erg, unmarked := some Case.abs }
- DependentCase.Rules.ofAlignment Alignment.AlignmentType.tripartite = { high := some Case.erg, low := some Case.acc, unmarked := some Case.abs }
- DependentCase.Rules.ofAlignment Alignment.AlignmentType.neutral = { unmarked := some Case.nom }
- DependentCase.Rules.ofAlignment Alignment.AlignmentType.active = { unmarked := some Case.nom }
Instances For
The passes #
The dependent rules over the NPs P selects: the high case goes to those c-commanding
another and the low case to those c-commanded by another, both read off the same
configuration; an NP in both positions takes the high case.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The elsewhere case to the unvalued NPs P selects.
Equations
- r.unmarkedPass P s = Case.Valuation.fill (fun (x : ℕ) (x_1 : α) => if P x_1 = true then Option.map (fun (x : Case) => (x, Case.Mechanism.unmarked)) r.unmarked else none) s
Instances For
Case for every NP of one domain, lex giving the case a lexical head has valued: the
dependent rules, then the elsewhere case.
Equations
- r.assign lex xs = r.unmarkedPass (fun (x : α) => true) (r.dependentPass (fun (x : α) => true) (Case.lexicalValuation lex xs))
Instances For
The one-domain algorithm of an alignment.
Equations
- DependentCase.assignCases a lex xs = (DependentCase.Rules.ofAlignment a).assign lex xs
Instances For
What the passes assign #
The valuations the rules can assign: a dependent case, or the elsewhere case.
Equations
- r.valuations = {v : Case × Case.Mechanism | v.2 = Case.Mechanism.dependent ∧ (r.high = some v.1 ∨ r.low = some v.1) ∨ v.2 = Case.Mechanism.unmarked ∧ r.unmarked = some v.1}
Instances For
Assignment extends the lexical valuation by what the rules assign.
Lexical case is kept, so it bleeds the dependent rules.
A caseless NP is valued only with a case the rules mention.
What the dependent rules do #
A caseless NP with a caseless NP below it in the domain takes the high case.
A caseless NP with a caseless NP above it in the domain, and none below it that the high rule could mark it for, takes the low case.
A caseless NP alone in its domain is untouched by the dependent rules.
With no elsewhere case the pass does nothing.
With neither dependent case the pass does nothing.
Domains of one and two NPs #
The valuation of an NP no dependent rule reaches: its lexical case, or the elsewhere case.
Equations
- r.elsewhere lexical = (Option.map (fun (x : Case) => (x, Case.Mechanism.lexical)) lexical).or (Option.map (fun (x : Case) => (x, Case.Mechanism.unmarked)) r.unmarked)
Instances For
Of two NPs the dependent rules reach both or neither: when neither has lexical case, the higher takes the high case and the lower the low case, where the rules have one.
Alignment #
The marking the rules give the core roles: S alone in its domain, and A above P in theirs.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The rules of an alignment mark the core roles with that alignment.
Alignments on a transitive and an intransitive clause #
Two caseless NPs: the accusative rules value the lower accusative and leave the higher nominative, the ergative rules mirror this, and the tripartite rules do both.
A sole caseless NP takes the elsewhere case under every alignment.