Probe: relativized search over a goal sequence #
A Probe α is the theory-agnostic relativized-search kernel over a
goal sequence List α. It bundles what the probe sees (vis — the
search halts at the first visible goal) and what it can value there
(act — a visible but inactive goal absorbs the probe, [Dea24]-style
interaction vs. satisfaction). Probe specifications — relativized
targets, satisfaction conditions, horizon profiles, articulated/dynamic
probes — denote a Probe by a toProbe-map rather than re-implementing
search.
This models a probe's search (locality, intervention, satisfaction);
feature transmission — what a successful Agree copies/shares/values — is
a separate concern (Agree.applyAgree). This is the general core: the
φ-specialization is in Probe/Phi.lean, the satisfaction spec in
Probe/Satisfaction.lean, Keine's horizon spec in Probe/Profile.lean.
Main declarations #
Probe,Probe.ofVis,Probe.indiscriminate— the bundle and constructors.Probe.search/Probe.agree— first visible goal / that goal if active.Probe.outcome,Probe.Outcome— valued vs. unvalued.Probe.Licensed,Probe.AllLicensed,allLicensed_iff— one search licenses at most one goal (the Person Licensing Condition's engine).Probe.cascade— ordered probe sequence, first with output wins.
toProbe specs denoting a Probe: Probe.Target.toProbe,
SatisfactionCond.toProbe, Probe.Profile.toProbe,
Probe.Articulated.toProbes, Deal2024.ProbeState.probe.
TODO #
- Transmission axis.
Probemodels search, not what a successful Agree copies/shares/values. AProbe.agreeWith : Probe α → (α → V) → List α → Σ(Σ =Option V/List Vfor [Hir01] Multiple Agree / a shared-occurrence type for Frampton-Gutmann feature-sharing) would foldapplyAgree, Multiple Agree, Agree-Link/Copy ([AN12]), and case-by-Agree into one extension. - Upward Agree. Search is downward (c-command,
search_eq_some_iff_closest); add a direction parameter for Bjorkman & Zeijlstra (2019)-style upward Agree. Preorder (Probe α)by pointwisevis-refinement, sooutcome_valued_mono/Deal2024.probe_vis_antitonebecome order facts.HalpertHammerly2026.agreementClass: re-stipulated relativized search; should be twoProbesearches with a_eq_derivedtheorem.
The outcome of an obligatory probing operation ([Pre14] Ch. 5):
valued iff the search found a goal. An unvalued outcome is failed Agree
— under the obligatory-operations model it is tolerated (no crash) and spells
out as the Elsewhere/default entry; study files read it off Probe.outcome.
Instances For
Equations
- Minimalist.Probe.instDecidableEqOutcome x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Minimalist.Probe.instReprOutcome = { reprPrec := Minimalist.Probe.instReprOutcome.repr }
Equations
- One or more equations did not get rendered due to their size.
Instances For
A probe with a visibility condition and no activity restriction.
Equations
- Minimalist.Probe.ofVis vis = { vis := vis }
Instances For
The indiscriminate probe: sees every goal, so bare minimality delivers the closest one ([Hal12]'s L⁰).
Equations
- Minimalist.Probe.indiscriminate = Minimalist.Probe.ofVis fun (x : α) => true
Instances For
Search #
The found goal is a member of the sequence.
Over a two-goal sequence whose lower goal's visibility entails the higher's, the search lands on the higher goal if anywhere — the kernel of "gluttony/competition only in inverse configurations" ([CK21]) and of highest-only licensing ([Hal12]).
Locality as list search: the probe finds a iff a is visible and
every earlier goal is invisible (no intervener).
The outcome of an obligatory probing operation over a goal
sequence: valued iff the search finds a goal.
Equations
- p.outcome goals = if (p.search goals).isSome = true then Minimalist.Probe.Outcome.valued else Minimalist.Probe.Outcome.unvalued
Instances For
The probe is valued iff the search finds a goal.
The probe ends unvalued iff the search comes back empty.
The probe is valued iff some goal is visible to it.
The probe ends unvalued iff no goal is visible to it.
Widening visibility can only keep a probe valued: if p is valued
and q sees everything p sees (among goals), so is q. The
substrate home of [Dea24]-style narrowing (Deal2024's
probe_vis_antitone is the contrapositive on a probe family).
Licensing #
Equations
- p.instDecidableLicensedOfDecidableEq goals a = Minimalist.Probe.instDecidableLicensedOfDecidableEq._aux_1 p goals a
Licensing is being the closest visible goal: no matching goal
intervenes (search_eq_some_iff_closest in the licensing API).
A licensed goal is a member of the sequence.
Licensing by the indiscriminate probe is being the structurally closest goal — bare minimality, [Hal12]'s L⁰.
Every goal that needs licensing is licensed by the probe's
search. Which goals need licensing (needs) and which the
probe sees (p.vis) come apart in general: [Hal12]'s
Zulu L⁰ sees every goal (augmented nominals intervene) while only
augmentless nominals need it. Feature-relativized probes are the
diagonal p.AllLicensed p.vis — the probe sees exactly the needy
([BR03]'s π as relativized by [Pre14]).
Equations
- p.AllLicensed needs goals = ∀ (a : α), a ∈ goals → needs a = true → p.Licensed goals a
Instances For
Equations
- p.instDecidableAllLicensedOfDecidableEq needs goals = Minimalist.Probe.instDecidableAllLicensedOfDecidableEq._aux_1 p needs goals
On the diagonal (probe relativized to exactly the needy), all
needy goals are licensed iff the visible goals are subsingleton:
one search, one Agree relation, at most one licensee — the fact
behind [Pre14]'s AF person restriction. (The
off-diagonal variant of the same one-licensee engine drives
[BR03]'s PCC — Studies/BejarRezac2003.lean.)
allLicensed_iff in Set.Subsingleton form, for mathlib-API
discoverability.
Licensing by the indiscriminate probe pins every needy goal to the head of the sequence — the highest-element condition ([Hal12]: an augmentless nominal must be the highest nominal in its vP).
Cascades #
The goal an ordered sequence of probes delivers: the first
probe's finding, else the next's, and so on — Probe.search at
the goal level composed with List.findSome? at the probe level.
This is also the single-slot morphological competition: the first
probe with output wins the slot ([Pre14] §4.4: π⁰'s
clitic beats #⁰'s exponent beats nothing).
Equations
- Minimalist.Probe.cascade ps goals = List.findSome? (fun (x : Minimalist.Probe α) => x.search goals) ps
Instances For
The cascade's goal is a member of the sequence.