Staged set-closure (generic core for the Skolem-closed family Γ*) #
The bespoke EM truth lemma inducts over a countable formula family Γ* that is closed under
subformulas, countable-connective components, existential Skolem-witness instances, and the
template renamings. This file provides the language-agnostic staged-closure machinery — closing
a seed set Γ₀ under a pointwise expansion stepOne : α → Set α via explicit stages (no
impredicative least-closure) — together with countability and the consumer-facing closure lemma.
The concrete formula stepOne (subformulas / components / Skolem witnesses / renamings) inside
skolemColim L is layered on top in a later chunk; Γ* will be setClosure of that step applied
to the lifted EM starting family.
Stages of closing Γ₀ under the pointwise expansion stepOne: stage 0 is the seed, each
successor adds stepOne x for every x already present. Increasing by construction.
Equations
- FirstOrder.Language.iterClosure stepOne Γ₀ 0 = Γ₀
- FirstOrder.Language.iterClosure stepOne Γ₀ k.succ = FirstOrder.Language.iterClosure stepOne Γ₀ k ∪ ⋃ x ∈ FirstOrder.Language.iterClosure stepOne Γ₀ k, stepOne x
Instances For
The staged closure of Γ₀ under stepOne: the union over all finite stages.
Equations
- FirstOrder.Language.setClosure stepOne Γ₀ = ⋃ (k : ℕ), FirstOrder.Language.iterClosure stepOne Γ₀ k
Instances For
The seed is contained in the closure (it is stage 0).
Closure property (consumer-facing): the expansion of any member stays in the closure. If
x ∈ Γ* then stepOne x ⊆ Γ*.
Each stage is countable, given a countable seed and a pointwise-countable step.
The closure is countable, given a countable seed and a pointwise-countable step.
Subformula / connective-component step (any language) #
Immediate subformulas and countable-connective components of a formula, over any language:
imp gives both parts, all gives the body (one higher arity), iSup/iInf give all
countably-many components, and the atomic forms give none.
Equations
- FirstOrder.Language.bfSubformulas ⟨fst, φ.imp ψ⟩ = {⟨fst, φ⟩, ⟨fst, ψ⟩}
- FirstOrder.Language.bfSubformulas ⟨fst, φ.all⟩ = {⟨fst + 1, φ⟩}
- FirstOrder.Language.bfSubformulas ⟨fst, FirstOrder.Language.BoundedFormulaω.iSup φs⟩ = Set.range fun (k : ℕ) => ⟨fst, φs k⟩
- FirstOrder.Language.bfSubformulas ⟨fst, FirstOrder.Language.BoundedFormulaω.iInf φs⟩ = Set.range fun (k : ℕ) => ⟨fst, φs k⟩
- FirstOrder.Language.bfSubformulas x✝ = ∅
Instances For
bfSubformulas is pointwise countable.
Staged formulas and the colimit projection #
A colimit-language formula packaged with its arity.
Equations
- L.ColimFormula = ((n : ℕ) × L.skolemColim.BoundedFormulaω Empty n)
Instances For
A formula tagged with the finite language stage at which it lives. The closure works at
this staged level — so the existential-witness Skolem term is directly available at the next stage
— and projects to a colimit formula only via toColimFormula. This avoids ever inverting the
colimit quotient.
Equations
- L.SkFormula = ((k : ℕ) × (n : ℕ) × (L.skolemStage k).BoundedFormulaω Empty n)
Instances For
Project a staged formula to a colimit-language formula, transporting along the stage inclusion
skolemStageInclusion L k. Γ* in the colimit language is the image of the staged closure under
this map.
Equations
- L.toColimFormula ⟨k, ⟨n, φ⟩⟩ = ⟨n, FirstOrder.Language.BoundedFormulaω.mapLanguage (L.skolemStageInclusion k) φ⟩
Instances For
The subformula/component step at the staged level: take bfSubformulas of the stage-k
formula, keeping the stage k fixed.
Equations
- L.skSubStep ⟨k, χ⟩ = (fun (p : (n : ℕ) × (L.skolemStage k).BoundedFormulaω Empty n) => ⟨k, p⟩) '' FirstOrder.Language.bfSubformulas χ
Instances For
Existential Skolem-witness step (stage k → k+1) #
The Skolem-witness body of ∃x ψ (with ψ the (n+1)-ary matrix at stage k): substitute
the stage-(k+1) Skolem term skolemTerm ψ (of the remaining n variables) for the witnessed
variable. Built with the template substitution pattern openBounds → subst → relabel, placing the
Skolem term in the last slot. Lives at stage k+1 and arity n.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Skolem-witness step: Skolemize the (primitive) universal quantifier. For ∀x φ at
stage k, add the witness body of its negation ∃x ¬φ, namely (¬φ)[skolemTerm (¬φ)], at stage
k+1. Since ∃xψ = ¬∀x¬ψ, this covers existentials too. Other forms add nothing.
Equations
Instances For
The Skolem-witness step is pointwise countable (a singleton on ∀, empty otherwise).
The Skolem-closed staged family Γ* #
The full staged closure step: subformulas/components together with Skolem witnesses. (Template renamings are added where the truth lemma needs them, in a later chunk.)
Equations
- L.skStep χ = L.skSubStep χ ∪ L.skWitnessStep χ
Instances For
The Skolem witness of a Γ* member stays in Γ*.
Colimit image and enumeration #
The colimit-language image of Γ* is countable.
An enumeration of Γ*'s colimit image as a sequence ℕ → ColimFormula L, suitable as the
formula family fed to morleyHanfExtractionTail_holds (whose extraction yields tail-indiscernibility
on Set.range). Exists since the image is countable and nonempty.