|
| 1 | +/- |
| 2 | +Copyright (c) 2020 Johan Commelin. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Johan Commelin |
| 5 | +-/ |
| 6 | + |
| 7 | +import linear_algebra.dimension |
| 8 | +import ring_theory.noetherian |
| 9 | +import ring_theory.algebra_tower |
| 10 | + |
| 11 | +/-! |
| 12 | +# Flat modules |
| 13 | +
|
| 14 | +A module `M` over a commutative ring `R` is *flat* |
| 15 | +if for all finitely generated ideals `I` of `R`, |
| 16 | +the canonical map `I ⊗ M →ₗ M` is injective. |
| 17 | +
|
| 18 | +This is equivalent to the claim that for all injective `R`-linear maps `f : M₁ → M₂` |
| 19 | +the induced map `M₁ ⊗ M → M₂ ⊗ M` is injective. |
| 20 | +See <https://stacks.math.columbia.edu/tag/00HD>. |
| 21 | +This result is not yet formalised. |
| 22 | +
|
| 23 | +## Main declaration |
| 24 | +
|
| 25 | +* `module.flat`: the predicate asserting that an `R`-module `M` is flat. |
| 26 | +
|
| 27 | +## TODO |
| 28 | +
|
| 29 | +* Show that tensoring with a flat module preserves injective morphisms. |
| 30 | + Show that this is equivalent to be flat. |
| 31 | + See <https://stacks.math.columbia.edu/tag/00HD>. |
| 32 | + To do this, it is probably a good idea to think about a suitable |
| 33 | + categorical induction principle that should be applied to the category of `R`-modules, |
| 34 | + and that will take care of the administrative side of the proof. |
| 35 | +* Define flat `R`-algebras |
| 36 | +* Define flat ring homomorphisms |
| 37 | + - Show that the identity is flat |
| 38 | + - Show that composition of flat morphisms is flat |
| 39 | +* Show that flatness is stable under base change (aka extension of scalars) |
| 40 | + For base change, it will be very useful to have a "characteristic predicate" |
| 41 | + instead of relying on the construction `A ⊗ B`. |
| 42 | + Indeed, such a predicate should allow us to treat both |
| 43 | + `polynomial A` and `A ⊗ polynomial R` as the base change of `polynomial R` to `A`. |
| 44 | + (Similar examples exist with `fin n → R`, `R × R`, `ℤ[i] ⊗ ℝ`, etc...) |
| 45 | +* Generalize flatness to noncommutative rings. |
| 46 | +
|
| 47 | +-/ |
| 48 | + |
| 49 | +namespace module |
| 50 | +open function (injective) |
| 51 | +open linear_map (lsmul) |
| 52 | + |
| 53 | +open_locale tensor_product |
| 54 | + |
| 55 | +/-- An `R`-module `M` is flat if for all finitely generated ideals `I` of `R`, |
| 56 | +the canonical map `I ⊗ M →ₗ M` is injective. -/ |
| 57 | +@[class] |
| 58 | +def flat (R M : Type*) [comm_ring R] [add_comm_group M] [module R M] : Prop := |
| 59 | +∀ ⦃I : ideal R⦄ (hI : I.fg), injective (tensor_product.lift ((lsmul R M).comp I.subtype)) |
| 60 | + |
| 61 | +namespace flat |
| 62 | + |
| 63 | +open tensor_product linear_map submodule |
| 64 | + |
| 65 | +instance self (R : Type*) [comm_ring R] : flat R R := |
| 66 | +begin |
| 67 | + intros I hI, |
| 68 | + rw ← equiv.injective_comp (tensor_product.rid R I).symm.to_equiv, |
| 69 | + convert subtype.coe_injective using 1, |
| 70 | + ext x, |
| 71 | + simp only [function.comp_app, linear_equiv.coe_to_equiv, rid_symm_apply, comp_apply, |
| 72 | + mul_one, lift.tmul, subtype_apply, algebra.id.smul_eq_mul, lsmul_apply] |
| 73 | +end |
| 74 | + |
| 75 | +end flat |
| 76 | + |
| 77 | +end module |
0 commit comments