Direct limit of modules, abelian groups, rings, and fields. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
See Atiyah-Macdonald PP.32-33, Matsumura PP.269-270
Generalizes the notion of "union", or "gluing", of incomparable modules over the same ring, or incomparable abelian groups, or rings, or fields.
It is constructed as a quotient of the free module (for the module case) or quotient of the free commutative ring (for the ring case) instead of a quotient of the disjoint union so as to make the operations (addition etc.) "computable".
Main definitions #
- map_self : ∀ (i : ι) (x : G i) (h : i ≤ i), f i i h x = x
- map_map : ∀ {i j k : ι} (hij : i ≤ j) (hjk : j ≤ k) (x : G i), f j k hjk (f i j hij x) = f i k _ x
A directed system is a functor from a category (directed poset) to another category.
Instances of this typeclass
A copy of directed_system.map_self
specialized to linear maps, as otherwise the
λ i j h, f i j h
can confuse the simplifier.
A copy of directed_system.map_map
specialized to linear maps, as otherwise the
λ i j h, f i j h
can confuse the simplifier.
The direct limit of a directed system is the modules glued together along the maps.
Equations
- module.direct_limit G f = (direct_sum ι G ⧸ submodule.span R {a : direct_sum ι (λ (i : ι), G i) | ∃ (i j : ι) (H : i ≤ j) (x : G i), ⇑(direct_sum.lof R ι G i) x - ⇑(direct_sum.lof R ι G j) (⇑(f i j H) x) = a})
Instances for module.direct_limit
Equations
- module.direct_limit.add_comm_group G f = submodule.quotient.add_comm_group (submodule.span R {a : direct_sum ι (λ (i : ι), G i) | ∃ (i j : ι) (H : i ≤ j) (x : G i), ⇑(direct_sum.lof R ι G i) x - ⇑(direct_sum.lof R ι G j) (⇑(f i j H) x) = a})
Equations
- module.direct_limit.module G f = submodule.quotient.module (submodule.span R {a : direct_sum ι (λ (i : ι), G i) | ∃ (i j : ι) (H : i ≤ j) (x : G i), ⇑(direct_sum.lof R ι G i) x - ⇑(direct_sum.lof R ι G j) (⇑(f i j H) x) = a})
Equations
- module.direct_limit.inhabited G f = {default := 0}
The canonical map from a component to the direct limit.
Equations
- module.direct_limit.of R ι G f i = (submodule.span R {a : direct_sum ι (λ (i : ι), G i) | ∃ (i j : ι) (H : i ≤ j) (x : G i), ⇑(direct_sum.lof R ι G i) x - ⇑(direct_sum.lof R ι G j) (⇑(f i j H) x) = a}).mkq.comp (direct_sum.lof R ι G i)
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
- module.direct_limit.lift R ι G f g Hg = (submodule.span R {a : direct_sum ι (λ (i : ι), G i) | ∃ (i j : ι) (H : i ≤ j) (x : G i), ⇑(direct_sum.lof R ι G i) x - ⇑(direct_sum.lof R ι G j) (⇑(f i j H) x) = a}).liftq (direct_sum.to_module R ι P g) _
totalize G f i j
is a linear map from G i
to G j
, for every i
and j
.
If i ≤ j
, then it is the map f i j
that comes with the directed system G
,
and otherwise it is the zero map.
A component that corresponds to zero in the direct limit is already zero in some bigger module in the directed system.
The direct limit of a directed system is the abelian groups glued together along the maps.
Equations
- add_comm_group.direct_limit G f = module.direct_limit G (λ (i j : ι) (hij : i ≤ j), (f i j hij).to_int_linear_map)
Instances for add_comm_group.direct_limit
Equations
- add_comm_group.direct_limit.add_comm_group G f = module.direct_limit.add_comm_group G (λ (i j : ι) (hij : i ≤ j), (f i j hij).to_int_linear_map)
Equations
- add_comm_group.direct_limit.inhabited G f = {default := 0}
The canonical map from a component to the direct limit.
Equations
- add_comm_group.direct_limit.of G f i = module.direct_limit.of ℤ ι G (λ (i j : ι) (hij : i ≤ j), (f i j hij).to_int_linear_map) i
A component that corresponds to zero in the direct limit is already zero in some bigger module in the directed system.
The universal property of the direct limit: maps from the components to another abelian group that respect the directed system structure (i.e. make some diagram commute) give rise to a unique map out of the direct limit.
Equations
- add_comm_group.direct_limit.lift G f P g Hg = module.direct_limit.lift ℤ ι G (λ (i j : ι) (hij : i ≤ j), (f i j hij).to_int_linear_map) (λ (i : ι), (g i).to_int_linear_map) Hg
The direct limit of a directed system is the rings glued together along the maps.
Equations
- ring.direct_limit G f = (free_comm_ring (Σ (i : ι), G i) ⧸ ideal.span {a : free_comm_ring (Σ (i : ι), G i) | (∃ (i j : ι) (H : i ≤ j) (x : G i), free_comm_ring.of ⟨j, f i j H x⟩ - free_comm_ring.of ⟨i, x⟩ = a) ∨ (∃ (i : ι), free_comm_ring.of ⟨i, 1⟩ - 1 = a) ∨ (∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x + y⟩ - (free_comm_ring.of ⟨i, x⟩ + free_comm_ring.of ⟨i, y⟩) = a) ∨ ∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x * y⟩ - free_comm_ring.of ⟨i, x⟩ * free_comm_ring.of ⟨i, y⟩ = a})
Instances for ring.direct_limit
Equations
- ring.direct_limit.comm_ring G f = ideal.quotient.comm_ring (ideal.span {a : free_comm_ring (Σ (i : ι), G i) | (∃ (i j : ι) (H : i ≤ j) (x : G i), free_comm_ring.of ⟨j, f i j H x⟩ - free_comm_ring.of ⟨i, x⟩ = a) ∨ (∃ (i : ι), free_comm_ring.of ⟨i, 1⟩ - 1 = a) ∨ (∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x + y⟩ - (free_comm_ring.of ⟨i, x⟩ + free_comm_ring.of ⟨i, y⟩) = a) ∨ ∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x * y⟩ - free_comm_ring.of ⟨i, x⟩ * free_comm_ring.of ⟨i, y⟩ = a})
The canonical map from a component to the direct limit.
Equations
- ring.direct_limit.of G f i = ring_hom.mk' {to_fun := λ (x : G i), ⇑(ideal.quotient.mk (ideal.span {a : free_comm_ring (Σ (i : ι), G i) | (∃ (i j : ι) (H : i ≤ j) (x : G i), free_comm_ring.of ⟨j, f i j H x⟩ - free_comm_ring.of ⟨i, x⟩ = a) ∨ (∃ (i : ι), free_comm_ring.of ⟨i, 1⟩ - 1 = a) ∨ (∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x + y⟩ - (free_comm_ring.of ⟨i, x⟩ + free_comm_ring.of ⟨i, y⟩) = a) ∨ ∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x * y⟩ - free_comm_ring.of ⟨i, x⟩ * free_comm_ring.of ⟨i, y⟩ = a})) (free_comm_ring.of ⟨i, x⟩), map_one' := _, map_mul' := _} _
Every element of the direct limit corresponds to some element in some component of the directed system.
A component that corresponds to zero in the direct limit is already zero in some bigger module in the directed system.
If the maps in the directed system are injective, then the canonical maps from the components to the direct limits are injective.
The universal property of the direct limit: maps from the components to another ring that respect the directed system structure (i.e. make some diagram commute) give rise to a unique map out of the direct limit.
Equations
- ring.direct_limit.lift G f P g Hg = ideal.quotient.lift (ideal.span {a : free_comm_ring (Σ (i : ι), G i) | (∃ (i j : ι) (H : i ≤ j) (x : G i), free_comm_ring.of ⟨j, f i j H x⟩ - free_comm_ring.of ⟨i, x⟩ = a) ∨ (∃ (i : ι), free_comm_ring.of ⟨i, 1⟩ - 1 = a) ∨ (∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x + y⟩ - (free_comm_ring.of ⟨i, x⟩ + free_comm_ring.of ⟨i, y⟩) = a) ∨ ∃ (i : ι) (x y : G i), free_comm_ring.of ⟨i, x * y⟩ - free_comm_ring.of ⟨i, x⟩ * free_comm_ring.of ⟨i, y⟩ = a}) (⇑free_comm_ring.lift (λ (x : Σ (i : ι), G i), ⇑(g x.fst) x.snd)) _
Noncomputable multiplicative inverse in a direct limit of fields.
Equations
- field.direct_limit.inv G f p = dite (p = 0) (λ (H : p = 0), 0) (λ (H : ¬p = 0), classical.some _)
Noncomputable field structure on the direct limit of fields. See note [reducible non-instances].
Equations
- field.direct_limit.field G f' = {add := comm_ring.add (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), add_assoc := _, zero := comm_ring.zero (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), zero_add := _, add_zero := _, nsmul := comm_ring.nsmul (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), nsmul_zero' := _, nsmul_succ' := _, neg := comm_ring.neg (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), sub := comm_ring.sub (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), sub_eq_add_neg := _, zsmul := comm_ring.zsmul (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := comm_ring.int_cast (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), nat_cast := comm_ring.nat_cast (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), one := comm_ring.one (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := comm_ring.mul (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), mul_assoc := _, one_mul := _, mul_one := _, npow := comm_ring.npow (ring.direct_limit.comm_ring G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _, inv := field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h)), div := division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), div_eq_mul_inv := _, zpow := division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, rat_cast := division_ring.rat_cast._default comm_ring.add _ comm_ring.zero _ _ comm_ring.nsmul _ _ comm_ring.neg comm_ring.sub _ comm_ring.zsmul _ _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))) (division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h)))) _ (division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h)))) _ _ _, mul_inv_cancel := _, inv_zero := _, rat_cast_mk := _, qsmul := division_ring.qsmul._default (… … _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h))) (division_ring.div._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h)))) _ (division_ring.zpow._default comm_ring.mul _ comm_ring.one _ _ comm_ring.npow _ _ (field.direct_limit.inv G (λ (i j : ι) (h : i ≤ j), ⇑(f' i j h)))) _ _ _) comm_ring.add _ comm_ring.zero _ _ comm_ring.nsmul _ _ comm_ring.neg comm_ring.sub _ comm_ring.zsmul _ _ _ _ _ comm_ring.int_cast comm_ring.nat_cast comm_ring.one _ _ _ _ comm_ring.mul _ _ _ comm_ring.npow _ _ _ _, qsmul_eq_mul' := _}