Documentation

InfinitaryLogic.Methods.ConstantSupport

The constant-support calculus for a constant expansion L[[J]] (issue #8 kernel step 2) #

The neutral home of the syntactic constant-support machinery, moved and generalized from Methods/MarkerStage.lean (its Layers 2/5 discovered the finite-support problem: an L_{ω₁ω} formula can mention infinitely many constants — ⋁ₙ (dₙ = dₙ) has support all of — so freshness arguments must CARRY a finite support rather than compute one). Craig interpolation (#8) consumes the same calculus for its InsepAt-parameterized separators.

Structural lemmas for functionsIn (relabel / castLE / subst / openBounds) #

The mentioned function symbols are stable under variable renamings and grow only by the substituted terms' symbols under substitution. Generic over the language.

theorem FirstOrder.Language.Term.functionsIn_relabel {L : Language} {α β : Type} (g : αβ) (t : L.Term α) :
theorem FirstOrder.Language.Term.functionsIn_subst {L : Language} {α β : Type} (tf : αL.Term β) (t : L.Term α) :
(t.subst tf).functionsInt.functionsIn ⋃ (a : α), (tf a).functionsIn
theorem FirstOrder.Language.BoundedFormulaω.functionsIn_relabel {L : Language} {α β : Type} {n : } (g : αβ Fin n) {k : } (φ : L.BoundedFormulaω α k) :
theorem FirstOrder.Language.BoundedFormulaω.relationsIn_relabel {L : Language} {α β : Type} {n : } (g : αβ Fin n) {k : } (φ : L.BoundedFormulaω α k) :
theorem FirstOrder.Language.BoundedFormulaω.functionsIn_subst {L : Language} {α β : Type} (tf : αL.Term β) {k : } (φ : L.BoundedFormulaω α k) :
(φ.subst tf).functionsInφ.functionsIn ⋃ (a : α), (tf a).functionsIn

A term mentions only finitely many function symbols (it is a finite tree).

theorem FirstOrder.Language.Term.functionsIn_subset_subst {L : Language} {α β : Type} (tf : αL.Term β) (t : L.Term α) :

Substitution only adds symbols: φ's own symbols survive (only variables are replaced).

theorem FirstOrder.Language.BoundedFormulaω.functionsIn_subset_subst {L : Language} {α β : Type} (tf : αL.Term β) {k : } (φ : L.BoundedFormulaω α k) :

Negation does not change the mentioned function symbols (not is imp · ⊥).

Existential quantification (¬∀¬) does not change the mentioned function symbols.

Negation does not change the mentioned relation symbols.

Existential quantification does not change the mentioned relation symbols.

A finite existential block does not change the mentioned function symbols.

A finite existential block does not change the mentioned relation symbols.

A finite universal block does not change the mentioned function symbols.

A finite universal block does not change the mentioned relation symbols.

The true formula mentions no function symbols.

The true formula mentions no relation symbols.

Binary conjunction collects both sides' function symbols.

Binary conjunction collects both sides' relation symbols.

theorem FirstOrder.Language.BoundedFormulaω.functionsIn_einf {L : Language} {α : Type} {ι : Type u_1} [Encodable ι] {n : } (φs : ιL.BoundedFormulaω α n) :
(einf φs).functionsIn = ⋃ (i : ι), (φs i).functionsIn

An Encodable-indexed conjunction collects the branches' function symbols (the padding of undecodable indices contributes nothing).

theorem FirstOrder.Language.BoundedFormulaω.relationsIn_einf {L : Language} {α : Type} {ι : Type u_1} [Encodable ι] {n : } (φs : ιL.BoundedFormulaω α n) :
(einf φs).relationsIn = ⋃ (i : ι), (φs i).relationsIn

An Encodable-indexed conjunction collects the branches' relation symbols.

In a relational language no formula mentions a function symbol.

theorem FirstOrder.Language.Term.realize_congr_functionsIn {L : Language} {M : Type} (S S' : L.Structure M) {γ : Type} (t : L.Term γ) :
(∀ pt.functionsIn, ∀ (x : Fin p.fstM), Structure.funMap p.snd x = Structure.funMap p.snd x)∀ (v : γM), realize v t = realize v t

Occurrence-aware term-realization congruence: two structure instances agreeing on the function symbols occurring in t realize t identically.

theorem FirstOrder.Language.BoundedFormulaω.realize_congr_symbolsIn {L : Language} {α M : Type} (S S' : L.Structure M) {n : } (φ : L.BoundedFormulaω α n) :
(∀ pφ.functionsIn, ∀ (x : Fin p.fstM), Structure.funMap p.snd x = Structure.funMap p.snd x)(∀ pφ.relationsIn, ∀ (x : Fin p.fstM), Structure.RelMap p.snd x Structure.RelMap p.snd x)∀ (v : αM) (xs : Fin nM), φ.Realize v xs φ.Realize v xs

Occurrence-aware realization congruence: two structure instances agreeing on the symbols occurring in φ realize φ identically. The tool that localizes semantic transport to a formula's own vocabulary.

Constant support of a constant-expansion formula #

The syntactic constant support of an L'[[J]]-formula: the added constants (arity-0 Sum.inr function symbols) among its mentioned symbols. Only countable in general (functionsIn_countable — countably-branching connectives); freshness arguments demand containment in a finite set rather than computing one. Generic in the base language, so it also serves iterated expansion layers (L := L'[[J]], constants ).

Equations
Instances For

    Negation does not change the constant support (not is imp · falsum).

    A conjunction component's constant support is contained in the conjunction's.

    A disjunction component's constant support is contained in the disjunction's.

    An implication's antecedent support is contained in the implication's.

    An implication's consequent support is contained in the implication's.

    def FirstOrder.Language.Term.jConsts {L' : Language} {J β : Type} (t : (L'.withConstants J).Term β) :
    Set J

    The constant support of an expansion term.

    Equations
    Instances For

      The j-th constant of the expansion, as a closed term.

      Equations
      Instances For

        openBounds does not change the constant support.

        Existential quantification does not change the constant support.

        Instantiation support bound: substituting the constant j into a one-variable formula adds at most j to the constant support.

        The base function symbols of an expansion formula (the Sum.inl layer).

        Equations
        Instances For

          The base relation symbols of an expansion formula (the constant layer adds none).

          Equations
          Instances For

            Stripping constant-free formulas to the base language #

            A constant-free L'[[J]]-formula is (the mapLanguage-image of) a base formula. This is the A = ∅ root gate of the interpolation argument: a separator with empty allowed support strips to an interpolant of the base language.

            def FirstOrder.Language.Term.stripConsts {L' : Language} {J β : Type} (t : (L'.withConstants J).Term β) :
            t.jConstsL'.Term β

            Strip a constant-free expansion term to the base language.

            Equations
            Instances For
              theorem FirstOrder.Language.Term.onTerm_stripConsts {L' : Language} {J β : Type} (t : (L'.withConstants J).Term β) (h : t.jConsts) :

              The withConstants inclusion is a left inverse of term stripping.

              Occurrence transport for term stripping: the stripped term's symbols are the base symbols of the original.

              Quantifier class is invariant under stripping constants. stripConsts rewrites only terms and the relation tag; it touches no quantifier node, so the signed universal class is exact.

              The withConstants inclusion is a left inverse of formula stripping.

              Occurrence transport for formula stripping (function symbols).

              Occurrence transport for formula stripping (relation symbols).