Documentation

Mathlib.Algebra.Module.Injective

Injective modules #

Main definitions #

Main statements #

class Module.Injective (R : Type u) [Ring R] (Q : Type v) [AddCommGroup Q] [Module R Q] :

An R-module Q is injective if and only if every injective R-linear map descends to a linear map to Q, i.e. in the following diagram, if f is injective then there is an R-linear map h : Y ⟶ Q such that g = h ∘ f

X --- f ---> Y
|
| g
v
Q
Instances
    theorem Module.injective_iff (R : Type u) [Ring R] (Q : Type v) [AddCommGroup Q] [Module R Q] :
    Injective R Q ↔ āˆ€ ⦃X Y : Type v⦄ [inst : AddCommGroup X] [inst_1 : AddCommGroup Y] [inst_2 : Module R X] [inst_3 : Module R Y] (f : X →ₗ[R] Y), Function.Injective ⇑f → āˆ€ (g : X →ₗ[R] Q), ∃ (h : Y →ₗ[R] Q), āˆ€ (x : X), h (f x) = g x
    def Module.Baer (R : Type u) [Ring R] (Q : Type v) [AddCommGroup Q] [Module R Q] :

    An R-module Q satisfies Baer's criterion if any R-linear map from an Ideal R extends to an R-linear map R ⟶ Q

    Instances For
      theorem Module.Baer.of_equiv {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} [AddCommGroup M] [Module R M] (e : Q ā‰ƒā‚—[R] M) (h : Baer R Q) :
      Baer R M
      theorem Module.Baer.congr {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} [AddCommGroup M] [Module R M] (e : Q ā‰ƒā‚—[R] M) :
      Baer R Q ↔ Baer R M
      theorem Module.Baer.iff_surjective {M : Type u_1} [AddCommGroup M] {R : Type u} [CommRing R] [Module R M] :
      Baer R M ↔ āˆ€ (I : Ideal R), Function.Surjective ⇑(LinearMap.lcomp R M (Submodule.subtype I))
      structure Module.Baer.ExtensionOf {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) extends N →ₗ.[R] Q :
      Type (max u_2 v)

      If we view M as a submodule of N via the injective linear map i : M ↪ N, then a submodule between M and N is a submodule N' of N. To prove Baer's criterion, we need to consider pairs of (N', f') such that M ≤ N' ≤ N and f' extends f.

      Instances For
        theorem Module.Baer.ExtensionOf.ext {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {a b : ExtensionOf i f} (domain_eq : a.domain = b.domain) (to_fun_eq : āˆ€ ⦃x : N⦄ ⦃ha : x ∈ a.domain⦄ ⦃hb : x ∈ b.domain⦄, ↑a.toLinearPMap ⟨x, ha⟩ = ↑b.toLinearPMap ⟨x, hb⟩) :
        a = b
        theorem Module.Baer.ExtensionOf.dExt {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {a b : ExtensionOf i f} (domain_eq : a.domain = b.domain) (to_fun_eq : āˆ€ ⦃x : ↄa.domain⦄ ⦃y : ↄb.domain⦄, ↑x = ↑y → ↑a.toLinearPMap x = ↑b.toLinearPMap y) :
        a = b

        A dependent version of ExtensionOf.ext

        theorem Module.Baer.ExtensionOf.dExt_iff {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {a b : ExtensionOf i f} :
        a = b ↔ ∃ (_ : a.domain = b.domain), āˆ€ ⦃x : ↄa.domain⦄ ⦃y : ↄb.domain⦄, ↑x = ↑y → ↑a.toLinearPMap x = ↑b.toLinearPMap y
        theorem Module.Baer.ExtensionOf.toLinearPMap_injective {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} :
        Function.Injective toLinearPMap
        @[implicit_reducible]
        instance Module.Baer.instMinExtensionOf {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) :
        Min (ExtensionOf i f)
        @[implicit_reducible]
        instance Module.Baer.instPartialOrderExtensionOf {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) :
        @[implicit_reducible]
        instance Module.Baer.instSemilatticeInfExtensionOf {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) :
        theorem Module.Baer.chain_linearPMap_of_chain_extensionOf {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {c : Set (ExtensionOf i f)} (hchain : IsChain (fun (x1 x2 : ExtensionOf i f) => x1 ≤ x2) c) :
        IsChain (fun (x1 x2 : N →ₗ.[R] Q) => x1 ≤ x2) ((fun (x : ExtensionOf i f) => x.toLinearPMap) '' c)
        noncomputable def Module.Baer.ExtensionOf.max {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {c : Set (ExtensionOf i f)} (hchain : IsChain (fun (x1 x2 : ExtensionOf i f) => x1 ≤ x2) c) (hnonempty : c.Nonempty) :

        The maximal element of every nonempty chain of extension_of i f.

        Instances For
          theorem Module.Baer.ExtensionOf.le_max {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] {i : M →ₗ[R] N} {f : M →ₗ[R] Q} {c : Set (ExtensionOf i f)} (hchain : IsChain (fun (x1 x2 : ExtensionOf i f) => x1 ≤ x2) c) (hnonempty : c.Nonempty) (a : ExtensionOf i f) (ha : a ∈ c) :
          a ≤ max hchain hnonempty
          @[implicit_reducible]
          noncomputable instance Module.Baer.ExtensionOf.inhabited {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] :
          Inhabited (ExtensionOf i f)
          noncomputable def Module.Baer.extensionOfMax {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] :

          Since every nonempty chain has a maximal element, by Zorn's lemma, there is a maximal extension_of i f.

          Instances For
            theorem Module.Baer.extensionOfMax_is_max {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (a : ExtensionOf i f) :
            extensionOfMax i f ≤ a → a = extensionOfMax i f
            @[reducible, inline]
            noncomputable abbrev Module.Baer.supExtensionOfMaxSingleton {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (y : N) :
            Instances For
              noncomputable def Module.Baer.ExtensionOfMaxAdjoin.fst {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) {f : M →ₗ[R] Q} [Fact (Function.Injective ⇑i)] {y : N} (x : ↄ(supExtensionOfMaxSingleton i f y)) :
              ↄ(extensionOfMax i f).domain

              If x ∈ M āŠ” ⟨y⟩, then x = m + r • y, fst pick an arbitrary such m.

              Instances For
                noncomputable def Module.Baer.ExtensionOfMaxAdjoin.snd {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) {f : M →ₗ[R] Q} [Fact (Function.Injective ⇑i)] {y : N} (x : ↄ(supExtensionOfMaxSingleton i f y)) :
                R

                If x ∈ M āŠ” ⟨y⟩, then x = m + r • y, snd pick an arbitrary such r.

                Instances For
                  theorem Module.Baer.ExtensionOfMaxAdjoin.eqn {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) {f : M →ₗ[R] Q} [Fact (Function.Injective ⇑i)] {y : N} (x : ↄ(supExtensionOfMaxSingleton i f y)) :
                  ↑x = ↑(fst i x) + snd i x • y
                  noncomputable def Module.Baer.ExtensionOfMaxAdjoin.ideal {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (y : N) :

                  The ideal I = {r | r • y ∈ N}

                  Instances For
                    noncomputable def Module.Baer.ExtensionOfMaxAdjoin.idealTo {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (y : N) :
                    ↄ(ideal i f y) →ₗ[R] Q

                    A linear map I ⟶ Q by x ↦ f' (x • y) where f' is the maximal extension

                    Instances For
                      noncomputable def Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) (y : N) :

                      Since we assumed Q being Baer, the linear map x ↦ f' (x • y) : I ⟶ Q extends to R ⟶ Q, call this extended map φ

                      Instances For
                        theorem Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo_is_extension {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) (y : N) (x : R) (mem : x ∈ ideal i f y) :
                        (extendIdealTo i f h y) x = (idealTo i f y) ⟨x, mem⟩
                        theorem Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo_wd' {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} (r : R) (eq1 : r • y = 0) :
                        (extendIdealTo i f h y) r = 0
                        theorem Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo_wd {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} (r r' : R) (eq1 : r • y = r' • y) :
                        (extendIdealTo i f h y) r = (extendIdealTo i f h y) r'
                        theorem Module.Baer.ExtensionOfMaxAdjoin.extendIdealTo_eq {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} (r : R) (hr : r • y ∈ (extensionOfMax i f).domain) :
                        (extendIdealTo i f h y) r = ↑(extensionOfMax i f).toLinearPMap ⟨r • y, hr⟩
                        noncomputable def Module.Baer.ExtensionOfMaxAdjoin.extensionToFun {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} :
                        ↄ(supExtensionOfMaxSingleton i f y) → Q

                        We can finally define a linear map M āŠ” ⟨y⟩ ⟶ Q by x + r • y ↦ f x + φ r

                        Instances For
                          theorem Module.Baer.ExtensionOfMaxAdjoin.extensionToFun_wd {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} (x : ↄ(supExtensionOfMaxSingleton i f y)) (a : ↄ(extensionOfMax i f).domain) (r : R) (eq1 : ↑x = ↑a + r • y) :
                          extensionToFun i f h x = ↑(extensionOfMax i f).toLinearPMap a + (extendIdealTo i f h y) r
                          noncomputable def Module.Baer.extensionOfMaxAdjoin {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) (y : N) :

                          The linear map M āŠ” ⟨y⟩ ⟶ Q by x + r • y ↦ f x + φ r is an extension of f

                          Instances For
                            theorem Module.Baer.extensionOfMax_le {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) {y : N} :
                            theorem Module.Baer.extensionOfMax_to_submodule_eq_top {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (i : M →ₗ[R] N) (f : M →ₗ[R] Q) [Fact (Function.Injective ⇑i)] (h : Baer R Q) :
                            theorem Module.Baer.extension_property {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (h : Baer R Q) (f : M →ₗ[R] N) (hf : Function.Injective ⇑f) (g : M →ₗ[R] Q) :
                            ∃ (h : N →ₗ[R] Q), h āˆ˜ā‚— f = g
                            theorem Module.Baer.extension_property_addMonoidHom {Q : Type v} [AddCommGroup Q] {M : Type u_1} {N : Type u_2} [AddCommGroup M] [AddCommGroup N] (h : Baer ℤ Q) (f : M →+ N) (hf : Function.Injective ⇑f) (g : M →+ Q) :
                            ∃ (h : N →+ Q), h.comp f = g
                            theorem Module.Baer.injective {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] (h : Baer R Q) :

                            Baer's criterion for injective module : a Baer module is an injective module, i.e. if every linear map from an ideal can be extended, then the module is injective.

                            theorem Module.Baer.of_injective {R : Type u} [Ring R] {Q : Type v} [AddCommGroup Q] [Module R Q] [Small.{v, u} R] (inj : Injective R Q) :
                            Baer R Q
                            theorem Module.ulift_injective_of_injective (R : Type u) [Ring R] {M : Type v} [AddCommGroup M] [Module R M] [Small.{v, u} R] (inj : Injective R M) :
                            Injective R (ULift.{v', v} M)
                            theorem Module.injective_of_ulift_injective (R : Type u) [Ring R] {M : Type v} [AddCommGroup M] [Module R M] (inj : Injective R (ULift.{v', v} M)) :
                            theorem Module.injective_iff_ulift_injective (R : Type u) [Ring R] (M : Type v) [AddCommGroup M] [Module R M] [Small.{v, u} R] :
                            Injective R M ↔ Injective R (ULift.{v', v} M)
                            theorem Module.Injective.extension_property (R : Type uR) [Ring R] [Small.{uM, uR} R] (M : Type uM) [AddCommGroup M] [Module R M] [inj : Injective R M] (P : Type uP) [AddCommGroup P] [Module R P] (P' : Type uP') [AddCommGroup P'] [Module R P'] (f : P →ₗ[R] P') (hf : Function.Injective ⇑f) (g : P →ₗ[R] M) :
                            ∃ (h : P' →ₗ[R] M), h āˆ˜ā‚— f = g
                            instance Module.Injective.pi (R : Type u) [Ring R] {ι : Type w} (M : ι → Type v) [Small.{v, u} R] [(i : ι) → AddCommGroup (M i)] [(i : ι) → Module R (M i)] [āˆ€ (i : ι), Injective R (M i)] :
                            Injective R ((i : ι) → M i)
                            theorem Module.Injective.of_ringEquiv {R : Type u} [Ring R] [Small.{v, u} R] {S : Type u'} [Ring S] {M : Type v} {N : Type v'} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module S N] (e₁ : R ā‰ƒ+* S) (eā‚‚ : M ā‰ƒā‚›ā‚—[↑e₁] N) [inj : Injective R M] :