Diagnostic tests #
A diagnostic is an abductive test for a latent classification C from an
observed outcome Ω: each outcome is consistent with a set of latent values —
the values that could have produced it. From that single datum everything else
follows:
- the test is conclusive at an outcome when the consistent set is a
Set.Subsingleton(it pins the latent value to at most one); - it is sound against a ground-truth outcome model
truth : C → Ωwhen the true value is always among the consistent ones (the test never rules out the truth); - it decides
Cwhen, on every true value, the outcome's consistent set is exactly that value — sound and conclusive everywhere it matters; - one test refines another when its consistent sets are pointwise smaller (it rules out at least as much), a preorder under which conclusiveness is monotone.
ofCauses builds a diagnostic from named causes (each entailing a latent value)
— the faithful Hankamer–Sag picture, where a test outcome is explained by a set of
causes and the consistent latent values are what those causes entail.
The structure is domain-general (any Ω, C); the anaphora specialisation
(Anaphor.DepthCause, the ground-truth Depth.testOutcome) instantiates it for
Hankamer & Sag depth, and the per-test instances (EIR, extraction) live in the
paper that draws the comparison.
An abductive diagnostic: each observed outcome o : Ω is consistent with the
set consistent o of latent values in C that could have produced it.
- consistent : Ω → Set C
The latent values consistent with an outcome (the verdict it licenses).
Instances For
t is conclusive at o when the outcome pins the latent value to at most one
possibility.
Equations
- t.IsConclusiveAt o = (t.consistent o).Subsingleton
Instances For
t is conclusive when every outcome is.
Equations
- t.Conclusive = ∀ (o : Ω), t.IsConclusiveAt o
Instances For
t is sound for a ground-truth outcome model truth : C → Ω when the true
latent value is always among the explanations of the outcome it yields — the
test never rules out the truth.
Equations
- t.SoundFor truth = ∀ (c : C), c ∈ t.consistent (truth c)
Instances For
t decides C against truth when, on every true value, the outcome's
consistent set is exactly that value: a sound, conclusive verdict everywhere
it is exercised.
Equations
- t.Decides truth = ∀ (c : C), t.consistent (truth c) = {c}
Instances For
t refines s when every outcome's consistent set under t is contained in
s's — t rules out at least as much. This is the pointwise-⊆ informativeness
order on tests; a finer (more informative) test is ≤.
Equations
- t.Refines s = ∀ (o : Ω), t.consistent o ⊆ s.consistent o
Instances For
Tests are preordered by refinement: t ≤ s iff t.Refines s (t is finer,
ruling out at least as much).
Equations
- Diagnostic.instPreorder = { le := Diagnostic.Refines, le_refl := ⋯, le_trans := ⋯, lt_iff_le_not_ge := ⋯ }
Refinement is monotone in conclusiveness: a refinement of a conclusive test is conclusive (a subset of a subsingleton is a subsingleton).
Deciding is exactly soundness plus conclusiveness on the truth outcomes.
A deciding test is sound.
Building a diagnostic from causes #
Build a diagnostic from named causes: each outcome is explained by a set of
causes, and the consistent latent values are exactly what those causes entail
(Set.image). The verdict is inconclusive at an outcome precisely when its
causes entail more than one latent value — so ambiguity is derived from the
cause structure, not stipulated.
Equations
- Diagnostic.ofCauses causes entails = { consistent := fun (o : Ω) => entails '' causes o }
Instances For
Anaphoric-depth specialisation #
The latent classification for an anaphora diagnostic is Anaphor.Depth; the
causes are the Hankamer–Sag / Landau reasons a depth test can pass or fail.
The causes of a depth-test outcome ([HS76], [Lan26], the
(42c)/(42d) "two reasons for the star" analysis): a site passes because it
hostsVariable (has surface structure for the resumptive or trace); it fails
because it is a deepAnaphor (no structure → (42d)), or — for movement-based
tests only — because a surface site's dependency is derivationalBleeding
(bled by ellipsis timing → (42c)) or islandBlocking (an inherent barrier;
resumption is "indifferent to island constraints"). Only deepAnaphor entails
deep; the surface-site confounds (derivationalBleeding/islandBlocking)
entail surface. The asymmetry between EIR (failure = deepAnaphor only) and
extraction (all three) is exactly which confounds each test admits.
- hostsVariable : DepthCause
- deepAnaphor : DepthCause
- derivationalBleeding : DepthCause
- islandBlocking : DepthCause
Instances For
Equations
- Anaphor.instDecidableEqDepthCause x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Anaphor.instReprDepthCause = { reprPrec := Anaphor.instReprDepthCause.repr }
The depth each cause entails.
Equations
Instances For
The ground-truth test outcome on a site of known depth: a surface anaphor
passes (it has internal structure to host the variable/trace), a deep one
fails. This is the truth model every depth diagnostic is judged against.
Equations
- Anaphor.Depth.surface.testOutcome = true
- Anaphor.Depth.deep.testOutcome = false