Documentation

Mathlib.ModelTheory.Substructures

First-Order Substructures #

This file defines substructures of first-order structures in a similar manner to the various substructures appearing in the algebra library.

Main Definitions #

Main Results #

def FirstOrder.Language.ClosedUnder {L : Language} {M : Type w} [L.Structure M] {n : } (f : L.Functions n) (s : Set M) :

Indicates that a set in a given structure is a closed under a function symbol.

Equations
theorem FirstOrder.Language.ClosedUnder.inter {L : Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {s t : Set M} (hs : ClosedUnder f s) (ht : ClosedUnder f t) :
theorem FirstOrder.Language.ClosedUnder.inf {L : Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {s t : Set M} (hs : ClosedUnder f s) (ht : ClosedUnder f t) :
ClosedUnder f (st)
theorem FirstOrder.Language.ClosedUnder.sInf {L : Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {S : Set (Set M)} (hS : sS, ClosedUnder f s) :

A substructure of a structure M is a set closed under application of function symbols.

See Note [custom simps projection]

Equations
@[simp]
theorem FirstOrder.Language.Substructure.mem_carrier {L : Language} {M : Type w} [L.Structure M] {s : L.Substructure M} {x : M} :
x s x s
theorem FirstOrder.Language.Substructure.ext {L : Language} {M : Type w} [L.Structure M] {S T : L.Substructure M} (h : ∀ (x : M), x S x T) :
S = T

Two substructures are equal if they have the same elements.

theorem FirstOrder.Language.Substructure.ext_iff {L : Language} {M : Type w} [L.Structure M] {S T : L.Substructure M} :
S = T ∀ (x : M), x S x T
def FirstOrder.Language.Substructure.copy {L : Language} {M : Type w} [L.Structure M] (S : L.Substructure M) (s : Set M) (hs : s = S) :

Copy a substructure replacing carrier with a set that is equal to it.

Equations
  • S.copy s hs = { carrier := s, fun_mem := }
theorem FirstOrder.Language.Term.realize_mem {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {α : Type u_3} (t : L.Term α) (xs : αM) (h : ∀ (a : α), xs a S) :
realize xs t S
@[simp]
theorem FirstOrder.Language.Substructure.coe_copy {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} (hs : s = S) :
(S.copy s hs) = s
theorem FirstOrder.Language.Substructure.copy_eq {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} (hs : s = S) :
S.copy s hs = S

The substructure M of the structure M.

Equations
@[simp]

The inf of two substructures is their intersection.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.coe_inf {L : Language} {M : Type w} [L.Structure M] (p p' : L.Substructure M) :
(pp') = p p'
@[simp]
theorem FirstOrder.Language.Substructure.mem_inf {L : Language} {M : Type w} [L.Structure M] {p p' : L.Substructure M} {x : M} :
x pp' x p x p'
Equations
@[simp]
theorem FirstOrder.Language.Substructure.coe_sInf {L : Language} {M : Type w} [L.Structure M] (S : Set (L.Substructure M)) :
(sInf S) = sS, s
theorem FirstOrder.Language.Substructure.mem_sInf {L : Language} {M : Type w} [L.Structure M] {S : Set (L.Substructure M)} {x : M} :
x sInf S pS, x p
theorem FirstOrder.Language.Substructure.mem_iInf {L : Language} {M : Type w} [L.Structure M] {ι : Sort u_3} {S : ιL.Substructure M} {x : M} :
x ⨅ (i : ι), S i ∀ (i : ι), x S i
@[simp]
theorem FirstOrder.Language.Substructure.coe_iInf {L : Language} {M : Type w} [L.Structure M] {ι : Sort u_3} {S : ιL.Substructure M} :
(⨅ (i : ι), S i) = ⋂ (i : ι), (S i)

Substructures of a structure form a complete lattice.

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

The L.Substructure generated by a set.

Equations
theorem FirstOrder.Language.Substructure.mem_closure {L : Language} {M : Type w} [L.Structure M] {s : Set M} {x : M} :
x (closure L).toFun s ∀ (S : L.Substructure M), s Sx S
@[simp]

The substructure generated by a set includes the set.

theorem FirstOrder.Language.Substructure.notMem_of_notMem_closure {L : Language} {M : Type w} [L.Structure M] {s : Set M} {P : M} (hP : P(closure L).toFun s) :
Ps
@[deprecated FirstOrder.Language.Substructure.notMem_of_notMem_closure (since := "2025-05-23")]
theorem FirstOrder.Language.Substructure.not_mem_of_not_mem_closure {L : Language} {M : Type w} [L.Structure M] {s : Set M} {P : M} (hP : P(closure L).toFun s) :
Ps

Alias of FirstOrder.Language.Substructure.notMem_of_notMem_closure.

@[simp]
@[simp]
theorem FirstOrder.Language.Substructure.closure_le {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} :
(closure L).toFun s S s S

A substructure S includes closure L s if and only if it includes s.

theorem FirstOrder.Language.Substructure.closure_mono {L : Language} {M : Type w} [L.Structure M] s t : Set M (h : s t) :

Substructure closure of a set is monotone in its argument: if s ⊆ t, then closure L s ≤ closure L t.

theorem FirstOrder.Language.Substructure.closure_eq_of_le {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} (h₁ : s S) (h₂ : S (closure L).toFun s) :
(closure L).toFun s = S
theorem FirstOrder.Language.Substructure.closure_induction {L : Language} {M : Type w} [L.Structure M] {s : Set M} {p : MProp} {x : M} (h : x (closure L).toFun s) (Hs : xs, p x) (Hfun : ∀ {n : } (f : L.Functions n), ClosedUnder f (setOf p)) :
p x

An induction principle for closure membership. If p holds for all elements of s, and is preserved under function symbols, then p holds for all elements of the closure of s.

theorem FirstOrder.Language.Substructure.dense_induction {L : Language} {M : Type w} [L.Structure M] {p : MProp} (x : M) {s : Set M} (hs : (closure L).toFun s = ) (Hs : xs, p x) (Hfun : ∀ {n : } (f : L.Functions n), ClosedUnder f (setOf p)) :
p x

If s is a dense set in a structure M, Substructure.closure L s = ⊤, then in order to prove that some predicate p holds for all x : M it suffices to verify p x for x ∈ s, and verify that p is preserved under function symbols.

closure forms a Galois insertion with the coercion to set.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]

Closure of a substructure S equals S.

theorem FirstOrder.Language.Substructure.closure_iUnion {L : Language} {M : Type w} [L.Structure M] {ι : Sort u_3} (s : ιSet M) :
(closure L).toFun (⋃ (i : ι), s i) = ⨆ (i : ι), (closure L).toFun (s i)
theorem FirstOrder.Language.Substructure.closure_insert {L : Language} {M : Type w} [L.Structure M] (s : Set M) (m : M) :
(closure L).toFun (insert m s) = (closure L).toFun {m}(closure L).toFun s
theorem FirstOrder.Language.Substructure.iSup_eq_closure {L : Language} {M : Type w} [L.Structure M] {ι : Sort u_3} (S : ιL.Substructure M) :
⨆ (i : ι), S i = (closure L).toFun (⋃ (i : ι), (S i))
theorem FirstOrder.Language.Substructure.mem_iSup_of_directed {L : Language} {M : Type w} [L.Structure M] {ι : Type u_3} [ : Nonempty ι] {S : ιL.Substructure M} (hS : Directed (fun (x1 x2 : L.Substructure M) => x1 x2) S) {x : M} :
x ⨆ (i : ι), S i ∃ (i : ι), x S i
theorem FirstOrder.Language.Substructure.mem_sSup_of_directedOn {L : Language} {M : Type w} [L.Structure M] {S : Set (L.Substructure M)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : L.Substructure M) => x1 x2) S) {x : M} :
x sSup S sS, x s

comap and map #

def FirstOrder.Language.Substructure.comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure N) :

The preimage of a substructure along a homomorphism is a substructure.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.coe_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure N) :
(comap φ S) = φ ⁻¹' S
@[simp]
theorem FirstOrder.Language.Substructure.mem_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {S : L.Substructure N} {f : L.Hom M N} {x : M} :
x comap f S f x S
theorem FirstOrder.Language.Substructure.comap_comap {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (S : L.Substructure P) (g : L.Hom N P) (f : L.Hom M N) :
comap f (comap g S) = comap (g.comp f) S
@[simp]
theorem FirstOrder.Language.Substructure.comap_id {L : Language} {P : Type u_2} [L.Structure P] (S : L.Substructure P) :
comap (Hom.id L P) S = S
def FirstOrder.Language.Substructure.map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure M) :

The image of a substructure along a homomorphism is a substructure.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.coe_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure M) :
(map φ S) = φ '' S
@[simp]
theorem FirstOrder.Language.Substructure.mem_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} {S : L.Substructure M} {y : N} :
y map f S xS, f x = y
theorem FirstOrder.Language.Substructure.mem_map_of_mem {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) {S : L.Substructure M} {x : M} (hx : x S) :
f x map f S
theorem FirstOrder.Language.Substructure.apply_coe_mem_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (S : L.Substructure M) (x : S) :
f x map f S
theorem FirstOrder.Language.Substructure.map_map {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (S : L.Substructure M) (g : L.Hom N P) (f : L.Hom M N) :
map g (map f S) = map (g.comp f) S
theorem FirstOrder.Language.Substructure.map_le_iff_le_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} {S : L.Substructure M} {T : L.Substructure N} :
map f S T S comap f T
theorem FirstOrder.Language.Substructure.map_le_of_le_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S : L.Substructure M) {T : L.Substructure N} {f : L.Hom M N} :
S comap f Tmap f S T
theorem FirstOrder.Language.Substructure.le_comap_of_map_le {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S : L.Substructure M) {T : L.Substructure N} {f : L.Hom M N} :
map f S TS comap f T
theorem FirstOrder.Language.Substructure.le_comap_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S : L.Substructure M) {f : L.Hom M N} :
S comap f (map f S)
theorem FirstOrder.Language.Substructure.map_comap_le {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {S : L.Substructure N} {f : L.Hom M N} :
map f (comap f S) S
theorem FirstOrder.Language.Substructure.monotone_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} :
theorem FirstOrder.Language.Substructure.monotone_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} :
@[simp]
theorem FirstOrder.Language.Substructure.map_comap_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S : L.Substructure M) {f : L.Hom M N} :
map f (comap f (map f S)) = map f S
@[simp]
theorem FirstOrder.Language.Substructure.comap_map_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {S : L.Substructure N} {f : L.Hom M N} :
comap f (map f (comap f S)) = comap f S
theorem FirstOrder.Language.Substructure.map_sup {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S T : L.Substructure M) (f : L.Hom M N) :
map f (ST) = map f Smap f T
theorem FirstOrder.Language.Substructure.map_iSup {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Sort u_3} (f : L.Hom M N) (s : ιL.Substructure M) :
map f (⨆ (i : ι), s i) = ⨆ (i : ι), map f (s i)
theorem FirstOrder.Language.Substructure.comap_inf {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S T : L.Substructure N) (f : L.Hom M N) :
comap f (ST) = comap f Scomap f T
theorem FirstOrder.Language.Substructure.comap_iInf {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Sort u_3} (f : L.Hom M N) (s : ιL.Substructure N) :
comap f (⨅ (i : ι), s i) = ⨅ (i : ι), comap f (s i)
@[simp]
theorem FirstOrder.Language.Substructure.map_bot {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
@[simp]
theorem FirstOrder.Language.Substructure.comap_top {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
@[simp]
theorem FirstOrder.Language.Substructure.map_id {L : Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
map (Hom.id L M) S = S
theorem FirstOrder.Language.Substructure.map_closure {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (s : Set M) :
map f ((closure L).toFun s) = (closure L).toFun (f '' s)
@[simp]
theorem FirstOrder.Language.Substructure.closure_image {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {s : Set M} (f : L.Hom M N) :
(closure L).toFun (f '' s) = map f ((closure L).toFun s)
theorem FirstOrder.Language.Substructure.comap_map_eq_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Injective f) (S : L.Substructure M) :
comap f (map f S) = S
theorem FirstOrder.Language.Substructure.comap_inf_map_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Injective f) (S T : L.Substructure M) :
comap f (map f Smap f T) = ST
theorem FirstOrder.Language.Substructure.comap_iInf_map_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Type u_3} {f : L.Hom M N} (hf : Function.Injective f) (S : ιL.Substructure M) :
comap f (⨅ (i : ι), map f (S i)) = ⨅ (i : ι), S i
theorem FirstOrder.Language.Substructure.comap_sup_map_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Injective f) (S T : L.Substructure M) :
comap f (map f Smap f T) = ST
theorem FirstOrder.Language.Substructure.comap_iSup_map_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Type u_3} {f : L.Hom M N} (hf : Function.Injective f) (S : ιL.Substructure M) :
comap f (⨆ (i : ι), map f (S i)) = ⨆ (i : ι), S i
theorem FirstOrder.Language.Substructure.map_le_map_iff_of_injective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Injective f) {S T : L.Substructure M} :
map f S map f T S T
def FirstOrder.Language.Substructure.giMapComap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Surjective f) :

map f and comap f form a GaloisInsertion when f is surjective.

Equations
theorem FirstOrder.Language.Substructure.map_comap_eq_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Surjective f) (S : L.Substructure N) :
map f (comap f S) = S
theorem FirstOrder.Language.Substructure.map_inf_comap_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Surjective f) (S T : L.Substructure N) :
map f (comap f Scomap f T) = ST
theorem FirstOrder.Language.Substructure.map_iInf_comap_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Type u_3} {f : L.Hom M N} (hf : Function.Surjective f) (S : ιL.Substructure N) :
map f (⨅ (i : ι), comap f (S i)) = ⨅ (i : ι), S i
theorem FirstOrder.Language.Substructure.map_sup_comap_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Surjective f) (S T : L.Substructure N) :
map f (comap f Scomap f T) = ST
theorem FirstOrder.Language.Substructure.map_iSup_comap_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {ι : Type u_3} {f : L.Hom M N} (hf : Function.Surjective f) (S : ιL.Substructure N) :
map f (⨆ (i : ι), comap f (S i)) = ⨆ (i : ι), S i
theorem FirstOrder.Language.Substructure.comap_le_comap_iff_of_surjective {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Surjective f) {S T : L.Substructure N} :
comap f S comap f T S T
Equations
  • One or more equations did not get rendered due to their size.

The natural embedding of an L.Substructure of M into M.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.subtype_apply {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {x : S} :
S.subtype x = x
@[deprecated FirstOrder.Language.Substructure.coe_subtype (since := "2025-02-18")]

Alias of FirstOrder.Language.Substructure.coe_subtype.

The equivalence between the maximal substructure of a structure and the structure itself.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.realize_boundedFormula_top {L : Language} {M : Type w} [L.Structure M] {α : Type u_3} {n : } {φ : L.BoundedFormula α n} {v : α} {xs : Fin n} :
@[simp]
theorem FirstOrder.Language.Substructure.realize_formula_top {L : Language} {M : Type w} [L.Structure M] {α : Type u_3} {φ : L.Formula α} {v : α} :
theorem FirstOrder.Language.Substructure.closure_induction' {L : Language} {M : Type w} [L.Structure M] (s : Set M) {p : (x : M) → x (closure L).toFun sProp} (Hs : ∀ (x : M) (h : x s), p x ) (Hfun : ∀ {n : } (f : L.Functions n), ClosedUnder f {x : M | ∃ (hx : x (closure L).toFun s), p x hx}) {x : M} (hx : x (closure L).toFun s) :
p x hx

A dependent version of Substructure.closure_induction.

Reduces the language of a substructure along a language hom.

Equations
@[simp]
theorem FirstOrder.Language.LHom.mem_substructureReduct {L : Language} {M : Type w} [L.Structure M] {L' : Language} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] {x : M} {S : L'.Substructure M} :
@[simp]
theorem FirstOrder.Language.LHom.coe_substructureReduct {L : Language} {M : Type w} [L.Structure M] {L' : Language} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] {S : L'.Substructure M} :
(φ.substructureReduct S) = S
def FirstOrder.Language.Substructure.withConstants {L : Language} {M : Type w} [L.Structure M] (S : L.Substructure M) {A : Set M} (h : A S) :

Turns any substructure containing a constant set A into a L[[A]]-substructure.

Equations
@[simp]
theorem FirstOrder.Language.Substructure.mem_withConstants {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {A : Set M} (h : A S) {x : M} :
@[simp]
theorem FirstOrder.Language.Substructure.coe_withConstants {L : Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {A : Set M} (h : A S) :
(S.withConstants h) = S
def FirstOrder.Language.Hom.domRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (p : L.Substructure M) :
L.Hom (↥p) N

The restriction of a first-order hom to a substructure s ⊆ M gives a hom s → N.

Equations
@[simp]
theorem FirstOrder.Language.Hom.domRestrict_toFun {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (p : L.Substructure M) (a✝ : p) :
(f.domRestrict p) a✝ = f a✝
def FirstOrder.Language.Hom.codRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (p : L.Substructure N) (f : L.Hom M N) (h : ∀ (c : M), f c p) :
L.Hom M p

A first-order hom f : M → N whose values lie in a substructure p ⊆ N can be restricted to a hom M → p.

Equations
@[simp]
theorem FirstOrder.Language.Hom.codRestrict_toFun_coe {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (p : L.Substructure N) (f : L.Hom M N) (h : ∀ (c : M), f c p) (c : M) :
((codRestrict p f h) c) = f c
@[simp]
theorem FirstOrder.Language.Hom.comp_codRestrict {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (f : L.Hom M N) (g : L.Hom N P) (p : L.Substructure P) (h : ∀ (b : N), g b p) :
(codRestrict p g h).comp f = codRestrict p (g.comp f)
@[simp]
theorem FirstOrder.Language.Hom.subtype_comp_codRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (p : L.Substructure N) (h : ∀ (b : M), f b p) :
def FirstOrder.Language.Hom.range {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :

The range of a first-order hom f : M → N is a submodule of N. See Note [range copy pattern].

Equations
theorem FirstOrder.Language.Hom.range_coe {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
f.range = Set.range f
@[simp]
theorem FirstOrder.Language.Hom.mem_range {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} {x : N} :
x f.range ∃ (y : M), f y = x
theorem FirstOrder.Language.Hom.range_eq_map {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
theorem FirstOrder.Language.Hom.mem_range_self {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (x : M) :
f x f.range
@[simp]
theorem FirstOrder.Language.Hom.range_comp {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (f : L.Hom M N) (g : L.Hom N P) :
theorem FirstOrder.Language.Hom.range_comp_le_range {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (f : L.Hom M N) (g : L.Hom N P) :
theorem FirstOrder.Language.Hom.range_eq_top {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} :
theorem FirstOrder.Language.Hom.range_le_iff_comap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} {p : L.Substructure N} :
theorem FirstOrder.Language.Hom.map_le_range {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} {p : L.Substructure M} :
def FirstOrder.Language.Hom.eqLocus {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f g : L.Hom M N) :

The substructure of elements x : M such that f x = g x

Equations
theorem FirstOrder.Language.Hom.eqOn_closure {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f g : L.Hom M N} {s : Set M} (h : Set.EqOn (⇑f) (⇑g) s) :
Set.EqOn f g ((Substructure.closure L).toFun s)

If two L.Homs are equal on a set, then they are equal on its substructure closure.

theorem FirstOrder.Language.Hom.eq_of_eqOn_top {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f g : L.Hom M N} (h : Set.EqOn f g ) :
f = g
theorem FirstOrder.Language.Hom.eq_of_eqOn_dense {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {s : Set M} (hs : (Substructure.closure L).toFun s = ) {f g : L.Hom M N} (h : Set.EqOn (⇑f) (⇑g) s) :
f = g
def FirstOrder.Language.Embedding.domRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (p : L.Substructure M) :
L.Embedding (↥p) N

The restriction of a first-order embedding to a substructure s ⊆ M gives an embedding s → N.

Equations
@[simp]
theorem FirstOrder.Language.Embedding.domRestrict_apply {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (p : L.Substructure M) (x : p) :
(f.domRestrict p) x = f x
def FirstOrder.Language.Embedding.codRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (p : L.Substructure N) (f : L.Embedding M N) (h : ∀ (c : M), f c p) :
L.Embedding M p

A first-order embedding f : M → N whose values lie in a substructure p ⊆ N can be restricted to an embedding M → p.

Equations
@[simp]
theorem FirstOrder.Language.Embedding.codRestrict_apply {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (p : L.Substructure N) (f : L.Embedding M N) {h : ∀ (c : M), f c p} (x : M) :
((codRestrict p f h) x) = f x
@[simp]
theorem FirstOrder.Language.Embedding.codRestrict_apply' {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (p : L.Substructure N) (f : L.Embedding M N) {h : ∀ (c : M), f c p} (x : M) :
(codRestrict p f h) x = f x,
@[simp]
theorem FirstOrder.Language.Embedding.comp_codRestrict {L : Language} {M : Type w} {N : Type u_1} {P : Type u_2} [L.Structure M] [L.Structure N] [L.Structure P] (f : L.Embedding M N) (g : L.Embedding N P) (p : L.Substructure P) (h : ∀ (b : N), g b p) :
(codRestrict p g h).comp f = codRestrict p (g.comp f)
@[simp]
theorem FirstOrder.Language.Embedding.subtype_comp_codRestrict {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (p : L.Substructure N) (h : ∀ (b : M), f b p) :
noncomputable def FirstOrder.Language.Embedding.substructureEquivMap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (s : L.Substructure M) :
L.Equiv s (Substructure.map f.toHom s)

The equivalence between a substructure s and its image s.map f.toHom, where f is an embedding.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem FirstOrder.Language.Embedding.substructureEquivMap_apply {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (p : L.Substructure M) (x : p) :
((f.substructureEquivMap p) x) = f x
noncomputable def FirstOrder.Language.Embedding.equivRange {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) :
L.Equiv M f.toHom.range

The equivalence between the domain and the range of an embedding f.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem FirstOrder.Language.Embedding.equivRange_toEquiv_apply {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (a : M) :
@[simp]
theorem FirstOrder.Language.Embedding.equivRange_apply {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (x : M) :
(f.equivRange x) = f x
theorem FirstOrder.Language.Equiv.toHom_range {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Equiv M N) :
def FirstOrder.Language.Substructure.inclusion {L : Language} {M : Type w} [L.Structure M] {S T : L.Substructure M} (h : S T) :
L.Embedding S T

The embedding associated to an inclusion of substructures.

Equations
@[simp]