Injective objects in the category of abelian groups #
In this file we prove that divisible groups are injective object in category of (additive) abelian groups and that the category of abelian groups has enough injective objects.
Main results #
AddCommGroupCat.injective_of_divisible
: a divisible group is also an injective object.AddCommGroupCat.enoughInjectives
: the category of abelian groups (written additively) has enough injectives.CommGroupCat.enoughInjectives
: the category of abelian group (written multiplicatively) has enough injectives.
Implementation notes #
The details of the proof that the category of abelian groups has enough injectives is hidden
inside the namespace AddCommGroup.enough_injectives_aux_proofs
. These are not marked private
,
but are not supposed to be used directly.
Equations
The next term of A
's injective resolution is ∏_{A →+ ℚ/ℤ}, ℚ/ℤ
.
Equations
Instances For
instance
AddCommGroupCat.enough_injectives_aux_proofs.instInjectiveAddCommGroupCatInstAddCommGroupCatLargeCategoryNext
(A_ : AddCommGroupCat)
:
Equations
- One or more equations did not get rendered due to their size.
@[simp]
theorem
AddCommGroupCat.enough_injectives_aux_proofs.toNext_apply
(A_ : AddCommGroupCat)
(a : ↑A_)
(i : A_ ⟶ AddCommGroupCat.of (ULift.{u, 0} (AddCircle 1)))
:
(AddCommGroupCat.enough_injectives_aux_proofs.toNext A_) a i = i a
The map into the next term of A
's injective resolution is coordinate-wise evaluation.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
LinearMap.toSpanSingleton_ker
{A_ : AddCommGroupCat}
(a : ↑A_)
:
LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a) = Ideal.span {↑(addOrderOf a)}
@[simp]
theorem
AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf_apply
{A_ : AddCommGroupCat}
(a : ↑A_)
:
∀ (a_1 : ↥(Submodule.span ℤ {a})),
(AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf a) a_1 = (Submodule.quotEquivOfEq (LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a)) (Ideal.span {↑(addOrderOf a)})
(_ : LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a) = Ideal.span {↑(addOrderOf a)}))
((LinearEquiv.symm (LinearMap.quotKerEquivRange (LinearMap.toSpanSingleton ℤ (↑A_) a)))
((LinearEquiv.ofEq (Submodule.span ℤ {a}) (LinearMap.range (LinearMap.toSpanSingleton ℤ (↑A_) a))
(_ : Submodule.span ℤ {a} = LinearMap.range (LinearMap.toSpanSingleton ℤ (↑A_) a)))
a_1))
@[simp]
theorem
AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf_symm_apply_coe
{A_ : AddCommGroupCat}
(a : ↑A_)
:
∀ (a_1 : ℤ ⧸ Ideal.span {↑(addOrderOf a)}),
↑((LinearEquiv.symm (AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf a)) a_1) = ↑((LinearMap.quotKerEquivRange (LinearMap.toSpanSingleton ℤ (↑A_) a))
((LinearEquiv.symm
(Submodule.quotEquivOfEq (LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a))
(Ideal.span {↑(addOrderOf a)})
(_ : LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a) = Ideal.span {↑(addOrderOf a)})))
a_1))
noncomputable def
AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf
{A_ : AddCommGroupCat}
(a : ↑A_)
:
↥(Submodule.span ℤ {a}) ≃ₗ[ℤ] ℤ ⧸ Ideal.span {↑(addOrderOf a)}
ℤ ⧸ ⟨ord(a)⟩ ≃ aℤ
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf_apply_self
{A_ : AddCommGroupCat}
(a : ↑A_)
:
(AddCommGroupCat.enough_injectives_aux_proofs.equivZModSpanAddOrderOf a)
{ val := a, property := (_ : a ∈ Submodule.span ℤ {a}) } = Submodule.Quotient.mk 1
@[inline, reducible]
Given n : ℕ
, the map m ↦ m / n
.
Equations
Instances For
@[simp]
theorem
AddCommGroupCat.enough_injectives_aux_proofs.toRatCircle_apply
{A_ : AddCommGroupCat}
{a : ↑A_}
:
∀ (a_1 : ↥(Submodule.span ℤ {a})),
AddCommGroupCat.enough_injectives_aux_proofs.toRatCircle a_1 = (Submodule.liftQSpanSingleton (↑(addOrderOf a))
(AddCommGroupCat.enough_injectives_aux_proofs.divBy (if addOrderOf a = 0 then 2 else addOrderOf a))
(_ :
(AddCommGroupCat.enough_injectives_aux_proofs.divBy (if addOrderOf a = 0 then 2 else addOrderOf a))
↑(addOrderOf a) = 0))
((Submodule.quotEquivOfEq (LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a)) (Ideal.span {↑(addOrderOf a)})
(_ : LinearMap.ker (LinearMap.toSpanSingleton ℤ (↑A_) a) = Ideal.span {↑(addOrderOf a)}))
((LinearEquiv.symm (LinearMap.quotKerEquivRange (LinearMap.toSpanSingleton ℤ (↑A_) a)))
((LinearEquiv.ofEq (Submodule.span ℤ {a}) (LinearMap.range (LinearMap.toSpanSingleton ℤ (↑A_) a))
(_ : Submodule.span ℤ {a} = LinearMap.range (LinearMap.toSpanSingleton ℤ (↑A_) a)))
a_1)))
noncomputable def
AddCommGroupCat.enough_injectives_aux_proofs.toRatCircle
{A_ : AddCommGroupCat}
{a : ↑A_}
:
The map sending n • a
to n / 2
when a
has infinite order,
and to n / addOrderOf a
otherwise.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
AddCommGroupCat.enough_injectives_aux_proofs.eq_zero_of_toRatCircle_apply_self
{A_ : AddCommGroupCat}
{a : ↑A_}
(h : AddCommGroupCat.enough_injectives_aux_proofs.toRatCircle { val := a, property := (_ : a ∈ Submodule.span ℤ {a}) } = 0)
:
a = 0
An injective presentation of A
: A → ∏_{A →+ ℚ/ℤ}, ℚ/ℤ
.
Equations
- One or more equations did not get rendered due to their size.