Agree (Minimalist Feature Checking) #
Formalization of Agree following [Cho00] and [Adg03].
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)
This file states Agree's structural conditions over SyntacticObject
trees (c-command locality, horizons, phase-boundedness) and the valuation
step over FeatureBundles. Bundles live in a feature assignment
LIToken → FeatureBundle rather than in the carrier — the free-Merge core
keeps SO₀ features atomic (Features/Slot.lean) — and a constituent
exposes its projecting head's bundle through selection-driven labeling
(headBundle). The feature types live in Features.lean; the search
kernel and failure model ([Pre14] Ch. 5) in Probe/Basic.lean;
richer satisfaction conditions ([Dea24], [Kei19]) in
Probe/Satisfaction.lean; the Case Filter in Syntax/Case/Filter.lean.
Agree relations #
Feature bundles live in a feature assignment LIToken → FeatureBundle,
not in the carrier (Features/Slot.lean). A constituent exposes its
projecting head's bundle through selection-driven labeling
(SyntacticObject.selHead), so an Agree relation's feature conditions and
its structural conditions are read off one tree and one assignment.
The feature bundle s exposes to Agree under the assignment feats:
its projecting head's bundle. An unlabelable constituent exposes no
features (⊥), so it can neither probe nor serve as a goal.
Equations
- Minimalist.headBundle feats s = (Option.map feats s.selHead).getD ⊥
Instances For
Valid Agree under a feature assignment: probe c-commands goal in
root, the probe's head bears an unvalued t-slot, and the goal's head
bears a valued one.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Minimalist.instDecidableValidAgree feats root probe goal t = id inferInstance
Nothing Agrees with itself: one slot cannot be both unvalued and valued. Irreflexivity is a fact about the assignment being a single source of feature truth, not about c-command (a multiply-occurring subterm can c-command itself).
Locality: closest goal #
"Closest matching goal, no intervener" is canonically the list engine
Probe.search (Probe/Basic.lean, search_eq_some_iff_closest, with pred
playing Probe.vis). SyntacticObject is a commutative magma with no
canonical c-command linearization, so the tree↔list bridge is not
definitional; isClosestGoalIn is the decidable tree-native presentation.
goal is a closest pred-goal for probe in root: 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
- Minimalist.instDecidableIsClosestGoalIn root probe goal pred = id (have this := Multiset.decidableExistsMultiset; inferInstance)
Equations
- One or more equations did not get rendered due to their size.
target is behind a horizon of category horizonCat for probe in
root: some horizonCat leaf sits in probe's search domain and
c-commands target, rendering it invisible ([Kei19]).
Example: N° is a horizon for wh-probes ([AP25]). In
[DP D° [PossP Psr N°]], N° c-commands Psr, so wh-probes on C° cannot
reach Psr; D° is not c-commanded by N°, so the whole DP stays visible
for pied-piping.
The canonical list-native horizon specification is Probe.Profile
(Probe/Profile.lean); this is the tree-native presentation.
Equations
- Minimalist.behindHorizonIn root probe target horizonCat = ∃ n ∈ root.subtrees, Minimalist.isHorizonLeafFor✝ horizonCat n ∧ root.cCommandsIn n target ∧ root.cCommandsIn probe n
Instances For
Equations
- Minimalist.instDecidableBehindHorizonIn root probe target horizonCat = Multiset.decidableExistsMultiset
Feature valuation #
Apply Agree: value the probe's feature from the goal. If the goal has a
valued feature at dimension t and the probe's t-slot is unvalued, the
probe's slot is set to that value; none when the goal has nothing to
transmit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Phase-bounded Agree #
Agree bounded by the Phase Impenetrability Condition: valid Agree whose
goal every phase admits extraction from (Phase.admitsExtraction). Under
strong/weak this blocks goals frozen in a phase interior; under
linearizationBound ([SCD26]) the phasehood layer is
transparent and locality falls to Cyclic Linearization.
Equations
- Minimalist.validAgreeWithPIC strength phases feats root probe goal t = (Minimalist.validAgree feats root probe goal t ∧ ∀ ph ∈ phases, Minimalist.admitsExtraction strength ph goal)
Instances For
Equations
- Minimalist.instDecidableValidAgreeWithPIC strength phases feats root probe goal t = id inferInstance
applyAgree as a Probe transmission #
The φ-probe: relativized search ([BR03]/[Pre14]) for a
goal bearing a valued feature at dimension t.
Equations
- Minimalist.phiProbe t = Minimalist.Probe.ofVis fun (gf : Minimalist.FeatureBundle) => (gf.getValuedFeature t).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 t-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.)