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 #
- A
FirstOrder.Language.Substructure
is defined so thatL.Substructure M
is the type of all substructures of theL
-structureM
. FirstOrder.Language.Substructure.closure
is defined so that ifs : Set M
,closure L s
is the least substructure ofM
containings
.FirstOrder.Language.Substructure.comap
is defined so thats.comap f
is the preimage of the substructures
under the homomorphismf
, as a substructure.FirstOrder.Language.Substructure.map
is defined so thats.map f
is the image of the substructures
under the homomorphismf
, as a substructure.FirstOrder.Language.Hom.range
is defined so thatf.range
is the range of the homomorphismf
, as a substructure.FirstOrder.Language.Hom.domRestrict
andFirstOrder.Language.Hom.codRestrict
restrict the domain and codomain respectively of first-order homomorphisms to substructures.FirstOrder.Language.Embedding.domRestrict
andFirstOrder.Language.Embedding.codRestrict
restrict the domain and codomain respectively of first-order embeddings to substructures.FirstOrder.Language.Substructure.inclusion
is the inclusion embedding between substructures.
Main Results #
L.Substructure M
forms aCompleteLattice
.
Indicates that a set in a given structure is a closed under a function symbol.
Equations
- FirstOrder.Language.ClosedUnder f s = ∀ (x : Fin n → M), (∀ (i : Fin n), x i ∈ s) → FirstOrder.Language.Structure.funMap f x ∈ s
Instances For
A substructure of a structure M
is a set closed under application of function symbols.
- carrier : Set M
- fun_mem : ∀ {n : ℕ} (f : L.Functions n), FirstOrder.Language.ClosedUnder f ↑self
Instances For
Equations
- FirstOrder.Language.Substructure.instSetLike = { coe := FirstOrder.Language.Substructure.carrier, coe_injective' := ⋯ }
See Note [custom simps projection]
Equations
Instances For
Two substructures are equal if they have the same elements.
Copy a substructure replacing carrier
with a set that is equal to it.
Equations
- S.copy s hs = { carrier := s, fun_mem := ⋯ }
Instances For
The substructure M
of the structure M
.
Equations
- FirstOrder.Language.Substructure.instTop = { top := { carrier := Set.univ, fun_mem := ⋯ } }
The inf of two substructures is their intersection.
Substructures of a structure form a complete lattice.
Equations
- FirstOrder.Language.Substructure.instCompleteLattice = let __src := completeLatticeOfInf (L.Substructure M) ⋯; CompleteLattice.mk ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The L.Substructure
generated by a set.
Equations
- FirstOrder.Language.Substructure.closure L = { toFun := fun (s : Set M) => sInf {S : L.Substructure M | s ⊆ ↑S}, gc' := ⋯ }
Instances For
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
.
Equations
- ⋯ = ⋯
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
- One or more equations did not get rendered due to their size.
Instances For
Closure of a substructure S
equals S
.
Equations
- ⋯ = ⋯
The preimage of a substructure along a homomorphism is a substructure.
Equations
- FirstOrder.Language.Substructure.comap φ S = { carrier := ⇑φ ⁻¹' ↑S, fun_mem := ⋯ }
Instances For
The image of a substructure along a homomorphism is a substructure.
Equations
- FirstOrder.Language.Substructure.map φ S = { carrier := ⇑φ '' ↑S, fun_mem := ⋯ }
Instances For
map f
and comap f
form a GaloisCoinsertion
when f
is injective.
Equations
- FirstOrder.Language.Substructure.gciMapComap hf = ⋯.toGaloisCoinsertion ⋯
Instances For
map f
and comap f
form a GaloisInsertion
when f
is surjective.
Equations
- FirstOrder.Language.Substructure.giMapComap hf = ⋯.toGaloisInsertion ⋯
Instances For
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
- S.subtype = { toFun := Subtype.val, inj' := ⋯, map_fun' := ⋯, map_rel' := ⋯ }
Instances For
The equivalence between the maximal substructure of a structure and the structure itself.
Equations
Instances For
A dependent version of Substructure.closure_induction
.
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' := ⋯ }
Instances For
Turns any substructure containing a constant set A
into a L[[A]]
-substructure.
Equations
- S.withConstants h = { carrier := ↑S, fun_mem := ⋯ }
Instances For
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
Instances For
A first-order hom f : M → N
whose values lie in a substructure p ⊆ N
can be restricted to a
hom M → p
.
Equations
- FirstOrder.Language.Hom.codRestrict p f h = { toFun := fun (c : M) => ⟨f c, ⋯⟩, map_fun' := ⋯, map_rel' := ⋯ }
Instances For
The range of a first-order hom f : M → N
is a submodule of N
.
See Note [range copy pattern].
Equations
- f.range = (FirstOrder.Language.Substructure.map f ⊤).copy (Set.range ⇑f) ⋯
Instances For
The substructure of elements x : M
such that f x = g x
Instances For
If two L.Hom
s are equal on a set, then they are equal on its substructure closure.
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
Instances For
A first-order embedding f : M → N
whose values lie in a substructure p ⊆ N
can be restricted
to an embedding M → p
.
Equations
- FirstOrder.Language.Embedding.codRestrict p f h = { toFun := ⇑(FirstOrder.Language.Hom.codRestrict p f.toHom h), inj' := ⋯, map_fun' := ⋯, map_rel' := ⋯ }
Instances For
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.
Instances For
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.
Instances For
The embedding associated to an inclusion of substructures.