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

Commit f9561d4

Browse files
committed
feat(ring_theory/localization): The localization at a fg submonoid is of finite type. (#10990)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 5719a02 commit f9561d4

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

src/ring_theory/localization.lean

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import ring_theory.ideal.local_ring
1010
import ring_theory.ideal.quotient
1111
import ring_theory.integral_closure
1212
import ring_theory.non_zero_divisors
13+
import group_theory.submonoid.inverses
1314
import tactic.ring_exp
1415

1516
/-!
@@ -743,6 +744,90 @@ end away
743744

744745
end away
745746

747+
section inv_submonoid
748+
749+
variables (M S)
750+
751+
/-- The submonoid of `S = M⁻¹R` consisting of `{ 1 / x | x ∈ M }`. -/
752+
def inv_submonoid : submonoid S := (M.map (algebra_map R S : R →* S)).left_inv
753+
754+
variable [is_localization M S]
755+
756+
lemma submonoid_map_le_is_unit : M.map (algebra_map R S : R →* S) ≤ is_unit.submonoid S :=
757+
by { rintros _ ⟨a, ha, rfl⟩, exact is_localization.map_units S ⟨_, ha⟩ }
758+
759+
/-- There is an equivalence of monoids between the image of `M` and `inv_submonoid`. -/
760+
noncomputable
761+
abbreviation equiv_inv_submonoid : M.map (algebra_map R S : R →* S) ≃* inv_submonoid M S :=
762+
((M.map (algebra_map R S : R →* S)).left_inv_equiv (submonoid_map_le_is_unit M S)).symm
763+
764+
/-- There is a canonical map from `M` to `inv_submonoid` sending `x` to `1 / x`. -/
765+
noncomputable
766+
def to_inv_submonoid : M →* inv_submonoid M S :=
767+
(equiv_inv_submonoid M S).to_monoid_hom.comp ((algebra_map R S : R →* S).submonoid_map M)
768+
769+
lemma to_inv_submonoid_surjective : function.surjective (to_inv_submonoid M S) :=
770+
function.surjective.comp (equiv.surjective _) (monoid_hom.submonoid_map_surjective _ _)
771+
772+
@[simp]
773+
lemma to_inv_submonoid_mul (m : M) : (to_inv_submonoid M S m : S) * (algebra_map R S m) = 1 :=
774+
submonoid.left_inv_equiv_symm_mul _ _ _
775+
776+
@[simp]
777+
lemma mul_to_inv_submonoid (m : M) : (algebra_map R S m) * (to_inv_submonoid M S m : S) = 1 :=
778+
submonoid.mul_left_inv_equiv_symm _ _ ⟨_, _⟩
779+
780+
@[simp]
781+
lemma smul_to_inv_submonoid (m : M) : m • (to_inv_submonoid M S m : S) = 1 :=
782+
by { convert mul_to_inv_submonoid M S m, rw ← algebra.smul_def, refl }
783+
784+
variables {S}
785+
786+
lemma surj' (z : S) : ∃ (r : R) (m : M), z = r • to_inv_submonoid M S m :=
787+
begin
788+
rcases is_localization.surj M z with ⟨⟨r, m⟩, e : z * _ = algebra_map R S r⟩,
789+
refine ⟨r, m, _⟩,
790+
rw [algebra.smul_def, ← e, mul_assoc],
791+
simp,
792+
end
793+
794+
lemma to_inv_submonoid_eq_mk' (x : M) :
795+
(to_inv_submonoid M S x : S) = mk' S 1 x :=
796+
by { rw ← (is_localization.map_units S x).mul_left_inj, simp }
797+
798+
lemma mem_inv_submonoid_iff_exists_mk' (x : S) :
799+
x ∈ inv_submonoid M S ↔ ∃ m : M, mk' S 1 m = x :=
800+
begin
801+
simp_rw ← to_inv_submonoid_eq_mk',
802+
exact ⟨λ h, ⟨_, congr_arg subtype.val (to_inv_submonoid_surjective M S ⟨x, h⟩).some_spec⟩,
803+
λ h, h.some_spec ▸ (to_inv_submonoid M S h.some).prop⟩
804+
end
805+
806+
variables (S)
807+
808+
lemma span_inv_submonoid : submodule.span R (inv_submonoid M S : set S) = ⊤ :=
809+
begin
810+
rw eq_top_iff,
811+
rintros x -,
812+
rcases is_localization.surj' M x with ⟨r, m, rfl⟩,
813+
exact submodule.smul_mem _ _ (submodule.subset_span (to_inv_submonoid M S m).prop),
814+
end
815+
816+
lemma finite_type_of_monoid_fg [monoid.fg M] : algebra.finite_type R S :=
817+
begin
818+
have := monoid.fg_of_surjective _ (to_inv_submonoid_surjective M S),
819+
rw monoid.fg_iff_submonoid_fg at this,
820+
rcases this with ⟨s, hs⟩,
821+
refine ⟨⟨s, _⟩⟩,
822+
rw eq_top_iff,
823+
rintro x -,
824+
change x ∈ ((algebra.adjoin R _ : subalgebra R S).to_submodule : set S),
825+
rw [algebra.adjoin_eq_span, hs, span_inv_submonoid],
826+
trivial
827+
end
828+
829+
end inv_submonoid
830+
746831
end is_localization
747832

748833
namespace localization

0 commit comments

Comments
 (0)