Constant generalization: the ∀-twin of genEx, and countable-conjunction bounds #
Neutral companion to ConstantElimination.lean. Where genEx j ρ existentially generalizes the
constant c_j out of a sentence, genAll j ρ generalizes it universally, with the matching
realization lemma, occurrence calculus, and the two entailment-acceptance sequents:
entails_genAll_of_entails(side 1):Γ ⊨ σ(c) ⟹ Γ ⊨ ∀x σ(x),cfresh forΓ. UnlikegenEx's side-1 sequent this genuinely needs freshness —∀-introduction is not weakening;entails_not_genAll_of_entails_not(side 2):Δ, δ(c) ⊨ ¬σ(c) ⟹ Δ, ∃x δ(x) ⊨ ¬∀x σ(x),cfresh forΔ.
genAll is class-preserving for the quantifier hierarchy of Lomega1omega/QuantifierClass.lean
(isUniversal_genAll), because all is admissible at the universal sign and neither constant
abstraction nor relabel moves the class; genEx, dually, is never universal
(not_isUniversal_genEx). That pair of facts is what makes an asymmetric separator class possible
at all, so both live here rather than inside any one consumer.
The second half collects the class and occurrence bounds for Theoryω.conjunction, the
countable conjunction of a theory: existentiality and the three symbol/support bounds descend from
the members.
Nothing here is specific to Malitz interpolation (issue #15) or to end extensions (issue #16); both consume it.
Universally generalize the constant c_j out of a sentence: abstract c_j into the free
variable 0, then universally quantify it. The ∀-twin of genEx.
Equations
Instances For
Realizing the universal generalization is realizing the original at every reinterpretation of
c_j.
c_j is not in the constant support of its own universal generalization.
Constant abstraction does not move the quantifier class.
genAll is class-preserving: universally generalizing a fresh constant out of a universal
sentence leaves it universal. This is the whole point of the right-hand C7 trigger.
The exact signed-occurrence equation for genAll. Universal generalization adds one
positive occurrence and moves nothing else: at sign true the right disjunct is absorbed, and at
sign false the occurrences are exactly those of ρ.
This is what lets a labelled budget absorb a generalization whose universal parent already sits on the same side.
The exact signed-occurrence equation for genEx, the dual of hasQuantSigned_genAll:
existential generalization adds one negative occurrence and moves nothing else.
genEx is not class-preserving, recorded separately: genEx j ρ is never universal, since
it is a negatively-occurring all. This is a fact about the construction, and is not by itself a
failure of the left closure (see malitzInsepAt_witness_of_existentialDelta).
Acceptance, Γ side: Γ ⊨ σ(c) upgrades to Γ ⊨ ∀x σ(x) when c_j is fresh for Γ.
Unlike genEx's Γ-side sequent this genuinely needs freshness — ∀-introduction is not
weakening.
Acceptance, Δ side: Δ, δ(c) ⊨ ¬σ(c) upgrades to Δ, ∃x δ(x) ⊨ ¬∀x σ(x) when c_j is
fresh for Δ. The witness for ∃x δ(x) is exactly the reinterpretation that refutes ∀x σ(x).
Negative acceptance without freshness. If Δ already refutes σ(c), it refutes
∀x σ(x) outright: the universal is instantiated at c's own interpretation, so nothing has to
be fresh for Δ and no witness is consumed.
This is the shape a labelled pair needs when the separator is abstracted on the side that does not
own c; entails_not_genAll_of_entails_not is the different, witness-passing sequent.
Bounds for the countable conjunction of a theory #
A countable conjunction of existential sentences is existential.