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 : FirstOrder.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
@[simp]
theorem FirstOrder.Language.closedUnder_univ (L : FirstOrder.Language) {M : Type w} [L.Structure M] {n : } (f : L.Functions n) :
theorem FirstOrder.Language.ClosedUnder.inter {L : FirstOrder.Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {s t : Set M} (hs : FirstOrder.Language.ClosedUnder f s) (ht : FirstOrder.Language.ClosedUnder f t) :
theorem FirstOrder.Language.ClosedUnder.inf {L : FirstOrder.Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {s t : Set M} (hs : FirstOrder.Language.ClosedUnder f s) (ht : FirstOrder.Language.ClosedUnder f t) :
theorem FirstOrder.Language.ClosedUnder.sInf {L : FirstOrder.Language} {M : Type w} [L.Structure M] {n : } {f : L.Functions n} {S : Set (Set M)} (hS : sS, FirstOrder.Language.ClosedUnder f s) :
structure FirstOrder.Language.Substructure (L : FirstOrder.Language) (M : Type w) [L.Structure M] :

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

instance FirstOrder.Language.Substructure.instSetLike {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
SetLike (L.Substructure M) M
Equations
  • FirstOrder.Language.Substructure.instSetLike = { coe := FirstOrder.Language.Substructure.carrier, coe_injective' := }
def FirstOrder.Language.Substructure.Simps.coe {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
Set M

See Note [custom simps projection]

Equations
@[simp]
theorem FirstOrder.Language.Substructure.mem_carrier {L : FirstOrder.Language} {M : Type w} [L.Structure M] {s : L.Substructure M} {x : M} :
x s x s
theorem FirstOrder.Language.Substructure.ext {L : FirstOrder.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.

def FirstOrder.Language.Substructure.copy {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) (s : Set M) (hs : s = S) :
L.Substructure M

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 : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {α : Type u_3} (t : L.Term α) (xs : αM) (h : ∀ (a : α), xs a S) :
@[simp]
theorem FirstOrder.Language.Substructure.coe_copy {L : FirstOrder.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 : FirstOrder.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.constants_mem {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} (c : L.Constants) :
c S
instance FirstOrder.Language.Substructure.instTop {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
Top (L.Substructure M)

The substructure M of the structure M.

Equations
  • FirstOrder.Language.Substructure.instTop = { top := { carrier := Set.univ, fun_mem := } }
instance FirstOrder.Language.Substructure.instInhabited {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
Inhabited (L.Substructure M)
Equations
  • FirstOrder.Language.Substructure.instInhabited = { default := }
@[simp]
theorem FirstOrder.Language.Substructure.mem_top {L : FirstOrder.Language} {M : Type w} [L.Structure M] (x : M) :
@[simp]
theorem FirstOrder.Language.Substructure.coe_top {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
= Set.univ
instance FirstOrder.Language.Substructure.instInf {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
Min (L.Substructure M)

The inf of two substructures is their intersection.

Equations
  • FirstOrder.Language.Substructure.instInf = { min := fun (S₁ S₂ : L.Substructure M) => { carrier := S₁ S₂, fun_mem := } }
@[simp]
theorem FirstOrder.Language.Substructure.coe_inf {L : FirstOrder.Language} {M : Type w} [L.Structure M] (p p' : L.Substructure M) :
(p p') = p p'
@[simp]
theorem FirstOrder.Language.Substructure.mem_inf {L : FirstOrder.Language} {M : Type w} [L.Structure M] {p p' : L.Substructure M} {x : M} :
x p p' x p x p'
instance FirstOrder.Language.Substructure.instInfSet {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
InfSet (L.Substructure M)
Equations
  • FirstOrder.Language.Substructure.instInfSet = { sInf := fun (s : Set (L.Substructure M)) => { carrier := ts, t, fun_mem := } }
@[simp]
theorem FirstOrder.Language.Substructure.coe_sInf {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : Set (L.Substructure M)) :
(sInf S) = sS, s
theorem FirstOrder.Language.Substructure.mem_sInf {L : FirstOrder.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 : FirstOrder.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 : FirstOrder.Language} {M : Type w} [L.Structure M] {ι : Sort u_3} {S : ιL.Substructure M} :
(⨅ (i : ι), S i) = ⋂ (i : ι), (S i)
instance FirstOrder.Language.Substructure.instCompleteLattice {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
CompleteLattice (L.Substructure M)

Substructures of a structure form a complete lattice.

Equations
  • FirstOrder.Language.Substructure.instCompleteLattice = CompleteLattice.mk
def FirstOrder.Language.Substructure.closure (L : FirstOrder.Language) {M : Type w} [L.Structure M] :
LowerAdjoint SetLike.coe

The L.Substructure generated by a set.

Equations
theorem FirstOrder.Language.Substructure.mem_closure {L : FirstOrder.Language} {M : Type w} [L.Structure M] {s : Set M} {x : M} :
x (FirstOrder.Language.Substructure.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.not_mem_of_not_mem_closure {L : FirstOrder.Language} {M : Type w} [L.Structure M] {s : Set M} {P : M} (hP : P(FirstOrder.Language.Substructure.closure L).toFun s) :
Ps
@[simp]
theorem FirstOrder.Language.Substructure.closed {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
@[simp]
theorem FirstOrder.Language.Substructure.closure_le {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} :

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

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 : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {s : Set M} (h₁ : s S) (h₂ : S (FirstOrder.Language.Substructure.closure L).toFun s) :
theorem FirstOrder.Language.Substructure.mem_closure_iff_exists_term {L : FirstOrder.Language} {M : Type w} [L.Structure M] {s : Set M} {x : M} :
x (FirstOrder.Language.Substructure.closure L).toFun s ∃ (t : L.Term s), FirstOrder.Language.Term.realize Subtype.val t = x
@[simp]
theorem FirstOrder.Language.Substructure.closure_eq_of_isRelational (L : FirstOrder.Language) {M : Type w} [L.Structure M] [L.IsRelational] (s : Set M) :
@[simp]
theorem FirstOrder.Language.Substructure.mem_closure_iff_of_isRelational (L : FirstOrder.Language) {M : Type w} [L.Structure M] [L.IsRelational] (s : Set M) (m : M) :
theorem Set.Countable.substructure_closure (L : FirstOrder.Language) {M : Type w} [L.Structure M] {s : Set M} [Countable ((l : ) × L.Functions l)] (h : s.Countable) :
theorem FirstOrder.Language.Substructure.closure_induction {L : FirstOrder.Language} {M : Type w} [L.Structure M] {s : Set M} {p : MProp} {x : M} (h : x (FirstOrder.Language.Substructure.closure L).toFun s) (Hs : xs, p x) (Hfun : ∀ {n : } (f : L.Functions n), FirstOrder.Language.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 : FirstOrder.Language} {M : Type w} [L.Structure M] {p : MProp} (x : M) {s : Set M} (hs : (FirstOrder.Language.Substructure.closure L).toFun s = ) (Hs : xs, p x) (Hfun : ∀ {n : } (f : L.Functions n), FirstOrder.Language.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]
theorem FirstOrder.Language.Substructure.closure_eq {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :

Closure of a substructure S equals S.

theorem FirstOrder.Language.Substructure.closure_iUnion {L : FirstOrder.Language} {M : Type w} [L.Structure M] {ι : Sort u_3} (s : ιSet M) :
(FirstOrder.Language.Substructure.closure L).toFun (⋃ (i : ι), s i) = ⨆ (i : ι), (FirstOrder.Language.Substructure.closure L).toFun (s i)
Equations
  • =
theorem FirstOrder.Language.Substructure.iSup_eq_closure {L : FirstOrder.Language} {M : Type w} [L.Structure M] {ι : Sort u_3} (S : ιL.Substructure M) :
⨆ (i : ι), S i = (FirstOrder.Language.Substructure.closure L).toFun (⋃ (i : ι), (S i))
theorem FirstOrder.Language.Substructure.mem_iSup_of_directed {L : FirstOrder.Language} {M : Type w} [L.Structure M] {ι : Type u_3} [hι : 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 : FirstOrder.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
Equations
  • =

comap and map #

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

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

Equations
@[simp]
theorem FirstOrder.Language.Substructure.comap_coe {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure N) :
@[simp]
theorem FirstOrder.Language.Substructure.mem_comap {L : FirstOrder.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} :
theorem FirstOrder.Language.Substructure.comap_comap {L : FirstOrder.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) :
def FirstOrder.Language.Substructure.map {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure M) :
L.Substructure N

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

Equations
@[simp]
theorem FirstOrder.Language.Substructure.map_coe {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (φ : L.Hom M N) (S : L.Substructure M) :
@[simp]
theorem FirstOrder.Language.Substructure.mem_map {L : FirstOrder.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} :
theorem FirstOrder.Language.Substructure.mem_map_of_mem {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.apply_coe_mem_map {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.map_map {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.map_le_iff_le_comap {L : FirstOrder.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} :
theorem FirstOrder.Language.Substructure.map_le_of_le_comap {L : FirstOrder.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} :
theorem FirstOrder.Language.Substructure.le_comap_of_map_le {L : FirstOrder.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} :
theorem FirstOrder.Language.Substructure.le_comap_map {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S : L.Substructure M) {f : L.Hom M N} :
theorem FirstOrder.Language.Substructure.map_comap_le {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {S : L.Substructure N} {f : L.Hom M N} :
theorem FirstOrder.Language.Substructure.monotone_map {L : FirstOrder.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 : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} :
theorem FirstOrder.Language.Substructure.map_sup {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S T : L.Substructure M) (f : L.Hom M N) :
theorem FirstOrder.Language.Substructure.map_iSup {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.comap_inf {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (S T : L.Substructure N) (f : L.Hom M N) :
theorem FirstOrder.Language.Substructure.comap_iInf {L : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Substructure.map_bot {L : FirstOrder.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 : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
theorem FirstOrder.Language.Substructure.map_closure {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) (s : Set M) :
@[simp]
theorem FirstOrder.Language.Substructure.closure_image {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {s : Set M} (f : L.Hom M N) :

map f and comap f form a GaloisCoinsertion when f is injective.

Equations
theorem FirstOrder.Language.Substructure.comap_map_eq_of_injective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.comap_iInf_map_of_injective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.comap_iSup_map_of_injective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.map_le_map_iff_of_injective {L : FirstOrder.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 and comap f form a GaloisInsertion when f is surjective.

Equations
theorem FirstOrder.Language.Substructure.map_comap_eq_of_surjective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.map_iInf_comap_of_surjective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.map_iSup_comap_of_surjective {L : FirstOrder.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) :
theorem FirstOrder.Language.Substructure.comap_le_comap_iff_of_surjective {L : FirstOrder.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} :
instance FirstOrder.Language.Substructure.inducedStructure {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} :
L.Structure S
Equations
  • One or more equations did not get rendered due to their size.
def FirstOrder.Language.Substructure.subtype {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
L.Embedding (↥S) M

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

Equations
  • S.subtype = { toFun := Subtype.val, inj' := , map_fun' := , map_rel' := }
@[simp]
theorem FirstOrder.Language.Substructure.coeSubtype {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
S.subtype = Subtype.val
def FirstOrder.Language.Substructure.topEquiv {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
L.Equiv (↥) M

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

Equations
  • FirstOrder.Language.Substructure.topEquiv = { toFun := .subtype, invFun := fun (m : M) => m, , left_inv := , right_inv := , map_fun' := , map_rel' := }
@[simp]
theorem FirstOrder.Language.Substructure.coe_topEquiv {L : FirstOrder.Language} {M : Type w} [L.Structure M] :
FirstOrder.Language.Substructure.topEquiv = Subtype.val
@[simp]
theorem FirstOrder.Language.Substructure.realize_boundedFormula_top {L : FirstOrder.Language} {M : Type w} [L.Structure M] {α : Type u_3} {n : } {φ : L.BoundedFormula α n} {v : α} {xs : Fin n} :
φ.Realize v xs φ.Realize (Subtype.val v) (Subtype.val xs)
@[simp]
theorem FirstOrder.Language.Substructure.realize_formula_top {L : FirstOrder.Language} {M : Type w} [L.Structure M] {α : Type u_3} {φ : L.Formula α} {v : α} :
φ.Realize v φ.Realize (Subtype.val v)
theorem FirstOrder.Language.Substructure.closure_induction' {L : FirstOrder.Language} {M : Type w} [L.Structure M] (s : Set M) {p : (x : M) → x (FirstOrder.Language.Substructure.closure L).toFun sProp} (Hs : ∀ (x : M) (h : x s), p x ) (Hfun : ∀ {n : } (f : L.Functions n), FirstOrder.Language.ClosedUnder f {x : M | ∃ (hx : x (FirstOrder.Language.Substructure.closure L).toFun s), p x hx}) {x : M} (hx : x (FirstOrder.Language.Substructure.closure L).toFun s) :
p x hx

A dependent version of Substructure.closure_induction.

def FirstOrder.Language.LHom.substructureReduct {L : FirstOrder.Language} {M : Type w} [L.Structure M] {L' : FirstOrder.Language} [L'.Structure M] (φ : L →ᴸ L') [φ.IsExpansionOn M] :
L'.Substructure M ↪o L.Substructure M

Reduces the language of a substructure along a language hom.

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

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

Equations
  • S.withConstants h = { carrier := S, fun_mem := }
@[simp]
theorem FirstOrder.Language.Substructure.mem_withConstants {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {A : Set M} (h : A S) {x : M} :
x S.withConstants h x S
@[simp]
theorem FirstOrder.Language.Substructure.coe_withConstants {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {A : Set M} (h : A S) :
(S.withConstants h) = S
@[simp]
theorem FirstOrder.Language.Substructure.reduct_withConstants {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S : L.Substructure M} {A : Set M} (h : A S) :
(L.lhomWithConstants A).substructureReduct (S.withConstants h) = S
theorem FirstOrder.Language.Substructure.subset_closure_withConstants {L : FirstOrder.Language} {M : Type w} [L.Structure M] {A s : Set M} :
A ((FirstOrder.Language.Substructure.closure (L.withConstants A)).toFun s)
theorem FirstOrder.Language.Substructure.closure_withConstants_eq {L : FirstOrder.Language} {M : Type w} [L.Structure M] {A s : Set M} :
(FirstOrder.Language.Substructure.closure (L.withConstants A)).toFun s = ((FirstOrder.Language.Substructure.closure L).toFun (A s)).withConstants
def FirstOrder.Language.Hom.domRestrict {L : FirstOrder.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
  • f.domRestrict p = f.comp p.subtype.toHom
@[simp]
theorem FirstOrder.Language.Hom.domRestrict_toFun {L : FirstOrder.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 : FirstOrder.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 : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Hom.comp_codRestrict {L : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Hom.subtype_comp_codRestrict {L : FirstOrder.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) :
p.subtype.toHom.comp (FirstOrder.Language.Hom.codRestrict p f h) = f
def FirstOrder.Language.Hom.range {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Hom M N) :
L.Substructure 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 : FirstOrder.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 : FirstOrder.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 : FirstOrder.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 : FirstOrder.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 : FirstOrder.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) :
(g.comp f).range = FirstOrder.Language.Substructure.map g f.range
theorem FirstOrder.Language.Hom.range_comp_le_range {L : FirstOrder.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) :
(g.comp f).range g.range
theorem FirstOrder.Language.Hom.range_eq_top {L : FirstOrder.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 : FirstOrder.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 : FirstOrder.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 : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f g : L.Hom M N) :
L.Substructure M

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

Equations
  • f.eqLocus g = { carrier := {x : M | f x = g x}, fun_mem := }
theorem FirstOrder.Language.Hom.eqOn_closure {L : FirstOrder.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) :

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 : FirstOrder.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 : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {s : Set M} (hs : (FirstOrder.Language.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 : FirstOrder.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
  • f.domRestrict p = f.comp p.subtype
@[simp]
theorem FirstOrder.Language.Embedding.domRestrict_apply {L : FirstOrder.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 : FirstOrder.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 : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Embedding.codRestrict_apply' {L : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Embedding.comp_codRestrict {L : FirstOrder.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) :
@[simp]
theorem FirstOrder.Language.Embedding.subtype_comp_codRestrict {L : FirstOrder.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 : FirstOrder.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 (FirstOrder.Language.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 : FirstOrder.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
@[simp]
theorem FirstOrder.Language.Embedding.subtype_substructureEquivMap {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (s : L.Substructure M) :
(FirstOrder.Language.Substructure.map f.toHom s).subtype.comp (f.substructureEquivMap s).toEmbedding = f.comp s.subtype
noncomputable def FirstOrder.Language.Embedding.equivRange {L : FirstOrder.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 : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) (a : M) :
f.equivRange.toEquiv a = (FirstOrder.Language.Embedding.codRestrict f.toHom.range f ) a
@[simp]
theorem FirstOrder.Language.Embedding.equivRange_apply {L : FirstOrder.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
@[simp]
theorem FirstOrder.Language.Embedding.subtype_equivRange {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Embedding M N) :
f.toHom.range.subtype.comp f.equivRange.toEmbedding = f
theorem FirstOrder.Language.Equiv.toHom_range {L : FirstOrder.Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] (f : L.Equiv M N) :
f.toHom.range =
def FirstOrder.Language.Substructure.inclusion {L : FirstOrder.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]
theorem FirstOrder.Language.Substructure.coe_inclusion {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S T : L.Substructure M} (h : S T) :
theorem FirstOrder.Language.Substructure.range_subtype {L : FirstOrder.Language} {M : Type w} [L.Structure M] (S : L.Substructure M) :
S.subtype.toHom.range = S
@[simp]
theorem FirstOrder.Language.Substructure.subtype_comp_inclusion {L : FirstOrder.Language} {M : Type w} [L.Structure M] {S T : L.Substructure M} (h : S T) :
T.subtype.comp (FirstOrder.Language.Substructure.inclusion h) = S.subtype