File: Mathlib/ModelTheory/Skolem.lean

full_name: FirstOrder.Language.skolem₁
code: /-- A language consisting of Skolem functions for another language.
Called `skolem₁` because it is the first step in building a Skolemization of a language. -/
@[simps]
def skolem₁ : Language 
goal: FirstOrder.Language

full_name: FirstOrder.Language.skolem₁_Functions
code: /-- A language consisting of Skolem functions for another language.
Called `skolem₁` because it is the first step in building a Skolemization of a language. -/
@[simps]
def skolem₁ : Language 
goal: L.skolem₁.Functions n = L.BoundedFormula Empty (n + 1)

full_name: FirstOrder.Language.skolem₁_Relations
code: /-- A language consisting of Skolem functions for another language.
Called `skolem₁` because it is the first step in building a Skolemization of a language. -/
@[simps]
def skolem₁ : Language 
goal: ∀ (x : ℕ), L.skolem₁.Relations x = Empty

full_name: FirstOrder.Language.card_functions_sum_skolem₁
code: theorem card_functions_sum_skolem₁ :
    #(Σ n, (L.sum L.skolem₁).Functions n) = #(Σ n, L.BoundedFormula Empty (n + 1)) 
goal: Cardinal.mk ((n : ℕ) × (L.sum L.skolem₁).Functions n) = Cardinal.mk ((n : ℕ) × L.BoundedFormula Empty (n + 1))

full_name: FirstOrder.Language.card_functions_sum_skolem₁_le
code: theorem card_functions_sum_skolem₁_le : #(Σ n, (L.sum L.skolem₁).Functions n) ≤ max ℵ₀ L.card 
goal: Cardinal.mk ((n : ℕ) × (L.sum L.skolem₁).Functions n) ≤ max Cardinal.aleph0 L.card

full_name: FirstOrder.Language.skolem₁Structure
code: /-- The structure assigning each function symbol of `L.skolem₁` to a skolem function generated with
choice. -/
noncomputable instance skolem₁Structure : L.skolem₁.Structure M 
goal: L.skolem₁.Structure M

full_name: FirstOrder.Language.Substructure.skolem₁_reduct_isElementary
code: theorem skolem₁_reduct_isElementary (S : (L.sum L.skolem₁).Substructure M) :
    (LHom.sumInl.substructureReduct S).IsElementary 
goal: (FirstOrder.Language.LHom.sumInl.substructureReduct S).IsElementary

full_name: FirstOrder.Language.Substructure.elementarySkolem₁Reduct
code: /-- Any `L.sum L.skolem₁`-substructure is an elementary `L`-substructure. -/
noncomputable def elementarySkolem₁Reduct (S : (L.sum L.skolem₁).Substructure M) :
    L.ElementarySubstructure M 
goal: L.ElementarySubstructure M

full_name: FirstOrder.Language.Substructure.coeSort_elementarySkolem₁Reduct
code: theorem coeSort_elementarySkolem₁Reduct (S : (L.sum L.skolem₁).Substructure M) :
    (S.elementarySkolem₁Reduct : Type w) = S 
goal: ↥S.elementarySkolem₁Reduct = ↥S

full_name: FirstOrder.Language.Substructure.elementarySkolem₁Reduct.instSmall
code: instance Substructure.elementarySkolem₁Reduct.instSmall :
    Small.{max u v} (⊥ : (L.sum L.skolem₁).Substructure M).elementarySkolem₁Reduct 
goal: Small.{max u v, w} ↥⊥.elementarySkolem₁Reduct

full_name: FirstOrder.Language.exists_small_elementarySubstructure
code: theorem exists_small_elementarySubstructure : ∃ S : L.ElementarySubstructure M, Small.{max u v} S 
goal: ∃ S, Small.{max u v, w} ↥S

full_name: FirstOrder.Language.exists_elementarySubstructure_card_eq
code: /-- The **Downward Löwenheim–Skolem theorem** :
  If `s` is a set in an `L`-structure `M` and `κ` an infinite cardinal such that
  `max (#s, L.card) ≤ κ` and `κ ≤ # M`, then `M` has an elementary substructure containing `s` of
  cardinality `κ`.  -/
theorem exists_elementarySubstructure_card_eq (s : Set M) (κ : Cardinal.{w'}) (h1 : ℵ₀ ≤ κ)
    (h2 : Cardinal.lift.{w'} #s ≤ Cardinal.lift.{w} κ)
    (h3 : Cardinal.lift.{w'} L.card ≤ Cardinal.lift.{max u v} κ)
    (h4 : Cardinal.lift.{w} κ ≤ Cardinal.lift.{w'} #M) :
    ∃ S : L.ElementarySubstructure M, s ⊆ S ∧ Cardinal.lift.{w'} #S = Cardinal.lift.{w} κ 
goal: ∃ S, s ⊆ ↑S ∧ Cardinal.lift.{w', w} (Cardinal.mk ↥S) = Cardinal.lift.{w, w'} κ