Constant elimination and the syntactic consistency transport #
The syntactic half of the constants question for the source-fragment adapter (issue #19).
Constant elimination #
elimConstsTerm t₀ and elimConsts t₀ replace every constant c_k of L[[ℕ]] by one fixed
closed base term t₀, structurally; variables and binders are untouched. Elimination retracts
mapLanguage (elimConsts_mapLanguage) and commutes with relabel, castLE, openBounds and
subst, so the closing operations of Methods/ConstantInstances.lean are respected:
elimConsts_closeBy sends a constant-closed member of a fragment to the corresponding
term-closed member.
The derivation homomorphism #
Derivable.map_elimConsts: a derivation over the expansion maps to a derivation over the base,
with every rule mapping to itself. The ω-rule obtains its base instances from the premises at the
onTerm images of the base closed terms, and imp_intro is unaffected because no quantifier
prefix is introduced — the substitution translation, not the universal-prefix translation.
AConsistent.of_elimConsts is the contrapositive; Derivable.mono_perm and AConsistent.anti_perm
record that permission sets enter only as side conditions.
The transport #
Fragment.closedInstances F is the base-side counterpart of Fragment.withNatConstantsSentences:
every member, at every arity, closed by base terms. It contains the sentence slice, and
aconsistent_withConstants_of_closedInstances transports consistency over it into consistency in
the constants expansion, for any closed base term t₀.
What this module does not do #
It has no semantic composition with the relational kernel. Language.IsRelational empties every
function arity including zero, so a relational language has no closed term
(isEmpty_term_empty_of_isRelational), and the relational adapters of HenkinClosed.lean and
SourceFragment.lean require [L.IsRelational]. A theorem assuming both would hold by explosion.
The arbitrary-language semantic endpoint is pending the relationalization transport; the guard
scripts/check_constant_transport_boundary.lean rejects any declaration in these modules whose
type mentions both a relational-language instance and a closed base term.
The image of a symbol application: a base symbol keeps its (translated) arguments, a
constant becomes t₀.
Equations
- FirstOrder.Language.elimConstsFunc t₀ (Sum.inl g) args = FirstOrder.Language.func g args
- FirstOrder.Language.elimConstsFunc t₀ (Sum.inr val) args = FirstOrder.Language.Term.relabel Empty.elim t₀
Instances For
Replace every constant by t₀.
Equations
- FirstOrder.Language.elimConstsTerm t₀ (FirstOrder.Language.var x_1) = FirstOrder.Language.var x_1
- FirstOrder.Language.elimConstsTerm t₀ (FirstOrder.Language.func f ts) = FirstOrder.Language.elimConstsFunc t₀ f fun (i : Fin l) => FirstOrder.Language.elimConstsTerm t₀ (ts i)
Instances For
Formulas #
Replace every constant by t₀ throughout a bounded formula: structural, variables and
binders untouched.
Equations
- One or more equations did not get rendered due to their size.
- FirstOrder.Language.elimConsts t₀ FirstOrder.Language.BoundedFormulaInf.falsum = FirstOrder.Language.BoundedFormulaω.falsum
- FirstOrder.Language.elimConsts t₀ (FirstOrder.Language.BoundedFormulaInf.rel (Sum.inr r) ts) = isEmptyElim r
- FirstOrder.Language.elimConsts t₀ (FirstOrder.Language.BoundedFormulaInf.imp φ ψ) = (FirstOrder.Language.elimConsts t₀ φ).imp (FirstOrder.Language.elimConsts t₀ ψ)
- FirstOrder.Language.elimConsts t₀ (FirstOrder.Language.BoundedFormulaInf.all φ) = (FirstOrder.Language.elimConsts t₀ φ).all
- FirstOrder.Language.elimConsts t₀ (FirstOrder.Language.BoundedFormulaInf.iSup φs) = FirstOrder.Language.BoundedFormulaω.iSup fun (i : ℕ) => FirstOrder.Language.elimConsts t₀ (φs i)
- FirstOrder.Language.elimConsts t₀ (FirstOrder.Language.BoundedFormulaInf.iInf φs) = FirstOrder.Language.BoundedFormulaω.iInf fun (i : ℕ) => FirstOrder.Language.elimConsts t₀ (φs i)
Instances For
Base formulas mapped into the expansion come back unchanged.
Commutation with openBounds and subst #
The bound-variable-aware substitution map of BoundedFormulaω.subst commutes with
constant elimination, pointwise.
The derivation homomorphism #
The image of a sentence set.
Equations
Instances For
Derivations transport along constant elimination. Every rule maps to itself; the ω-rule needs instances at every closed base term, obtained from the premise at that term's image in the expansion.
Consistency transports back: consistency of the images gives consistency in the expansion.
The base-side closed-instance universe and the transport theorem #
Close a bounded formula by closed base terms: the base analogue of closeBy.
Equations
Instances For
The closed-instance universe of a fragment: every member, at every arity, closed by base terms.
Equations
Instances For
Eliminating the constants from a constant-closed member gives a term-closed member.
The transport: consistency over the closed-instance universe gives consistency in the
constants expansion, for any closed base term t₀.
The boundary with the relational kernel #
Language.IsRelational empties every function arity, including arity zero, so a relational
language has no closed term. The transport above therefore has no composition with the
relational kernel adapters of HenkinClosed.lean and SourceFragment.lean, which require
[L.IsRelational]: a theorem assuming both would be vacuous. The arbitrary-language semantic
endpoint is pending the relationalization transport, and
scripts/check_constant_transport_boundary.lean rejects any declaration whose type mentions
both.
A relational language has no closed term.