Documentation

Mathlib.RingTheory.Flat.FaithfullyFlat

Faithfully flat modules #

A module M over a commutative ring R is faithfully flat if it is flat and IM ≠ M whenever I is a maximal ideal of R.

Main declaration #

Main theorems #

class Module.FaithfullyFlat (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] extends Module.Flat R M :

A module M over a commutative ring R is faithfully flat if it is flat and, for all R-module homomorphism f : N → N' such that id ⊗ f = 0, we have f = 0.

Instances
    theorem Module.faithfullyFlat_iff (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M Module.Flat R M ∀ ⦃m : Ideal R⦄, m.IsMaximalm
    theorem Module.FaithfullyFlat.iff_flat_and_rTensor_faithful (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M Module.Flat R M ∀ (N : Type (max u v)) [inst : AddCommGroup N] [inst_1 : Module R N], Nontrivial NNontrivial (TensorProduct R N M)
    theorem Module.FaithfullyFlat.iff_flat_and_lTensor_faithful (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M Module.Flat R M ∀ (N : Type (max u v)) [inst : AddCommGroup N] [inst_1 : Module R N], Nontrivial NNontrivial (TensorProduct R M N)

    If M is a faithfully flat R-module and N is R-linearly isomorphic to M, then N is faithfully flat.

    instance Module.FaithfullyFlat.directSum (R : Type u) [CommRing R] {ι : Type u_1} [Nonempty ι] (M : ιType u_2) [(i : ι) → AddCommGroup (M i)] [(i : ι) → Module R (M i)] [∀ (i : ι), Module.FaithfullyFlat R (M i)] :
    Module.FaithfullyFlat R (DirectSum ι fun (i : ι) => M i)

    A direct sum of faithfully flat R-modules is faithfully flat.

    Free R-modules over discrete types are flat.

    Any free, nontrivial R-module is flat.

    Faithfully flat modules and exact sequences #

    In this section we prove that an R-module M is faithfully flat iff tensoring with M preserves and reflects exact sequences.

    Let N₁ -l₁₂-> N₂ -l₂₃-> N₃ be two linear maps.

    On the other hand, if - ⊗ M preserves and reflects exact sequences, then M is faithfully flat.

    theorem Module.FaithfullyFlat.range_le_ker_of_exact_rTensor (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] {N1 : Type u_1} [AddCommGroup N1] [Module R N1] {N2 : Type u_2} [AddCommGroup N2] [Module R N2] {N3 : Type u_3} [AddCommGroup N3] [Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3) [fl : Module.FaithfullyFlat R M] (ex : Function.Exact (LinearMap.rTensor M l12) (LinearMap.rTensor M l23)) :

    If M is faithfully flat, then exactness of N₁ ⊗ M -> N₂ ⊗ M -> N₃ ⊗ M implies that the composition N₁ -> N₂ -> N₃ is 0.

    Implementation detail, please use rTensor_reflects_exact instead.

    theorem Module.FaithfullyFlat.rTensor_reflects_exact (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] {N1 : Type u_1} [AddCommGroup N1] [Module R N1] {N2 : Type u_2} [AddCommGroup N2] [Module R N2] {N3 : Type u_3} [AddCommGroup N3] [Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3) [fl : Module.FaithfullyFlat R M] (ex : Function.Exact (LinearMap.rTensor M l12) (LinearMap.rTensor M l23)) :
    Function.Exact l12 l23
    theorem Module.FaithfullyFlat.lTensor_reflects_exact (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] {N1 : Type u_1} [AddCommGroup N1] [Module R N1] {N2 : Type u_2} [AddCommGroup N2] [Module R N2] {N3 : Type u_3} [AddCommGroup N3] [Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3) [fl : Module.FaithfullyFlat R M] (ex : Function.Exact (LinearMap.lTensor M l12) (LinearMap.lTensor M l23)) :
    Function.Exact l12 l23
    theorem Module.FaithfullyFlat.exact_iff_rTensor_exact (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] [fl : Module.FaithfullyFlat R M] {N1 : Type (max u v)} [AddCommGroup N1] [Module R N1] {N2 : Type (max u v)} [AddCommGroup N2] [Module R N2] {N3 : Type (max u v)} [AddCommGroup N3] [Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3) :
    theorem Module.FaithfullyFlat.iff_exact_iff_rTensor_exact (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M ∀ {N1 : Type (max u v)} [inst : AddCommGroup N1] [inst_1 : Module R N1] {N2 : Type (max u v)} [inst_2 : AddCommGroup N2] [inst_3 : Module R N2] {N3 : Type (max u v)} [inst_4 : AddCommGroup N3] [inst_5 : Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3), Function.Exact l12 l23 Function.Exact (LinearMap.rTensor M l12) (LinearMap.rTensor M l23)
    theorem Module.FaithfullyFlat.iff_exact_iff_lTensor_exact (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M ∀ {N1 : Type (max u v)} [inst : AddCommGroup N1] [inst_1 : Module R N1] {N2 : Type (max u v)} [inst_2 : AddCommGroup N2] [inst_3 : Module R N2] {N3 : Type (max u v)} [inst_4 : AddCommGroup N3] [inst_5 : Module R N3] (l12 : N1 →ₗ[R] N2) (l23 : N2 →ₗ[R] N3), Function.Exact l12 l23 Function.Exact (LinearMap.lTensor M l12) (LinearMap.lTensor M l23)

    Faithfully flat modules and linear maps #

    In this section we prove that an R-module M is faithfully flat iff the following holds:

    theorem Module.FaithfullyFlat.zero_iff_lTensor_zero (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] [h : Module.FaithfullyFlat R M] {N : Type u_1} [AddCommGroup N] [Module R N] {N' : Type u_2} [AddCommGroup N'] [Module R N'] (f : N →ₗ[R] N') :

    If M is a faithfully flat module, then for all linear maps f, the map id ⊗ f = 0, if and only if f = 0.

    theorem Module.FaithfullyFlat.zero_iff_rTensor_zero (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] [h : Module.FaithfullyFlat R M] {N : Type u_1} [AddCommGroup N] [Module R N] {N' : Type u_2} [AddCommGroup N'] [Module R N'] (f : N →ₗ[R] N') :

    If M is a faithfully flat module, then for all linear maps f, the map f ⊗ id = 0, if and only if f = 0.

    theorem Module.FaithfullyFlat.iff_zero_iff_lTensor_zero (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M Module.Flat R M ∀ {N : Type (max u v)} [inst : AddCommGroup N] [inst_1 : Module R N] {N' : Type (max u v)} [inst_2 : AddCommGroup N'] [inst_3 : Module R N'] (f : N →ₗ[R] N'), LinearMap.lTensor M f = 0 f = 0

    An R-module M is faithfully flat iff it is flat and for all linear maps f, the map id ⊗ f = 0, if and only if f = 0.

    theorem Module.FaithfullyFlat.iff_zero_iff_rTensor_zero (R : Type u) (M : Type v) [CommRing R] [AddCommGroup M] [Module R M] :
    Module.FaithfullyFlat R M Module.Flat R M ∀ {N : Type (max u v)} [inst : AddCommGroup N] [inst_1 : Module R N] {N' : Type (max u v)} [inst_2 : AddCommGroup N'] [inst_3 : Module R N'] (f : N →ₗ[R] N'), LinearMap.rTensor M f = 0 f = 0

    An R-module M is faithfully flat iff it is flat and for all linear maps f, the map id ⊗ f = 0, if and only if f = 0.

    If S is a faithfully flat R-algebra, then any faithfully flat S-Module is faithfully flat as an R-module.

    @[deprecated Module.FaithfullyFlat.trans]

    Alias of Module.FaithfullyFlat.trans.


    If S is a faithfully flat R-algebra, then any faithfully flat S-Module is faithfully flat as an R-module.