Documentation

InfinitaryLogic.Methods.MarkerStage

The Marker stage: finite-fragment support extraction and Erdős–Rado certification #

First layer of the template/consistency-property reshape of the Morley–Hanf chain (the replacement for the ZFC-refutable in-M extraction ladder — see the audit fences on PureColoringHypothesis/MorleyHanfExtraction in Conditional/MorleyHanfTransfer.lean). Following Marker, Lectures on Infinitary Model Theory §5.2, the consistency-property route certifies each finite fragment of an L'[[J]] template/constant theory by a large homogeneous set in the source model, with the indiscernible sequence materializing only in the model built by Model Existence.

This file provides the syntactic/combinatorial bridge between "finite fragment of a constant theory" and "finite-arity Erdős–Rado approximation":

The per-α conclusion (available for every α < ω₁ at once) is the Marker schedule.

Layer 2: the certification predicates and their closure calculus #

Toward the Marker consistency property, this file also provides the candidate member predicate and its easy closure lemmas:

C7/Henkin witness design (SETTLED: Henkin constant expansion — see Layer 3): over a relational L', the closed L'[[J]]-terms are exactly the J-constants, so quantifier witnesses must be fresh constants; a fresh J-constant would have to occupy a specific order-position that an arbitrary linear J need not offer, so witnesses live in a separate layer (L'[[J]])[[ℕ]] instead (henkinConst, henkinConstsIn, expJConstsIn), with the reduct lemma (Theoryω.model_reduct_of_expansion) returning the final model to L'[[J]]. The finite-member predicates over the expansion (MarkerHenkinCert, MarkerHenkinConsistent, Layer 5) avoid the arbitrary-set extension field and the global C4 uniformization entirely — the Henkin construction consumes finite members along its enumeration, per the classical Marker/Keisler shape. The realizeWith API (Layer 4) confines all structure instances to two definition bodies; every closure rule is stated through it. The choice-free closure rules (C0/C1'/C2/C3/C4') are proved in Layer 5; remaining: the re-homogenization rules (C1, C3', C4 — per-member branch/index choice by coloring support tuples inside the certificate), C7 via a fresh witness index (enabled by the finite-Henkin-support invariant — see the Layer 5 audit note), then the Henkin construction/model-existence adapter decision.

Every finite ordinal step stays below ω₁: if α < ω₁ then α + n < ω₁ for every natural n — the room the Marker α-schedule uses to absorb per-fragment ladder costs.

theorem FirstOrder.Language.exists_markerSupport_factor {J : Type u} [LinearOrder J] {m : } {ar : Fin m} (tup : (p : Fin m) → Fin (ar p) ↪o J) :
∃ (k : ) (enum : Fin k ↪o J) (r : (p : Fin m) → Fin (ar p) ↪o Fin k), (∀ (p : Fin m), RelEmbedding.trans (r p) enum = tup p) Set.range enum = ⋃ (p : Fin m), Set.range (tup p)

Support factorization for a finite constant-fragment. Given a finite family of J-constant tuples tup p : Fin (ar p) ↪o J (the index data of a finite fragment of an L'[[J]] constant theory), collect the finite support, enumerate it in increasing order as enum : Fin k ↪o J, and factor every tuple through the enumeration. The range equation identifies enum with the exact constant support of the fragment.

theorem FirstOrder.Language.markerStage_homogeneous {L' : Language} (M : Type) [L'.Structure M] [LinearOrder M] [WellFoundedLT M] (hM : Cardinal.mk M Cardinal.beth (Ordinal.omega 1)) (α : Ordinal.{0}) ( : α < Ordinal.omega 1) {J : Type} [LinearOrder J] {m : } {ar : Fin m} (fml : (p : Fin m) → L'.BoundedFormulaω Empty (ar p)) (tup : (p : Fin m) → Fin (ar p) ↪o J) :
∃ (k : ) (enum : Fin k ↪o J) (r : (p : Fin m) → Fin (ar p) ↪o Fin k), (∀ (p : Fin m), RelEmbedding.trans (r p) enum = tup p) Set.range enum = ⋃ (p : Fin m), Set.range (tup p) ∃ (e : (Order.succ (Cardinal.beth α)).ord.ToType ↪o M), ∀ (u u' : Fin k ↪o M), (∀ (i : Fin k), u i Set.range e)(∀ (i : Fin k), u' i Set.range e)∀ (p : Fin m), (fml p).Realize Empty.elim (u (r p)) (fml p).Realize Empty.elim (u' (r p))

The Marker-stage Erdős–Rado certification. A finite fragment of an L'[[J]] constant theory, presented by its index data (fml p, tup p), pulls back along the support factorization to a single arity-k truth-vector coloring over the source model M; for every α < ω₁, finiteArityHomogeneousUpTo_beth_stage then yields a (ℶ_α)⁺-suborder of M on which the truth of every formula of the fragment (at its own positions r p inside the support) is independent of the choice of increasing k-tuple.

This is the per-fragment certification of the Marker consistency property: available at every α < ω₁ simultaneously (the cofinal schedule), from the single hypothesis |M| ≥ ℶ_{ω₁} — per-α, per-finite-fragment approximations, never one ω₁-suborder homogeneous for all arities at once (that jump is ZFC-refutable; see the audit fences).

Layer 2: the certification predicates #

The per-level Marker certification of a finite fragment: a common finite constant support S, a (ℶ_α)⁺-suborder e of the (well-ordered) source M, and satisfaction of every member sentence under every constant interpretation that is strictly increasing on S with values in the range of e. This is Marker's "ℶ_α-large set realizing σ", stated semantically over interpretations so that the closure calculus needs no constructor inversion through the template pipeline.

Equations
  • One or more equations did not get rendered due to their size.
Instances For

    The candidate Marker member predicate: every finite subfragment is certified at cofinally many levels α < ω₁. Finite character makes weakening and chain closure direct; the uniformization questions (MarkerISupUniform below) are exactly where it is honest.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem FirstOrder.Language.MarkerFiniteCert.mono {L' : Language} {J : Type} [LinearOrder J] {M : Type} [L'.Structure M] [LinearOrder M] {α : Ordinal.{0}} {F F' : Set (L'.withConstants J).Sentenceω} (hFF : F'F) (h : MarkerFiniteCert M α F) :

      Certification is monotone (downward-closed) in the fragment.

      theorem FirstOrder.Language.MarkerCofinalConsistent.mono {L' : Language} {J : Type} [LinearOrder J] {M : Type} [L'.Structure M] [LinearOrder M] {Sset Sset' : Set (L'.withConstants J).Sentenceω} (hSS : Sset'Sset) (h : MarkerCofinalConsistent M Sset) :

      Cofinal consistency is monotone (downward-closed) in the sentence set.

      theorem FirstOrder.Language.MarkerCofinalConsistent.sUnion_chain {L' : Language} {J : Type} [LinearOrder J] {M : Type} [L'.Structure M] [LinearOrder M] {chain : Set (Set (L'.withConstants J).Sentenceω)} (hchain : Tchain, MarkerCofinalConsistent M T) (hC : IsChain (fun (x1 x2 : Set (L'.withConstants J).Sentenceω) => x1x2) chain) (hne : chain.Nonempty) :

      Chain closure: the union of a nonempty -chain of cofinally consistent sets is cofinally consistent — a finite subfragment of the union lies in one chain member.

      theorem FirstOrder.Language.exists_strictMonoOn_interp {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {α : Ordinal.{0}} (e : (Order.succ (Cardinal.beth α)).ord.ToType ↪o M) (S : Finset J) :
      ∃ (σ : JM), StrictMonoOn σ S jS, σ j Set.range e

      There is always an interpretation that is increasing on a given finite support into the range of a (ℶ_α)⁺-suborder — the suborder's domain is infinite, so it contains increasing tuples of every finite length. Supplies the "evaluation point" for the C0 lemmas.

      C0 (no falsum): a certified fragment cannot contain — an increasing interpretation exists and would have to realize it.

      C0 (no contradiction): a certified fragment cannot contain both a sentence and its negation.

      theorem FirstOrder.Language.MarkerCofinalConsistent.extend_of_semantic {L' : Language} {J : Type} [LinearOrder J] {M : Type} [L'.Structure M] [LinearOrder M] {Sset : Set (L'.withConstants J).Sentenceω} (h : MarkerCofinalConsistent M Sset) {trigger new : (L'.withConstants J).Sentenceω} (hmem : trigger Sset) (hsupp : sentenceJConsts newsentenceJConsts trigger) (hder : ∀ (σ : JM), trigger.Realize Mnew.Realize M) :

      The semantic extension scheme behind the choice-free closure conditions: if a trigger sentence of Sset semantically entails a new sentence pointwise (under every constant interpretation) and the constant support does not grow, then adjoining new preserves cofinal consistency — inside any finite subfragment, replace new by its trigger and reuse the certificate.

      C2 (double negation): ¬¬φ ∈ Sset allows adjoining φ.

      C3 (conjunction components): ⋀ᵢ φᵢ ∈ Sset allows adjoining every component.

      C4' (negated-disjunction components): ¬⋁ᵢ φᵢ ∈ Sset allows adjoining every negated component.

      The ω₁-pigeonhole engine and the stated uniformization test #

      theorem FirstOrder.Language.exists_uniform_of_cofinal_countable {K : Type} [Countable K] (P : Ordinal.{0}KProp) (h : β < Ordinal.omega 1, ∃ (α : Ordinal.{0}), β α α < Ordinal.omega 1 ∃ (k : K), P α k) :
      ∃ (k : K), β < Ordinal.omega 1, ∃ (α : Ordinal.{0}), β α α < Ordinal.omega 1 P α k

      The cofinal-schedule pigeonhole: ω₁ is regular, so if cofinally many levels below ω₁ each carry a witness from a countable index type, ONE index works cofinally. This is the engine behind every uniformization step of the Marker consistency property (binary choices such as C1, and — if it suffices — the disjunction choice C4).

      The hard uniformization test (deliberately a named statement, not a theorem): does a disjunction in a cofinally consistent set admit ONE disjunct whose adjunction stays cofinally consistent? Per finite subfragment F and level α, re-homogenizing the disjunct index (countably many colors, ≤ ℶ_α) and pigeonholing the cofinal schedule (exists_uniform_of_cofinal_countable) produce a per-F disjunct k(F); the open content is uniformizing over ALL finite F ⊆ Sset — a directed intersection of antitone nonempty subsets of , which is not automatic. If this holds, the Marker consistency property (ConsistencyPropertyEq's C4_iSup) is mostly assembly; if it fails, the honest route is a finite-member consistency notion with its own Henkin/model-existence adapter (see the module docstring, including the extension-field obstruction).

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Layer 3: the Henkin-witness substrate #

        C7 design decision (settled): Henkin constant expansion. Quantifier witnesses live in a separate withConstants layer (L'[[J]])[[ℕ]], NOT among the J-constants: an arbitrary linear J need not have an element in the order-gap a witness would require (and MorleySeedTailTemplateRealizable quantifies over every linear J); a relational L' provides no closed terms beyond constants, so witnesses cannot be generated internally; and a separate layer keeps the EM skeleton (J, order-positioned, universally quantified in certification) apart from proof-theoretic witnesses (, existentially interpreted per skeleton interpretation). The finite-member consistency predicate lives over the expansion; the endpoint returns to L'[[J]] by the reduct lemma.

        The n-th Henkin witness constant of a constant expansion L[[ℕ]], as a closed term.

        Equations
        Instances For
          @[reducible, inline]

          The Henkin-constant support of an expansion formula — the generalized sentenceJConsts at base L'[[J]] and constant type . Freshness of a witness index n for a fragment F is ∀ τ ∈ F, n ∉ henkinConstsIn τ.

          Equations
          Instances For

            The J-constant support of an expansion formula: the J-constants sit inside the base L''[[J]] layer, under Sum.inlSum.inr.

            Equations
            Instances For

              The forgetful/reduct lemma: realizing the mapLanguage-image of an L-theory in a constant-expansion structure yields, by reduct, a model of the original theory. The Henkin construction will model the expanded theory over (L'[[J]])[[ℕ]]; the Marker endpoint needs the L'[[J]] original.

              Image form of the reduct lemma: a model of the pushed-forward theory reducts to a model of the original.

              Layer 4: the realizeWith evaluation API and the constant-agreement congruence #

              All structure instances are confined to the two wrapper definitions; every lemma statement mentions only the wrappers, so no local-instance synthesis ever leaks into downstream theorem statements. All later Marker closure rules are to be stated through this API.

              def FirstOrder.Language.termValueWith {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {β : Type} (t : ((L''.withConstants J).withConstants ).Term β) (v : βM) :
              M

              Evaluation of an expansion term under a skeleton interpretation σ : J → M and a Henkin interpretation h : ℕ → M.

              Equations
              Instances For
                def FirstOrder.Language.realizeWith {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) (v : αM) (xs : Fin nM) :

                Realization of an expansion formula under a skeleton interpretation σ : J → M and a Henkin interpretation h : ℕ → M.

                Equations
                Instances For

                  Constructor unfolds (term level) #

                  @[simp]
                  theorem FirstOrder.Language.termValueWith_var {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {β : Type} (x : β) (v : βM) :
                  termValueWith σ h (var x) v = v x
                  @[simp]
                  theorem FirstOrder.Language.termValueWith_base {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {β : Type} {l : } (f : L''.Functions l) (ts : Fin l((L''.withConstants J).withConstants ).Term β) (v : βM) :
                  termValueWith σ h (func (Sum.inl (Sum.inl f)) ts) v = Structure.funMap f fun (i : Fin l) => termValueWith σ h (ts i) v
                  @[simp]
                  theorem FirstOrder.Language.termValueWith_skeleton {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {β : Type} (j : J) (ts : Fin 0((L''.withConstants J).withConstants ).Term β) (v : βM) :
                  termValueWith σ h (func (Sum.inl (Sum.inr j)) ts) v = σ j
                  @[simp]
                  theorem FirstOrder.Language.termValueWith_henkin {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {β : Type} (m : ) (ts : Fin 0((L''.withConstants J).withConstants ).Term β) (v : βM) :
                  termValueWith σ h (func (Sum.inr m) ts) v = h m
                  @[simp]
                  theorem FirstOrder.Language.termValueWith_henkinConst {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) (m : ) (v : EmptyM) :
                  termValueWith σ h (henkinConst m) v = h m

                  Constructor unfolds (formula level) #

                  The base relation symbol behind an expansion relation symbol (the constant layers add no relations).

                  Equations
                  Instances For
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_falsum {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (v : αM) (xs : Fin nM) :
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_equal {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (t₁ t₂ : ((L''.withConstants J).withConstants ).Term (α Fin n)) (v : αM) (xs : Fin nM) :
                    realizeWith σ h (BoundedFormulaω.equal t₁ t₂) v xs termValueWith σ h t₁ (Sum.elim v xs) = termValueWith σ h t₂ (Sum.elim v xs)
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_rel {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n l : } (R : ((L''.withConstants J).withConstants ).Relations l) (ts : Fin l((L''.withConstants J).withConstants ).Term (α Fin n)) (v : αM) (xs : Fin nM) :
                    realizeWith σ h (BoundedFormulaω.rel R ts) v xs Structure.RelMap (baseRel R) fun (i : Fin l) => termValueWith σ h (ts i) (Sum.elim v xs)
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_imp {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φ ψ : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) (v : αM) (xs : Fin nM) :
                    realizeWith σ h (φ.imp ψ) v xs realizeWith σ h φ v xsrealizeWith σ h ψ v xs
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_all {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω α (n + 1)) (v : αM) (xs : Fin nM) :
                    realizeWith σ h φ.all v xs ∀ (x : M), realizeWith σ h φ v (Fin.snoc xs x)
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_iSup {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φs : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) (v : αM) (xs : Fin nM) :
                    realizeWith σ h (BoundedFormulaω.iSup φs) v xs ∃ (i : ), realizeWith σ h (φs i) v xs
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_iInf {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φs : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) (v : αM) (xs : Fin nM) :
                    realizeWith σ h (BoundedFormulaω.iInf φs) v xs ∀ (i : ), realizeWith σ h (φs i) v xs
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_not {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) (v : αM) (xs : Fin nM) :
                    realizeWith σ h φ.not v xs ¬realizeWith σ h φ v xs
                    @[simp]
                    theorem FirstOrder.Language.realizeWith_ex {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) {α : Type} {n : } (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω α (n + 1)) (v : αM) (xs : Fin nM) :
                    realizeWith σ h φ.ex v xs ∃ (x : M), realizeWith σ h φ v (Fin.snoc xs x)
                    theorem FirstOrder.Language.sentenceRealize_iff_realizeWith {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (h : M) (τ : ((L''.withConstants J).withConstants ).Sentenceω) :

                    Bridge to the raw sentence satisfaction used by MarkerHenkinCert.

                    The constant-agreement congruence #

                    theorem FirstOrder.Language.termValueWith_congr {L'' : Language} {J M : Type} [L''.Structure M] {σ σ' : JM} {h h' : M} {β : Type} (t : ((L''.withConstants J).withConstants ).Term β) ( : ∀ (j : J), 0, Sum.inl (Sum.inr j) t.functionsInσ j = σ' j) (hh : ∀ (m : ), 0, Sum.inr m t.functionsInh m = h' m) (v : βM) :
                    termValueWith σ h t v = termValueWith σ' h' t v

                    Term congruence: two skeleton interpretations agreeing on the occurring skeleton constants and two Henkin interpretations agreeing on the occurring witness constants give every term the same value.

                    theorem FirstOrder.Language.realizeWith_congr {L'' : Language} {J M : Type} [L''.Structure M] {σ σ' : JM} {h h' : M} {α : Type} {n : } (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω α n) ( : jexpJConstsIn φ, σ j = σ' j) (hh : mhenkinConstsIn φ, h m = h' m) (v : αM) (xs : Fin nM) :
                    realizeWith σ h φ v xs realizeWith σ' h' φ v xs

                    Formula congruence — the semantic-support engine of the Marker construction: agreement on the occurring skeleton constants (expJConstsIn) and witness constants (henkinConstsIn) gives identical realization. This is what makes tuple-canonical colorings well-defined (C4 re-homogenization) and fresh witness indices harmless (C7).

                    Layer 5: the finite Henkin closure calculus #

                    The freshness audit gate (settled by strengthening the predicate): henkinConstsIn is not automatically finite for an arbitrary Lω₁ω sentence — iSup/iInf can mention countably many witness constants (e.g. ⋁ₙ (dₙ = dₙ) has Henkin support all of ) — so "pick a fresh witness index outside the fragment's Henkin support" needs an invariant. MarkerHenkinCert therefore carries a finite Henkin support H : Finset alongside the skeleton support S : Finset J. The invariant is self-maintaining and non-restrictive: the construction's seed sentences are mapLanguage-images of L'[[J]]-sentences (Henkin support ), and every closure operation shrinks the support (components, negations, implication branches) or grows it by finitely many constants (substitution instances) — an infinite-support sentence never enters a member of the Henkin enumeration.

                    Support lemmas for the expansion's skeleton constants #

                    Negation does not change the skeleton-constant support.

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

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

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

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

                    Support lemmas for the expansion's Henkin constants (wrappers around the generic #

                    sentenceJConsts family, restated so rw matches the henkinConstsIn spelling)

                    The finite-member predicates #

                    The certificate body at an explicit skeleton support S: a (ℶ_α)⁺-suborder e of the source, and — for EVERY skeleton interpretation increasing on S into e's range — SOME Henkin interpretation making every member true. The skeleton side stays universal (the EM tuples); the witness side is existential per interpretation, because quantifier witnesses vary with the tuple. The support-tracking conjuncts live in the wrapping predicates.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      The per-level Henkin–Marker certification of a finite fragment over the expansion (L''[[J]])[[ℕ]]: a finite skeleton support S, a finite Henkin support H (the freshness invariant), and a body at S.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        The finite-member consistency predicate: a UNIFORM finite support (S, H) (fixed across all levels — this is what the re-homogenization room lemma needs, and what the base case markerStage_homogeneous naturally provides) together with certification bodies at cofinally many levels below ω₁. The arbitrary-set extension field and the global C4 uniformization of the ambient ConsistencyPropertyEq API are deliberately avoided: the Henkin construction consumes finite members along its enumeration, choosing disjuncts and witnesses per member (the classical Marker/Keisler shape).

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem FirstOrder.Language.MarkerHenkinBody.mono {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {S : Finset J} {F F' : Set ((L''.withConstants J).withConstants ).Sentenceω} (hFF : F'F) (hb : MarkerHenkinBody M α S F) :

                          The body is monotone (downward-closed) in the fragment, at fixed support.

                          theorem FirstOrder.Language.MarkerHenkinBody.insert_of_semantic {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {S : Finset J} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hb : MarkerHenkinBody M α S F) {trigger new : ((L''.withConstants J).withConstants ).Sentenceω} (hmem : trigger F) (hder : ∀ (σ : JM) (h : M), realizeWith σ h trigger Empty.elim Fin.elim0realizeWith σ h new Empty.elim Fin.elim0) :
                          MarkerHenkinBody M α S (insert new F)

                          Body-level semantic insertion: if a trigger member semantically entails a new sentence under every interpretation pair, adjoining new preserves the body (same suborder, same witnesses).

                          theorem FirstOrder.Language.MarkerHenkinCert.mono {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {F F' : Set ((L''.withConstants J).withConstants ).Sentenceω} (hFF : F'F) (hc : MarkerHenkinCert M α F) :

                          Certification is monotone (downward-closed) in the fragment.

                          Finite-member consistency is monotone (downward-closed).

                          theorem FirstOrder.Language.MarkerHenkinCert.insert_of_semantic {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hc : MarkerHenkinCert M α F) {trigger new : ((L''.withConstants J).withConstants ).Sentenceω} (hmem : trigger F) (hJ : expJConstsIn newexpJConstsIn trigger) (hN : henkinConstsIn newhenkinConstsIn trigger) (hder : ∀ (σ : JM) (h : M), realizeWith σ h trigger Empty.elim Fin.elim0realizeWith σ h new Empty.elim Fin.elim0) :

                          The semantic insertion scheme behind the choice-free closure rules: if a trigger member semantically entails a new sentence under every interpretation pair, and neither constant support grows, then adjoining new preserves certification — same supports, same suborder, same witnesses.

                          C0 (no falsum): a certified fragment cannot contain .

                          C0 (no contradiction): a certified fragment cannot contain both a sentence and its negation.

                          theorem FirstOrder.Language.MarkerHenkinConsistent.insert_of_semantic {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {F : Finset ((L''.withConstants J).withConstants ).Sentenceω} (h : MarkerHenkinConsistent M F) {trigger new : ((L''.withConstants J).withConstants ).Sentenceω} (hmem : trigger F) (hJ : expJConstsIn newexpJConstsIn trigger) (hN : henkinConstsIn newhenkinConstsIn trigger) (hder : ∀ (σ : JM) (hk : M), realizeWith σ hk trigger Empty.elim Fin.elim0realizeWith σ hk new Empty.elim Fin.elim0) :

                          The finite-member insertion scheme at the consistency level (uniform support preserved).

                          C2 (double negation): ¬¬φ ∈ F allows adjoining φ.

                          C3 (conjunction components): ⋀ᵢ φᵢ ∈ F allows adjoining every component.

                          C4' (negated-disjunction components): ¬⋁ᵢ φᵢ ∈ F allows adjoining every negated component.

                          C1' (negated implication, antecedent): ¬(φ → ψ) ∈ F allows adjoining φ.

                          C1' (negated implication, consequent): ¬(φ → ψ) ∈ F allows adjoining ¬ψ.

                          Layer 5b engine: re-homogenization #

                          The reusable machinery for the branch/index choice rules (C1, C3', C4): color the support tuples of a high-level certificate body by the branch a realizing interpretation selects, re-homogenize inside the existing suborder via finiteArityHomogeneousUpTo_beth_stage at a level lower by the finite ladder cost 2·|S|+2, and read off a uniform branch.

                          noncomputable def FirstOrder.Language.tupleInterp {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D : Type} [LinearOrder D] (S : Finset J) (e : D ↪o M) (t : Fin S.cardD) (dflt : M) :
                          JM

                          The skeleton interpretation determined by a source tuple t : Fin S.card → D and a suborder e : D ↪o M: the i-th element of S maps to e (t i), off S to a default.

                          Equations
                          Instances For
                            theorem FirstOrder.Language.tupleInterp_orderEmbOfFin {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D : Type} [LinearOrder D] (S : Finset J) (e : D ↪o M) (t : Fin S.cardD) (dflt : M) (i : Fin S.card) :
                            tupleInterp S e t dflt ((S.orderEmbOfFin ) i) = e (t i)
                            theorem FirstOrder.Language.strictMonoOn_tupleInterp {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D : Type} [LinearOrder D] (S : Finset J) (e : D ↪o M) {t : Fin S.cardD} (ht : StrictMono t) (dflt : M) :
                            StrictMonoOn (tupleInterp S e t dflt) S
                            theorem FirstOrder.Language.tupleInterp_mem_range {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D : Type} [LinearOrder D] (S : Finset J) (e : D ↪o M) (t : Fin S.cardD) (dflt : M) (j : J) :
                            j StupleInterp S e t dflt j Set.range e
                            theorem FirstOrder.Language.tupleInterp_eqOn {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D : Type} [LinearOrder D] (S : Finset J) (e : D ↪o M) (t : Fin S.cardD) (dflt : M) {σ : JM} (h : ∀ (i : Fin S.card), e (t i) = σ ((S.orderEmbOfFin ) i)) (j : J) :
                            j StupleInterp S e t dflt j = σ j

                            On the support, tupleInterp agrees with any σ matching it index-by-index.

                            A finite tuple order-embedding into any infinite linear order exists.

                            theorem FirstOrder.Language.exists_factor_tuple {J : Type} [LinearOrder J] {M : Type} [LinearOrder M] {D₀ D : Type} [LinearOrder D₀] [LinearOrder D] (S : Finset J) (e : D ↪o M) (e' : D₀ ↪o D) {σ : JM} (hmono : StrictMonoOn σ S) (hrange : jS, σ j Set.range (RelEmbedding.trans e' e)) :
                            ∃ (t : Fin S.cardD), StrictMono t (∀ (i : Fin S.card), t i Set.range e') ∀ (i : Fin S.card), e (t i) = σ ((S.orderEmbOfFin ) i)

                            Support-tuple factoring: an admissible σ for the composite suborder e'.trans e factors through the support into a source tuple t landing in Set.range e' and matching σ on S index-by-index.

                            theorem FirstOrder.Language.MarkerHenkinBody.branch_choice {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α₀ α : Ordinal.{0}} {S : Finset J} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hroom : α₀ + ↑(2 * S.card + 2) α) (hb : MarkerHenkinBody M α S F) (hFsupp : τF, expJConstsIn τS) {K : Type} [Countable K] (branch : K((L''.withConstants J).withConstants ).Sentenceω) (hbranchSupp : ∀ (k : K), expJConstsIn (branch k)S) (hcover : ∀ (σ : JM) (h : M), (∀ τF, realizeWith σ h τ Empty.elim Fin.elim0)∃ (k : K), realizeWith σ h (branch k) Empty.elim Fin.elim0) :
                            ∃ (k : K), MarkerHenkinBody M α₀ S (insert (branch k) F)

                            The re-homogenization engine. From a certificate body of F at a level α exceeding the target α₀ by the finite ladder cost 2·|S|+2, a covering branch family whose members have skeleton support inside S, produce ONE branch k and a body of insert (branch k) F at the target level α₀. The branch is uniform on the support tuples of the output suborder (read off finiteArityHomogeneousUpTo_beth_stage); every admissible interpretation of the output suborder factors through a support tuple, whose realizing interpretation selects branch k, and constant-agreement congruence transfers realization back.

                            Layer 5b-2: the branch/index choice rules #

                            theorem FirstOrder.Language.MarkerHenkinConsistent.branch_choice {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {F : Finset ((L''.withConstants J).withConstants ).Sentenceω} (h : MarkerHenkinConsistent M F) {K : Type} [Countable K] (branch : K((L''.withConstants J).withConstants ).Sentenceω) {trigger : ((L''.withConstants J).withConstants ).Sentenceω} (hmem : trigger F) (hbJ : ∀ (k : K), expJConstsIn (branch k)expJConstsIn trigger) (hbN : ∀ (k : K), henkinConstsIn (branch k)henkinConstsIn trigger) (hcover : ∀ (σ : JM) (hk : M), realizeWith σ hk trigger Empty.elim Fin.elim0∃ (k : K), realizeWith σ hk (branch k) Empty.elim Fin.elim0) :
                            ∃ (k : K), MarkerHenkinConsistent M (insert (branch k) F)

                            Consistency-level branch choice (re-homogenization + the ω₁-pigeonhole assembly): a covering branch family for a trigger ∈ F, whose members' constant supports lie inside the trigger's, yields ONE branch k with insert (branch k) F consistent. Per target level the body comes from MarkerHenkinBody.branch_choice (asked at the ladder-cost-offset level, kept below ω₁ by add_natCast_lt_omega_one); the single uniform k comes from exists_uniform_of_cofinal_countable (ω₁ is regular). Uniform support (S, H) is preserved.

                            C4 (disjunction witness): ⋁ᵢ φᵢ ∈ F yields a uniform disjunct k with insert (φs k) F consistent.

                            C3' (negated-conjunction witness): ¬⋀ᵢ φᵢ ∈ F yields a uniform index k with insert (φs k).not F consistent.

                            C1 (implication): φ → ψ ∈ F — one of insert φ.not F, insert ψ F is consistent (the branch is chosen uniformly over the support tuples).

                            Layer 5c: the Henkin witness rule (C7) #

                            The one closure rule of a different shape: no re-homogenization, but a fresh Henkin constant. From ∃x φ(x) ∈ F, pick a witness index n outside the finite Henkin support H, update the Henkin interpretation at n to the existential witness (per skeleton interpretation), and adjoin the instance φ(dₙ). The finite-support invariant is what makes "fresh n" available.

                            The Henkin witness instance of an existential: φ with its last bound variable filled by the n-th Henkin constant.

                            Equations
                            Instances For

                              does not change the mentioned function symbols.

                              The witness constant dₙ's only mentioned symbol is the n-th Henkin constant.

                              The witness sentence adds no new function symbol beyond φ's and the fresh constant dₙ.

                              The semantic bridge: realizing the witness sentence is realizing φ with the last bound variable set to the Henkin interpretation of dₙ.

                              theorem FirstOrder.Language.MarkerHenkinBody.witness {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {S : Finset J} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hb : MarkerHenkinBody M α S F) {φ : ((L''.withConstants J).withConstants ).BoundedFormulaω Empty 1} (hmem : φ.ex F) (n : ) (hn : τF, nhenkinConstsIn τ) :

                              Body-level C7: from ∃x φ(x) ∈ F and a Henkin index n fresh for F, the witness instance can be adjoined — update the Henkin interpretation at n to the existential witness; n's freshness leaves every old member unchanged (realizeWith_congr).

                              C7 (existential witness): ∃x φ(x) ∈ F yields a fresh Henkin index n with insert (witnessSentence φ n) F consistent — the new Henkin support is insert n H.

                              Layer 6a: the finite-support universe and the restricted extension rule #

                              The bespoke finite-Henkin adapter avoids the ambient ConsistencyPropertyEq (whose extension field quantifies over ARBITRARY sentences, which Marker consistency cannot supply at infinite constant-support). Instead it works over the sentences of finite constant support — exactly the sentences the Marker recursion from the template seed ever produces — and replaces the arbitrary-sentence extension field with a restricted extension rule proved by the same Layer-5b re-homogenization engine (branch over Bool, colour support tuples by whether τ is realized).

                              A sentence of finite constant support: finitely many J-constants and finitely many Henkin constants. The restricted universe the adapter decides over.

                              Equations
                              Instances For
                                @[reducible, inline]

                                The subtype of finite-constant-support sentences — the universe of the maximal finite-support theory.

                                Equations
                                Instances For
                                  theorem FirstOrder.Language.MarkerHenkinBody.enlarge_support {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {S S' : Finset J} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hSS : SS') (hb : MarkerHenkinBody M α S F) :

                                  A body over S is a body over any larger support (fewer admissible interpretations).

                                  The restricted extension rule (the replacement for the ambient extension field): any finite-constant-support sentence τ can be decided — one of insert τ F, insert τ.not F is Marker-consistent. Enlarge the uniform support by τ's finite supports, re-homogenize the Boolean "is τ realized" colouring of the support tuples (MarkerHenkinBody.branch_choice, covering is the unconditional tautology τ ∨ ¬τ), and uniformize the branch over the cofinal α-schedule.

                                  Layer 6b: the equality closure rules (C5/C6) #

                                  The equality rules the term-model quotient and truth lemma will need on the restricted maximal theory. Both are proved semantically (certification is realizability in M, whose equality is genuine) via unconditional/entailed insertion, with finite constant support tracked through the syntactic support API.

                                  A sentence mentioning only finitely many function symbols has finite constant support: expJConstsIn/henkinConstsIn are preimages of functionsIn under injective maps.

                                  theorem FirstOrder.Language.MarkerHenkinBody.insert_of_entailed {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {α : Ordinal.{0}} {S : Finset J} {F : Set ((L''.withConstants J).withConstants ).Sentenceω} (hb : MarkerHenkinBody M α S F) (new : ((L''.withConstants J).withConstants ).Sentenceω) (hent : ∀ (σ : JM) (hk : M), (∀ ρF, realizeWith σ hk ρ Empty.elim Fin.elim0)realizeWith σ hk new Empty.elim Fin.elim0) :
                                  MarkerHenkinBody M α S (insert new F)

                                  Body-level entailed insertion: if the members of F semantically entail new under every interpretation, adjoining new preserves the body (same suborder, same witnesses).

                                  theorem FirstOrder.Language.MarkerHenkinConsistent.insert_entailed {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {F : Finset ((L''.withConstants J).withConstants ).Sentenceω} (h : MarkerHenkinConsistent M F) (new : ((L''.withConstants J).withConstants ).Sentenceω) (hnew : HasFiniteConstSupport new) (hent : ∀ (σ : JM) (hk : M), (∀ ρF, realizeWith σ hk ρ Empty.elim Fin.elim0)realizeWith σ hk new Empty.elim Fin.elim0) :

                                  Consistency-level entailed insertion: a finite-support sentence entailed by F (under every interpretation) can be adjoined; the uniform support grows by the new sentence's finite supports. No re-homogenization (the entailment is unconditional over the branch).

                                  C5 (equality reflexivity): t = t can always be adjoined — it is valid, so any realizing interpretation realizes it too.

                                  The C6 substitution instance mentions no symbol beyond the old instance φ(t₁) and the equality sentence — the syntactic support bound behind eq_subst's finite support.

                                  Realizing a relabel of a closed term is realizing the term (the extra bound slot is vacuous).

                                  theorem FirstOrder.Language.realizeWith_subst_const {L'' : Language} {J M : Type} [L''.Structure M] (σ : JM) (hk : M) (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω (Fin 1) 0) (t : ((L''.withConstants J).withConstants ).Term Empty) :
                                  realizeWith σ hk (φ.subst fun (x : Fin 1) => t) Empty.elim Fin.elim0 realizeWith σ hk φ (fun (x : Fin 1) => termValueWith σ hk t Empty.elim) Fin.elim0

                                  The substitution-of-a-closed-term bridge: realizing φ(t) is realizing φ with its bound variable set to the value of t.

                                  theorem FirstOrder.Language.MarkerHenkinConsistent.eq_subst {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {F : Finset ((L''.withConstants J).withConstants ).Sentenceω} (h : MarkerHenkinConsistent M F) (t₁ t₂ : ((L''.withConstants J).withConstants ).Term Empty) (φ : ((L''.withConstants J).withConstants ).BoundedFormulaω (Fin 1) 0) (hmem_eq : BoundedFormulaω.equal (Term.relabel Sum.inl t₁) (Term.relabel Sum.inl t₂) F) (hmem_φ : (φ.subst fun (x : Fin 1) => t₁) F) :
                                  MarkerHenkinConsistent M (insert (φ.subst fun (x : Fin 1) => t₂) F)

                                  C6 (equality substitution): from t₁ = t₂ ∈ F and φ(t₁) ∈ F, the instance φ(t₂) can be adjoined — the equality forces equal term values, and realizeWith_subst_const transports φ. The support of φ(t₂) stays inside F's uniform support (functionsIn_eq_subst_subset).

                                  Layer 6c: the maximal finite-support theory (Zorn) #

                                  The finite closure calculus (C0–C7) is turned into a complete theory over the finite-support universe by a finite-character Zorn argument, mirroring ConsistencyProperty.chain_closure but with completeness only for finite-support sentences — exactly what the restricted truth lemma will need. Parameterized by a consistent seed (the base consistency hook is a separate cross-file integration; the abstract machinery here fixes the shape it must feed).

                                  Negation on the finite-support universe.

                                  Equations
                                  Instances For

                                    Finite-character Marker consistency of a set of finite-support sentences: every finite subset is Marker–Henkin consistent. This is the family Zorn runs over.

                                    Equations
                                    Instances For

                                      Finite-character consistency is downward-closed in the set.

                                      theorem FirstOrder.Language.MarkerConsistentFamily.sUnion_chain {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {𝒞 : Set (Set FSentence)} (h𝒞 : Y𝒞, MarkerConsistentFamily M Y) (hchain : IsChain (fun (x1 x2 : Set FSentence) => x1x2) 𝒞) (hne : 𝒞.Nonempty) :

                                      Chain closure: the union of a nonempty -chain of finite-character-consistent sets is finite-character consistent — a finite subset of the union lies in one chain member.

                                      The maximal finite-support theory: any finite-character-consistent seed extends to a maximal one (Zorn, chain closure supplying the upper bounds).

                                      Membership calculus of the maximal theory #

                                      theorem FirstOrder.Language.not_mem_of_maximal {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {m : Set FSentence} (hmax : Maximal (MarkerConsistentFamily M) m) {τ : FSentence} ( : τm) :

                                      A sentence outside a maximal theory is refuted by some finite fragment: adjoining it to that fragment breaks consistency.

                                      Restricted completeness: a maximal finite-support theory decides every finite-support sentence. From maximality, insert τ m and insert τ.not m are both inconsistent as families when τ, τ.not ∉ m; combining the two refuting fragments and applying the extension rule yields a contradiction.

                                      The membership-insertion principle for the maximal theory: a finite-support sentence whose adjunction to every fragment of m stays consistent is a member of m. This turns each fragment-level closure rule into a membership rule.

                                      theorem FirstOrder.Language.MarkerConsistentFamily.mem_of_trigger {L'' : Language} {J : Type} [LinearOrder J] {M : Type} [L''.Structure M] [LinearOrder M] {m : Set FSentence} (hmax : Maximal (MarkerConsistentFamily M) m) {trigger : FSentence} (htrig : trigger m) (new : FSentence) (rule : ∀ (G : Finset ((L''.withConstants J).withConstants ).Sentenceω), trigger GMarkerHenkinConsistent M GMarkerHenkinConsistent M (insert (↑new) G)) :
                                      new m

                                      The membership-closure engine: a fragment-level closure rule (adjoining new to any consistent fragment containing the trigger stays consistent) lifts, given trigger ∈ m, to new ∈ m. Every named closure membership rule below is a one-line instance.

                                      C2 in membership form: ¬¬φ ∈ m implies φ ∈ m.