Fair enumeration for a fragment-relative consistency property (issue #8 tranche 2, commit 3) #
Generic over a universe U and a ConsistencyPropertyEqOn U: a finite consistent S₀ ⊆ U
extends to a Henkin-complete S* ⊇ S₀. The schedule is a prefix sweep — stage (n+1)
processes requests 0,…,n starting from stage n — so, given a surjection e : ℕ → Request U,
each request e k is processed during every sweep after k (fairness with no arithmetic about
Nat.pair), while each sweep adds only finitely many sentences.
Branching / witness rules make a classical choice at the moment the request fires; the
triggering sentence stays present, so re-processing is harmless. The union S* is never claimed
to be in C.sets (Finding 1) — only that each closure target cohabits a later stage.
The remaining piece (the HenkinComplete Sstar acceptance theorem) is the per-field limit proof;
it consumes request_fires_after plus per-request "what process adds" facts.
A scheduling request. Decomposition rules dispatch on the trigger's outermost shape; idx
supplies the per-index parameter (component / instance / which negated-implication conclusion)
and is ignored by the classical-choice rules.
- decompose {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (t : ↑U) (idx : ℕ) : Request U
- impC1 {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (t : ↑U) : Request U
- eqRefl {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (c : ℕ) : Request U
- eqSymm {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (a b : ℕ) : Request U
- eqTrans {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (a b d : ℕ) : Request U
- relCongr {L : Language} {U : Set (L.withConstants ℕ).Sentenceω} (l : ℕ) (R : L.Relations l) (g : Fin l → ℕ) (i : Fin l) (b : ℕ) : Request U
Instances For
One processing step #
A member of the consistency family, bundled with its membership proof.
Instances For
Process a decomposition request: if the trigger t is present, add the target dictated by
its outermost shape (the per-index rules use idx; the branching/witness rules choose
classically).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Process a C1 request: inspects only the outer imp constructor (so it reduces on
φ.imp ψ regardless of whether φ/ψ later specialize to the negation encoding — the field
that a shape-dispatching decompose leaves stuck).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Process one request.
Equations
- One or more equations did not get rendered due to their size.
- FirstOrder.Language.process S (FirstOrder.Language.Request.decompose t idx) = FirstOrder.Language.processDecompose S t idx
- FirstOrder.Language.process S (FirstOrder.Language.Request.impC1 t) = FirstOrder.Language.processImpC1 S t
- FirstOrder.Language.process S (FirstOrder.Language.Request.eqRefl c) = ⟨↑S ∪ {FirstOrder.Language.constEq c c}, ⋯⟩
- FirstOrder.Language.process S (FirstOrder.Language.Request.eqSymm a b) = if h : FirstOrder.Language.constEq a b ∈ ↑S then ⟨↑S ∪ {FirstOrder.Language.constEq b a}, ⋯⟩ else S
Instances For
The prefix-sweep schedule #
One sweep: process requests e 0, …, e n in order.
Equations
- FirstOrder.Language.sweep e S 0 = FirstOrder.Language.process S (e 0)
- FirstOrder.Language.sweep e S n.succ = FirstOrder.Language.process (FirstOrder.Language.sweep e S n) (e (n + 1))
Instances For
stage (n+1) processes requests 0,…,n starting from stage n.
Equations
- FirstOrder.Language.stage e S₀ 0 = S₀
- FirstOrder.Language.stage e S₀ n.succ = FirstOrder.Language.sweep e (FirstOrder.Language.stage e S₀ n) n
Instances For
The limit of the enumeration.
Equations
- FirstOrder.Language.Sstar e S₀ = ⋃ (n : ℕ), ↑(FirstOrder.Language.stage e S₀ n)
Instances For
The firing API #
What each firing adds (process specs) #
The limit is Henkin-complete #
Fair enumeration (the acceptance theorem): a consistent set in a ConsistencyPropertyEqOn U (over a countable U and countable relation symbols) extends to a Henkin-complete S* ⊇ S₀
inside U.