Direct Limits of First-Order Structures #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4. This file constructs the direct limit of a directed system of first-order embeddings.
Main Definitions #
first_order.language.direct_limit G f
is the direct limit of the directed systemf
of first-order embeddings between the structures indexed byG
.
A copy of directed_system.map_self
specialized to L
-embeddings, as otherwise the
λ i j h, f i j h
can confuse the simplifier.
A copy of directed_system.map_map
specialized to L
-embeddings, as otherwise the
λ i j h, f i j h
can confuse the simplifier.
Given a chain of embeddings of structures indexed by ℕ
, defines a directed_system
by
composing them.
Equations
- first_order.language.directed_system.nat_le_rec f' m n h = nat.le_rec_on h (λ (k : ℕ) (g : L.embedding (G' m) (G' k)), (f' k).comp g) (first_order.language.embedding.refl L (G' m))
Raises a family of elements in the Σ
-type to the same level along the embeddings.
Equations
- first_order.language.direct_limit.unify f x i h a = ⇑(f (x a).fst i _) (x a).snd
The directed limit glues together the structures along the embeddings.
Equations
- first_order.language.direct_limit.setoid G f = {r := λ (_x : Σ (i : ι), G i), first_order.language.direct_limit.setoid._match_2 G f _x, iseqv := _}
- first_order.language.direct_limit.setoid._match_2 G f ⟨i, x⟩ = λ (_x : Σ (i : ι), G i), first_order.language.direct_limit.setoid._match_1 G f i x _x
- first_order.language.direct_limit.setoid._match_1 G f i x ⟨j, y⟩ = ∃ (k : ι) (ik : i ≤ k) (jk : j ≤ k), ⇑(f i k ik) x = ⇑(f j k jk) y
Instances for first_order.language.direct_limit.setoid
The structure on the Σ
-type which becomes the structure on the direct limit after quotienting.
Equations
- first_order.language.direct_limit.sigma_structure G f = {fun_map := λ (n : ℕ) (F : L.functions n) (x : fin n → (Σ (i : ι), G i)), ⟨classical.some _, first_order.language.Structure.fun_map F (first_order.language.direct_limit.unify f x (classical.some _) _)⟩, rel_map := λ (n : ℕ) (R : L.relations n) (x : fin n → (Σ (i : ι), G i)), first_order.language.Structure.rel_map R (first_order.language.direct_limit.unify f x (classical.some _) _)}
The direct limit of a directed system is the structures glued together along the embeddings.
Equations
Instances for first_order.language.direct_limit
Equations
- first_order.language.direct_limit.inhabited G f = {default := ⟦⟨inhabited.default _inst_5, inhabited.default _inst_6⟩⟧}
The direct limit setoid
respects the structure sigma_structure
, so quotienting by it
gives rise to a valid structure.
Equations
- first_order.language.direct_limit.prestructure G f = {to_structure := first_order.language.direct_limit.sigma_structure G f _inst_5, fun_equiv := _, rel_equiv := _}
The L.Structure
on a direct limit of L.Structure
s.
The canonical map from a component to the direct limit.
Equations
- first_order.language.direct_limit.of L ι G f i = {to_embedding := {to_fun := quotient.mk ∘ sigma.mk i, inj' := _}, map_fun' := _, map_rel' := _}
Every element of the direct limit corresponds to some element in some component of the directed system.
The universal property of the direct limit: maps from the components to another module that respect the directed system structure (i.e. make some diagram commute) give rise to a unique map out of the direct limit.
Equations
- first_order.language.direct_limit.lift L ι G f g Hg = {to_embedding := {to_fun := quotient.lift (λ (x : Σ (i : ι), G i), ⇑(g x.fst) x.snd) _, inj' := _}, map_fun' := _, map_rel' := _}
The direct limit of countably many countably generated structures is countably generated.