Control Diagnostics and Profiles #
The observable diagnostic battery of control — the antecedence and reading
tests every framework's account is answerable to. A Profile ι records which
of an analysis's licensing clauses hold of a construction, over an arbitrary
clause index ι; an Excludes ι instance says which clause's failure admits
each diagnostic, and Profile.admits computes the admitted diagnostics as a
preimage: admits is antitone, obligatory control is the empty fiber,
non-obligatory control the full one, and the battery encodes the profile
faithfully (Profile.admits_injective). Which configurations admit which
diagnostics varies by theory — [Lan13] (75)–(79) derives the five from
the two clauses of its OC signature (Studies/Landau2013.lean).
Main definitions #
Control.Diagnostic: the observable batteryControl.Profile: clause profiles over an index, withProfile.admitsControl.Excludes: the clause each diagnostic is excluded by
The observable control diagnostics: the antecedence and reading tests any account of a control construction is answerable to.
- arbitraryControl : Diagnostic
Arbitrary control: a free reading of the controlled element
- longDistanceControl : Diagnostic
Long-distance control: a non-local antecedent
- nonCCommandingControl : Diagnostic
A non-c-commanding antecedent
- strictEllipsis : Diagnostic
A strict reading under VP-ellipsis
- strictUnderOnly : Diagnostic
A strict (non-bound-variable) reading under only
Instances For
Equations
- Control.instDecidableEqDiagnostic 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
- Control.instReprDiagnostic = { reprPrec := Control.instReprDiagnostic.repr }
Equations
- Control.instFintypeDiagnostic = { elems := { val := ↑Control.Diagnostic.enumList, nodup := Control.Diagnostic.enumList_nodup }, complete := Control.instFintypeDiagnostic._proof_1 }
An index of licensing clauses, together with the clause whose failure admits each diagnostic. Surjectivity says every clause is witnessed by some diagnostic — what makes the battery a faithful encoding of the profile.
- excludedBy : Diagnostic → ι
The clause whose failure admits each diagnostic.
- surjective : Function.Surjective excludedBy
Every clause is witnessed by some diagnostic.
Instances
A profile over an index of licensing clauses: which clauses hold of a construction.
Equations
- Control.Profile ι = (ι → Bool)
Instances For
Obligatory control: every licensing clause holds.
Equations
- p.IsObligatory = ∀ (c : ι), p c = true
Instances For
Non-obligatory control: no licensing clause holds.
Equations
- p.IsNonObligatory = ∀ (c : ι), ¬p c = true
Instances For
The diagnostics a profile admits: those whose excluding clause fails.
Equations
- p.admits = Control.excludedBy ⁻¹' {c : ι | ¬p c = true}
Instances For
The more clauses hold, the fewer diagnostics are admitted.
A profile is obligatory control iff it admits nothing.
A profile is non-obligatory control iff it admits everything.
The battery encodes the profile faithfully: distinct profiles admit distinct diagnostic sets.