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
    Instances For
      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.

      Instances For

        See Note [custom simps projection]

        Equations
          Instances For
            @[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
              Instances For
                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'
                    @[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

                      The L.Substructure generated by a set.

                      Equations
                        Instances For
                          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
                            Instances For
                              @[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
                                Instances For
                                  @[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
                                    Instances For
                                      @[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)
                                      def FirstOrder.Language.Substructure.gciMapComap {L : Language} {M : Type w} {N : Type u_1} [L.Structure M] [L.Structure N] {f : L.Hom M N} (hf : Function.Injective f) :

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

                                      Equations
                                        Instances For
                                          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
                                            Instances For
                                              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

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

                                              Equations
                                                Instances For
                                                  @[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
                                                    Instances For
                                                      @[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
                                                        Instances For
                                                          @[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
                                                            Instances For
                                                              @[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
                                                                Instances For
                                                                  @[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
                                                                    Instances For
                                                                      @[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
                                                                        Instances For
                                                                          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
                                                                            Instances For
                                                                              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
                                                                                Instances For
                                                                                  @[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
                                                                                    Instances For
                                                                                      @[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
                                                                                        Instances For
                                                                                          @[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
                                                                                            Instances For
                                                                                              @[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
                                                                                                Instances For
                                                                                                  @[simp]