Case assigners — one signature for comparing rival theories #
The rival accounts of case assignment (Dependent.lean, Licensing.lean)
each run on their own input type and produce their own result type, so they
cannot be applied to a common stimulus — which is exactly what comparing
them requires. This file gives them one shared signature.
- The shared stimulus is
List LicensedNP— the richest of the rivals' inputs (LicensedNP extends NPInDomain), so a configural account reads itsNPInDomainprojection and ignoresneedsLicensing, while a licensing account reads the whole thing. - An
Assignermaps that stimulus to a per-labelVerdict(a surface case plus its neutralCase.Sourceprovenance). This is thePredict-style function signature, not a typeclass: rivals are ordinarydefs, so two accounts with the same input/output types coexist (which a typeclass could not host). AgreesOnCase/AgreesOnSourcecompare two accounts per projection. Divergence is the negation, witnessed by a stimulus — generalizing theagree_on_…/diverge_on_…pattern ofStudies/Woolford1997.leanandStudies/Baker2015.lean.
The Chomskyan Case Filter (Syntax/Case/Filter.lean) is a checker, not an
assigner, and is bridged separately. The paper-anchored dependent-case ⟺
licensing DOM divergence belongs in the later paper's study file
(Studies/Kalin2018.lean); the examples here only validate that the harness
is non-vacuous.
What a case account predicts for one nominal: its surface case (none
exactly when the provenance is the crash uncased) and its neutral
Case.Source provenance.
- source : Case.Source
- surfaceCase : Option Case
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
Equations
- Syntax.Case.instReprVerdict = { reprPrec := Syntax.Case.instReprVerdict.repr }
A case-assignment account as a function from the shared stimulus to a
per-label verdict (none = no nominal with that label). The signature
that makes rival theories runnable on one input.
Equations
- Syntax.Case.Assigner = (List Syntax.Case.Licensing.LicensedNP → String → Option Syntax.Case.Verdict)
Instances For
Marantz dependent case as an Assigner: it reads the configural
projection (needsLicensing ignored) and is total, so it never produces
the crash uncased.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Kalin hybrid licensing as an Assigner: an unlicensed nominal crashes to
⟨uncased, none⟩.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Two accounts agree on the surface case of every nominal in the stimulus.
Equations
- Syntax.Case.AgreesOnCase a b nps = ∀ np ∈ nps, Option.map Syntax.Case.Verdict.surfaceCase (a nps np.label) = Option.map Syntax.Case.Verdict.surfaceCase (b nps np.label)
Instances For
Two accounts agree on the provenance of every nominal in the stimulus. Two accounts can agree on case yet diverge here.
Equations
- Syntax.Case.AgreesOnSource a b nps = ∀ np ∈ nps, Option.map Syntax.Case.Verdict.source (a nps np.label) = Option.map Syntax.Case.Verdict.source (b nps np.label)
Instances For
Equations
- Syntax.Case.instDecidableAgreesOnCase a b nps = id inferInstance
Equations
- Syntax.Case.instDecidableAgreesOnSource a b nps = id inferInstance
Non-vacuity: the harness on a transitive clause #
A [subj, obj] transitive (both nominals active, no lexical case) in an
accusative language with a Turkish-style primary-T / secondary-AGRO clause.
Dependent case and hybrid licensing agree on the surface case (subj NOM,
obj ACC) but diverge on the provenance of the subject — dependent case
calls it default (unmarked last resort), licensing calls it structural
(valued by primary T). The shape of the eventual Studies/Kalin2018.lean
divergence, here only to confirm the harness is not vacuous.