File: Mathlib/ModelTheory/FinitelyGenerated.lean

full_name: FirstOrder.Language.Substructure.FG
code: /-- A substructure of `M` is finitely generated if it is the closure of a finite subset of `M`. -/
def FG (N : L.Substructure M) : Prop 
goal: Prop

full_name: FirstOrder.Language.Substructure.fg_def
code: theorem fg_def {N : L.Substructure M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ closure L S = N 
goal: N.FG ↔ ∃ S, S.Finite ∧ (FirstOrder.Language.Substructure.closure L).toFun S = N

full_name: FirstOrder.Language.Substructure.fg_iff_exists_fin_generating_family
code: theorem fg_iff_exists_fin_generating_family {N : L.Substructure M} :
    N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), closure L (range s) = N 
goal: N.FG ↔ ∃ n s, (FirstOrder.Language.Substructure.closure L).toFun (Set.range s) = N

full_name: FirstOrder.Language.Substructure.fg_bot
code: theorem fg_bot : (⊥ : L.Substructure M).FG 
goal: ⊥.FG

full_name: FirstOrder.Language.Substructure.fg_closure
code: theorem fg_closure {s : Set M} (hs : s.Finite) : FG (closure L s) 
goal: ((FirstOrder.Language.Substructure.closure L).toFun s).FG

full_name: FirstOrder.Language.Substructure.fg_closure_singleton
code: theorem fg_closure_singleton (x : M) : FG (closure L ({x} : Set M)) 
goal: ((FirstOrder.Language.Substructure.closure L).toFun {x}).FG

full_name: FirstOrder.Language.Substructure.FG.sup
code: theorem FG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG 
goal: (N₁ ⊔ N₂).FG

full_name: FirstOrder.Language.Substructure.FG.map
code: theorem FG.map {N : Type*} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.FG) :
    (s.map f).FG 
goal: (FirstOrder.Language.Substructure.map f s).FG

full_name: FirstOrder.Language.Substructure.FG.of_map_embedding
code: theorem FG.of_map_embedding {N : Type*} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
    (hs : (s.map f.toHom).FG) : s.FG 
goal: s.FG

full_name: FirstOrder.Language.Substructure.CG
code: /-- A substructure of `M` is countably generated if it is the closure of a countable subset of `M`.
-/
def CG (N : L.Substructure M) : Prop 
goal: Prop

full_name: FirstOrder.Language.Substructure.cg_def
code: theorem cg_def {N : L.Substructure M} : N.CG ↔ ∃ S : Set M, S.Countable ∧ closure L S = N 
goal: N.CG ↔ ∃ S, S.Countable ∧ (FirstOrder.Language.Substructure.closure L).toFun S = N

full_name: FirstOrder.Language.Substructure.FG.cg
code: theorem FG.cg {N : L.Substructure M} (h : N.FG) : N.CG 
goal: N.CG

full_name: FirstOrder.Language.Substructure.cg_iff_empty_or_exists_nat_generating_family
code: theorem cg_iff_empty_or_exists_nat_generating_family {N : L.Substructure M} :
    N.CG ↔ N = (∅ : Set M) ∨ ∃ s : ℕ → M, closure L (range s) = N 
goal: N.CG ↔ ↑N = ∅ ∨ ∃ s, (FirstOrder.Language.Substructure.closure L).toFun (Set.range s) = N

full_name: FirstOrder.Language.Substructure.cg_bot
code: theorem cg_bot : (⊥ : L.Substructure M).CG 
goal: ⊥.CG

full_name: FirstOrder.Language.Substructure.cg_closure
code: theorem cg_closure {s : Set M} (hs : s.Countable) : CG (closure L s) 
goal: ((FirstOrder.Language.Substructure.closure L).toFun s).CG

full_name: FirstOrder.Language.Substructure.cg_closure_singleton
code: theorem cg_closure_singleton (x : M) : CG (closure L ({x} : Set M)) 
goal: ((FirstOrder.Language.Substructure.closure L).toFun {x}).CG

full_name: FirstOrder.Language.Substructure.CG.sup
code: theorem CG.sup {N₁ N₂ : L.Substructure M} (hN₁ : N₁.CG) (hN₂ : N₂.CG) : (N₁ ⊔ N₂).CG 
goal: (N₁ ⊔ N₂).CG

full_name: FirstOrder.Language.Substructure.CG.map
code: theorem CG.map {N : Type*} [L.Structure N] (f : M →[L] N) {s : L.Substructure M} (hs : s.CG) :
    (s.map f).CG 
goal: (FirstOrder.Language.Substructure.map f s).CG

full_name: FirstOrder.Language.Substructure.CG.of_map_embedding
code: theorem CG.of_map_embedding {N : Type*} [L.Structure N] (f : M ↪[L] N) {s : L.Substructure M}
    (hs : (s.map f.toHom).CG) : s.CG 
goal: s.CG

full_name: FirstOrder.Language.Substructure.cg_iff_countable
code: theorem cg_iff_countable [Countable (Σl, L.Functions l)] {s : L.Substructure M} :
    s.CG ↔ Countable s 
goal: s.CG ↔ Countable ↥s

full_name: FirstOrder.Language.Structure.FG
code: /-- A structure is finitely generated if it is the closure of a finite subset. -/
class FG : Prop where
  out : (⊤ : L.Substructure M).FG
goal: Prop

full_name: FirstOrder.Language.Structure.FG.out
code: /-- A structure is finitely generated if it is the closure of a finite subset. -/
class FG : Prop where
  out : (⊤ : L.Substructure M).FG
goal: ⊤.FG

full_name: FirstOrder.Language.Structure.CG.out
code: /-- A structure is countably generated if it is the closure of a countable subset. -/
class CG : Prop where
  out : (⊤ : L.Substructure M).CG
goal: ⊤.CG

full_name: FirstOrder.Language.Structure.CG
code: /-- A structure is countably generated if it is the closure of a countable subset. -/
class CG : Prop where
  out : (⊤ : L.Substructure M).CG
goal: Prop

full_name: FirstOrder.Language.Structure.fg_def
code: theorem fg_def : FG L M ↔ (⊤ : L.Substructure M).FG 
goal: FirstOrder.Language.Structure.FG L M ↔ ⊤.FG

full_name: FirstOrder.Language.Structure.fg_iff
code: /-- An equivalent expression of `Structure.FG` in terms of `Set.Finite` instead of `Finset`. -/
theorem fg_iff : FG L M ↔ ∃ S : Set M, S.Finite ∧ closure L S = (⊤ : L.Substructure M) 
goal: FirstOrder.Language.Structure.FG L M ↔ ∃ S, S.Finite ∧ (FirstOrder.Language.Substructure.closure L).toFun S = ⊤

full_name: FirstOrder.Language.Structure.FG.range
code: theorem FG.range {N : Type*} [L.Structure N] (h : FG L M) (f : M →[L] N) : f.range.FG 
goal: f.range.FG

full_name: FirstOrder.Language.Structure.FG.map_of_surjective
code: theorem FG.map_of_surjective {N : Type*} [L.Structure N] (h : FG L M) (f : M →[L] N)
    (hs : Function.Surjective f) : FG L N 
goal: FirstOrder.Language.Structure.FG L N

full_name: FirstOrder.Language.Structure.cg_def
code: theorem cg_def : CG L M ↔ (⊤ : L.Substructure M).CG 
goal: FirstOrder.Language.Structure.CG L M ↔ ⊤.CG

full_name: FirstOrder.Language.Structure.cg_iff
code: /-- An equivalent expression of `Structure.cg`. -/
theorem cg_iff : CG L M ↔ ∃ S : Set M, S.Countable ∧ closure L S = (⊤ : L.Substructure M) 
goal: FirstOrder.Language.Structure.CG L M ↔ ∃ S, S.Countable ∧ (FirstOrder.Language.Substructure.closure L).toFun S = ⊤

full_name: FirstOrder.Language.Structure.CG.range
code: theorem CG.range {N : Type*} [L.Structure N] (h : CG L M) (f : M →[L] N) : f.range.CG 
goal: f.range.CG

full_name: FirstOrder.Language.Structure.CG.map_of_surjective
code: theorem CG.map_of_surjective {N : Type*} [L.Structure N] (h : CG L M) (f : M →[L] N)
    (hs : Function.Surjective f) : CG L N 
goal: FirstOrder.Language.Structure.CG L N

full_name: FirstOrder.Language.Structure.cg_iff_countable
code: theorem cg_iff_countable [Countable (Σl, L.Functions l)] : CG L M ↔ Countable M 
goal: FirstOrder.Language.Structure.CG L M ↔ Countable M

full_name: FirstOrder.Language.Structure.FG.cg
code: theorem FG.cg (h : FG L M) : CG L M 
goal: FirstOrder.Language.Structure.CG L M

full_name: FirstOrder.Language.Structure.cg_of_fg
code: instance (priority := 100) cg_of_fg [h : FG L M] : CG L M 
goal: FirstOrder.Language.Structure.CG L M

full_name: FirstOrder.Language.Equiv.fg_iff
code: theorem Equiv.fg_iff {N : Type*} [L.Structure N] (f : M ≃[L] N) :
    Structure.FG L M ↔ Structure.FG L N 
goal: FirstOrder.Language.Structure.FG L M ↔ FirstOrder.Language.Structure.FG L N

full_name: FirstOrder.Language.Substructure.fg_iff_structure_fg
code: theorem Substructure.fg_iff_structure_fg (S : L.Substructure M) : S.FG ↔ Structure.FG L S 
goal: S.FG ↔ FirstOrder.Language.Structure.FG L ↥S

full_name: FirstOrder.Language.Equiv.cg_iff
code: theorem Equiv.cg_iff {N : Type*} [L.Structure N] (f : M ≃[L] N) :
    Structure.CG L M ↔ Structure.CG L N 
goal: FirstOrder.Language.Structure.CG L M ↔ FirstOrder.Language.Structure.CG L N

full_name: FirstOrder.Language.Substructure.cg_iff_structure_cg
code: theorem Substructure.cg_iff_structure_cg (S : L.Substructure M) : S.CG ↔ Structure.CG L S 
goal: S.CG ↔ FirstOrder.Language.Structure.CG L ↥S