Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit aafa5fe

Browse files
committed
feat(ring_theory/flat): definition of flat module (#6284)
1 parent d451876 commit aafa5fe

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

src/ring_theory/flat.lean

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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

Comments
 (0)