Agree (Minimalist Feature Checking) #
Formalization of Agree following [Cho00] and [Adg03].
The Agree Operation #
Agree is the mechanism by which features are checked/valued:
- A probe (head with unvalued feature) searches its c-command domain
- It finds the closest goal (element with matching valued feature)
- The probe's feature is valued by copying from the goal
- Both features are then checked (and may delete at PF/LF)
Architecture #
This file contains the Agree operation and its structural conditions
(locality, activity, phase-boundedness, defective intervention). For
the feature types (PhiFeature, FeatureVal, etc.), see Features.lean.
For the failure model (what happens when Agree fails — a Probe.outcome of
unvalued, tolerated per [Pre14] Ch. 5), see Probe/Basic.lean. For
the Case Filter, see CaseFilter.lean.
Satisfaction Conditions #
Standard Agree assumes a probe is satisfied by finding a matching valued feature. [Dea24] and [Kei19] argue for richer conditions:
- Feature match: the standard case
- Head encounter: probe is satisfied by encountering a head of a particular category (e.g., Infl's probe stopped by transitive Voice)
- Disjunctive: probe is satisfied by ANY of several conditions
This captures e.g. Mam's Infl probe, which has satisfaction condition [SAT: φ or Voice_TR] — it stops when it finds either matching φ-features OR transitive Voice, whichever comes first.
Extended LI with grammatical features
This extends Harizanov's LI with Agree-relevant features. The original ⟨CAT, SEL⟩ handles selection; this adds φ, Case, etc.
- base : LexicalItem
- features : FeatureBundle
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Minimalist.instReprExtendedLI = { reprPrec := Minimalist.instReprExtendedLI.repr }
Create an extended LI from a simple LI
Equations
- Minimalist.ExtendedLI.fromSimple cat sel feats = { base := Minimalist.LexicalItem.simple cat sel, features := feats }
Instances For
Is this LI a probe (has unvalued features)?
Equations
- li.isProbe = Minimalist.FeatureType.all.any fun (t : Minimalist.FeatureType) => (li.features t).isUnvalued
Instances For
Is this LI a potential goal for a given feature type?
Equations
- li.isGoalFor ftype = Minimalist.hasValuedFeature li.features ftype
Instances For
A probe-goal pair for Agree
- probe : SyntacticObject
- goal : SyntacticObject
- feature : FeatureVal
- probeFeatures : FeatureBundle
- goalFeatures : FeatureBundle
Instances For
The probe c-commands the goal within a given tree
Equations
- a.probeCommands root = Minimalist.SO.cCommandsIn root a.probe a.goal
Instances For
The goal has the relevant valued feature
Equations
Instances For
The probe has the relevant unvalued feature
Equations
Instances For
Valid Agree: probe c-commands goal (in tree), probe has unvalued, goal has valued
Equations
- Minimalist.validAgree a root = (a.probeCommands root ∧ a.probeNeedsFeature = true ∧ a.goalHasFeature = true)
Instances For
Decidable tree presentation of Probe.search-locality
(Probe.search_eq_some_iff_closest, pred playing Probe.vis):
goal is pred-matching and c-commanded by probe, with no
pred-matching node c-commanded by probe c-commanding goal.
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.
Is target behind a horizon of category horizonCat relative to
probe in tree root?
A leaf head n of category horizonCat creates a horizon: its
c-command domain is opaque to the probe. target is behind the
horizon iff there exists a leaf n with category horizonCat
such that:
probec-commandsn(n is in probe's search domain)nc-commandstarget(target is in n's opaque domain)
This captures [Kei19]'s horizon mechanism: the probe cannot see past a head of the horizon category. Elements that are c-commanded by the horizon head are invisible to the probe.
Example: N° is a horizon for wh-probes ([AP25]).
In [DP D° [PossP Psr N°]], N° c-commands Psr (they are sisters),
so wh-probes on C° cannot reach Psr. But D° is a sister of PossP,
NOT c-commanded by N°, so the whole DP remains visible for
pied-piping.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply Agree: value the probe's feature from the goal.
Matching is by dimension (ftype.dimension), so a probe with
[uPerson:_] is valued by a goal with [Person:3rd] — the placeholder
value is irrelevant. If the goal has a valued feature at the dimension and
the probe's slot there is unvalued, the probe's slot is set to that value.
Equations
- One or more equations did not get rendered due to their size.
Instances For
T-Agree: T probes for φ-features on subject DP
T has [uφ], subject DP has [φ] → T gets valued φ.
The .third value on person probes is a conventional placeholder —
sameType ignores the specific Person value, matching any
.person _ against any .person _.
- tHead : SyntacticObject
- subject : SyntacticObject
- tFeatures : FeatureBundle
- subjFeatures : FeatureBundle
- t_has_uphi : hasUnvaluedFeature self.tFeatures (FeatureVal.phi (PhiFeature.person Person.third)) = true ∨ hasUnvaluedFeature self.tFeatures (FeatureVal.phi (PhiFeature.number Number.singular)) = true
- subj_has_phi : hasValuedFeature self.subjFeatures (FeatureVal.phi (PhiFeature.person Person.third)) = true ∨ hasValuedFeature self.subjFeatures (FeatureVal.phi (PhiFeature.number Number.singular)) = true
Instances For
C-Agree: C probes for [Q] feature
C has [uQ], interrogative element has [+Q] → question is licensed
- cHead : SyntacticObject
- qElement : SyntacticObject
- cFeatures : FeatureBundle
- qFeatures : FeatureBundle
- c_has_uq : hasUnvaluedFeature self.cFeatures (FeatureVal.q false) = true
- q_has_q : hasValuedFeature self.qFeatures (FeatureVal.q true) = true
Instances For
EPP triggers movement to specifier
When a head has [EPP], Agree is not enough - the goal must MOVE to the specifier position of the agreeing head.
Equations
- Minimalist.hasEPP fb = match fb Minimalist.FeatureType.epp with | Features.FeatureSlot.valued b => b | Features.FeatureSlot.unvalued => true | Features.FeatureSlot.absent => false
Instances For
T-to-C movement is triggered by [uQ] + [EPP] on C
In matrix questions:
- C has [uQ, EPP]
- T has [+Q] (in some analyses) or movement satisfies EPP
- T moves to C (head movement)
Equations
- Minimalist.tToCTriggered cFeats = (Minimalist.hasUnvaluedFeature cFeats (Minimalist.FeatureVal.q false) && Minimalist.hasEPP cFeats)
Instances For
Matrix C features: [uQ, EPP]
Equations
- One or more equations did not get rendered due to their size.
Instances For
Embedded C features: [uQ] only (satisfied by wh-movement)
Equations
Instances For
Matrix C triggers T-to-C
Embedded C does not trigger T-to-C
Is a feature bundle active? (has at least one unvalued feature)
An element is active iff it has at least one unvalued feature. Typically, DPs are active when they have unvalued Case.
Equations
- Minimalist.isActive fb = Minimalist.FeatureType.all.any fun (t : Minimalist.FeatureType) => (fb t).isUnvalued
Instances For
An element needs Case (has unvalued Case feature)
Equations
Instances For
An element has valued Case
Equations
Instances For
Activity is typically determined by Case: A DP is active iff it lacks Case
When a feature bundle contains only Case features, the bundle is active (has unvalued features) iff it needs Case (has unvalued Case).
A goal that satisfies the Activity Condition
- goal : SyntacticObject
- goalFeatures : FeatureBundle
- isActive : Minimalist.isActive self.goalFeatures = true
Instances For
Create an ActiveGoal if the features are indeed active
Equations
- Minimalist.mkActiveGoal goal feats = if h : Minimalist.isActive feats = true then some { goal := goal, goalFeatures := feats, isActive := h } else none
Instances For
Valid Agree with Activity Condition
Agree requires:
- Probe c-commands goal (within tree)
- Probe has unvalued feature
- Goal has matching valued feature
- Goal is ACTIVE (has some unvalued feature)
Equations
- Minimalist.validAgreeWithActivity a root = (Minimalist.validAgree a root ∧ Minimalist.isActive a.goalFeatures = true)
Instances For
Valid Agree with Phase Impenetrability Condition.
Agree is blocked if the goal is frozen in a phase interior
(Phase.Impenetrable, MCB eq 1.14.3). The strength parameter is
load-bearing: strong/weak apply the PIC block, while
linearizationBound ([SCD26]) drops it (locality is then
enforced by Cyclic Linearization, not phasehood).
Equations
- Minimalist.validAgreeWithPIC Minimalist.PICStrength.linearizationBound phases rel root = (Minimalist.validAgree rel root ∧ True)
- Minimalist.validAgreeWithPIC Minimalist.PICStrength.strong phases rel root = (Minimalist.validAgree rel root ∧ ¬∃ ph ∈ phases, ph.Impenetrable rel.goal)
- Minimalist.validAgreeWithPIC Minimalist.PICStrength.weak phases rel root = (Minimalist.validAgree rel root ∧ ¬∃ ph ∈ phases, ph.Impenetrable rel.goal)
Instances For
PIC-bounded Agree with Activity Condition.
The full Agree constraint: probe c-commands goal, feature matching holds,
goal is active, AND no intervening phase boundary blocks the relation.
See validAgreeWithPIC for the role of strength.
Equations
- Minimalist.fullAgree Minimalist.PICStrength.linearizationBound phases rel root = (Minimalist.validAgreeWithActivity rel root ∧ True)
- Minimalist.fullAgree Minimalist.PICStrength.strong phases rel root = (Minimalist.validAgreeWithActivity rel root ∧ ¬∃ ph ∈ phases, ph.Impenetrable rel.goal)
- Minimalist.fullAgree Minimalist.PICStrength.weak phases rel root = (Minimalist.validAgreeWithActivity rel root ∧ ¬∃ ph ∈ phases, ph.Impenetrable rel.goal)
Instances For
Fin-Agree: Fin probes for [±finite] on its complement (TP).
Equations
Instances For
Force-Fin-Agree: Force/C probes for clause-type features on Fin.
Equations
Instances For
Neg-Agree: Neg probes for [±neg], licensing sentential negation.
Equations
Instances For
Rel-Agree: Rel probes for [±rel], licensing relative clause formation.
Equations
Instances For
Clause-typing features match correctly.
The φ-probe: relativized search ([BR03]/[Pre14]) for a
goal bearing a valued ftype feature.
Equations
- Minimalist.phiProbe ftype = Minimalist.Probe.ofVis fun (gf : Minimalist.FeatureBundle) => (Minimalist.getValuedFeature gf ftype).isSome
Instances For
applyAgree is the φ goal→probe transmission. A φ-Agree is
Probe.transmit of the φ-probe with the valuation applyAgree: search the
goal sequence for a ftype-bearing goal, then value the probe's features
from it. This recognizes the standalone applyAgree as the transmission
step of the unified Agree operation (Probe/Transmission.lean), rather than
a parallel mechanism. (The probe→goal direction — dependent case — and a
full clause's worth of valuations are folds of transmits: the
composition axis, not a single transmit.)