First-Order Substructures #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4. This file defines substructures of first-order structures in a similar manner to the various substructures appearing in the algebra library.
Main Definitions #
- A
first_order.language.substructureis defined so thatL.substructure Mis the type of all substructures of theL-structureM. first_order.language.substructure.closureis defined so that ifs : set M,closure L sis the least substructure ofMcontainings.first_order.language.substructure.comapis defined so thats.comap fis the preimage of the substructuresunder the homomorphismf, as a substructure.first_order.language.substructure.mapis defined so thats.map fis the image of the substructuresunder the homomorphismf, as a substructure.first_order.language.hom.rangeis defined so thatf.mapis the range of the the homomorphismf, as a substructure.first_order.language.hom.dom_restrictandfirst_order.language.hom.cod_restrictrestrict the domain and codomain respectively of first-order homomorphisms to substructures.first_order.language.embedding.dom_restrictandfirst_order.language.embedding.cod_restrictrestrict the domain and codomain respectively of first-order embeddings to substructures.first_order.language.substructure.inclusionis the inclusion embedding between substructures.
Main Results #
L.substructure Mforms acomplete_lattice.
Indicates that a set in a given structure is a closed under a function symbol.
- carrier : set M
- fun_mem : ∀ {n : ℕ} (f : L.functions n), first_order.language.closed_under f self.carrier
A substructure of a structure M is a set closed under application of function symbols.
Instances for first_order.language.substructure
- first_order.language.substructure.has_sizeof_inst
- first_order.language.substructure.set_like
- first_order.language.substructure.has_top
- first_order.language.substructure.inhabited
- first_order.language.substructure.has_inf
- first_order.language.substructure.has_Inf
- first_order.language.substructure.complete_lattice
- first_order.language.elementary_substructure.first_order.language.substructure.has_coe
Equations
See Note [custom simps projection]
Equations
Two substructures are equal if they have the same elements.
Copy a substructure replacing carrier with a set that is equal to it.
The substructure M of the structure M.
Equations
The inf of two substructures is their intersection.
Equations
- first_order.language.substructure.has_Inf = {Inf := λ (s : set (L.substructure M)), {carrier := ⋂ (t : L.substructure M) (H : t ∈ s), ↑t, fun_mem := _}}
Substructures of a structure form a complete lattice.
Equations
- first_order.language.substructure.complete_lattice = {sup := complete_lattice.sup (complete_lattice_of_Inf (L.substructure M) first_order.language.substructure.complete_lattice._proof_1), le := has_le.le (preorder.to_has_le (L.substructure M)), lt := has_lt.lt (preorder.to_has_lt (L.substructure M)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_sup_left := _, le_sup_right := _, sup_le := _, inf := has_inf.inf first_order.language.substructure.has_inf, inf_le_left := _, inf_le_right := _, le_inf := _, Sup := complete_lattice.Sup (complete_lattice_of_Inf (L.substructure M) first_order.language.substructure.complete_lattice._proof_1), le_Sup := _, Sup_le := _, Inf := has_Inf.Inf first_order.language.substructure.has_Inf, Inf_le := _, le_Inf := _, top := ⊤, bot := complete_lattice.bot (complete_lattice_of_Inf (L.substructure M) first_order.language.substructure.complete_lattice._proof_1), le_top := _, bot_le := _}
The L.substructure generated by a set.
Equations
- first_order.language.substructure.closure L = {to_fun := λ (s : set M), has_Inf.Inf {S : L.substructure M | s ⊆ ↑S}, gc' := _}
The substructure generated by a set includes the set.
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.
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.
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
- first_order.language.substructure.gi L M = {choice := λ (s : set M) (_x : ↑(⇑(first_order.language.substructure.closure L) s) ≤ s), ⇑(first_order.language.substructure.closure L) s, gc := _, le_l_u := _, choice_eq := _}
Closure of a substructure S equals S.
comap and map #
The preimage of a substructure along a homomorphism is a substructure.
The image of a substructure along a homomorphism is a substructure.
map f and comap f form a galois_coinsertion when f is injective.
Equations
map f and comap f form a galois_insertion when f is surjective.
Equations
Equations
- first_order.language.substructure.induced_Structure = {fun_map := λ (n : ℕ) (f : L.functions n) (x : fin n → ↥S), ⟨first_order.language.Structure.fun_map f (λ (i : fin n), ↑(x i)), _⟩, rel_map := λ (n : ℕ) (r : L.relations n) (x : fin n → ↥S), first_order.language.Structure.rel_map r (λ (i : fin n), ↑(x i))}
The natural embedding of an L.substructure of M into M.
The equivalence between the maximal substructure of a structure and the structure itself.
A dependent version of substructure.closure_induction.
Reduces the language of a substructure along a language hom.
Equations
- φ.substructure_reduct = {to_embedding := {to_fun := λ (S : L'.substructure M), {carrier := ↑S, fun_mem := _}, inj' := _}, map_rel_iff' := _}
Turns any substructure containing a constant set A into a L[[A]]-substructure.
The restriction of a first-order hom to a substructure s ⊆ M gives a hom s → N.
Equations
- f.dom_restrict p = f.comp p.subtype.to_hom
A first-order hom f : M → N whose values lie in a substructure p ⊆ N can be restricted to a
hom M → p.
The range of a first-order hom f : M → N is a submodule of N.
See Note [range copy pattern].
The restriction of a first-order embedding to a substructure s ⊆ M gives an embedding s → N.
Equations
- f.dom_restrict p = f.comp p.subtype
A first-order embedding f : M → N whose values lie in a substructure p ⊆ N can be restricted
to an embedding M → p.
Equations
- first_order.language.embedding.cod_restrict p f h = {to_embedding := {to_fun := ⇑(first_order.language.hom.cod_restrict p f.to_hom h), inj' := _}, map_fun' := _, map_rel' := _}
The equivalence between a substructure s and its image s.map f.to_hom, where f is an
embedding.
Equations
- f.substructure_equiv_map s = {to_equiv := {to_fun := ⇑(first_order.language.embedding.cod_restrict (first_order.language.substructure.map f.to_hom s) (f.dom_restrict s) _), inv_fun := λ (n : ↥(first_order.language.substructure.map f.to_hom s)), ⟨classical.some _, _⟩, left_inv := _, right_inv := _}, map_fun' := _, map_rel' := _}
The equivalence between the domain and the range of an embedding f.
The embedding associated to an inclusion of substructures.