-
Notifications
You must be signed in to change notification settings - Fork 335
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/master' into HomeomorphClass
- Loading branch information
Showing
53 changed files
with
1,518 additions
and
356 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/- | ||
Copyright (c) 2022 Jujian Zhang. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Andrew Yang, Jujian Zhang | ||
-/ | ||
import Mathlib.Algebra.Exact | ||
import Mathlib.Algebra.Module.LocalizedModule.Basic | ||
|
||
/-! | ||
# Localization of modules is an exact functor | ||
## Main definitions | ||
- `LocalizedModule.map_exact`: Localization of modules is an exact functor. | ||
- `IsLocalizedModule.map_exact`: A variant expressed in terms of `IsLocalizedModule`. | ||
-/ | ||
|
||
section | ||
|
||
open IsLocalizedModule Function Submonoid | ||
|
||
variable {R : Type*} [CommSemiring R] (S : Submonoid R) | ||
variable {M₀ M₀'} [AddCommMonoid M₀] [AddCommMonoid M₀'] [Module R M₀] [Module R M₀'] | ||
variable (f₀ : M₀ →ₗ[R] M₀') [IsLocalizedModule S f₀] | ||
variable {M₁ M₁'} [AddCommMonoid M₁] [AddCommMonoid M₁'] [Module R M₁] [Module R M₁'] | ||
variable (f₁ : M₁ →ₗ[R] M₁') [IsLocalizedModule S f₁] | ||
variable {M₂ M₂'} [AddCommMonoid M₂] [AddCommMonoid M₂'] [Module R M₂] [Module R M₂'] | ||
variable (f₂ : M₂ →ₗ[R] M₂') [IsLocalizedModule S f₂] | ||
|
||
/-- Localization of modules is an exact functor, proven here for `LocalizedModule`. | ||
See `IsLocalizedModule.map_exact` for the more general version. -/ | ||
lemma LocalizedModule.map_exact (g : M₀ →ₗ[R] M₁) (h : M₁ →ₗ[R] M₂) (ex : Exact g h) : | ||
Exact (map S (mkLinearMap S M₀) (mkLinearMap S M₁) g) | ||
(map S (mkLinearMap S M₁) (mkLinearMap S M₂) h) := | ||
fun y ↦ Iff.intro | ||
(induction_on | ||
(fun m s hy ↦ by | ||
rw [map_LocalizedModules, ← zero_mk 1, mk_eq, one_smul, smul_zero] at hy | ||
obtain ⟨a, aS, ha⟩ := Subtype.exists.1 hy | ||
rw [smul_zero, mk_smul, ← LinearMap.map_smul, ex (a • m)] at ha | ||
rcases ha with ⟨x, hx⟩ | ||
use mk x (⟨a, aS⟩ * s) | ||
rw [map_LocalizedModules, hx, ← mk_cancel_common_left ⟨a, aS⟩ s m, mk_smul]) | ||
y) | ||
fun ⟨x, hx⟩ ↦ by | ||
revert hx | ||
refine induction_on (fun m s hx ↦ ?_) x | ||
rw [← hx, map_LocalizedModules, map_LocalizedModules, (ex (g m)).2 ⟨m, rfl⟩, zero_mk] | ||
|
||
/-- Localization of modules is an exact functor. -/ | ||
theorem IsLocalizedModule.map_exact (g : M₀ →ₗ[R] M₁) (h : M₁ →ₗ[R] M₂) (ex : Function.Exact g h) : | ||
Function.Exact (map S f₀ f₁ g) (map S f₁ f₂ h) := | ||
Function.Exact.of_ladder_linearEquiv_of_exact | ||
(map_iso_commute S f₀ f₁ g) (map_iso_commute S f₁ f₂ h) (LocalizedModule.map_exact S g h ex) | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
Mathlib/Algebra/Module/LocalizedModule/IsLocalization.lean
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/- | ||
Copyright (c) 2022 Jujian Zhang. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Andrew Yang, Jujian Zhang | ||
-/ | ||
import Mathlib.Algebra.Algebra.Bilinear | ||
import Mathlib.Algebra.Module.LocalizedModule.Basic | ||
|
||
/-! | ||
# Equivalence between `IsLocalizedModule` and `IsLocalization` | ||
-/ | ||
|
||
section IsLocalizedModule | ||
|
||
variable {R : Type*} [CommSemiring R] (S : Submonoid R) | ||
|
||
variable {S} in | ||
theorem isLocalizedModule_iff_isLocalization {A Aₛ} [CommSemiring A] [Algebra R A] [CommSemiring Aₛ] | ||
[Algebra A Aₛ] [Algebra R Aₛ] [IsScalarTower R A Aₛ] : | ||
IsLocalizedModule S (IsScalarTower.toAlgHom R A Aₛ).toLinearMap ↔ | ||
IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ := by | ||
rw [isLocalizedModule_iff, isLocalization_iff] | ||
refine and_congr ?_ (and_congr (forall_congr' fun _ ↦ ?_) (forall₂_congr fun _ _ ↦ ?_)) | ||
· simp_rw [← (Algebra.lmul R Aₛ).commutes, Algebra.lmul_isUnit_iff, Subtype.forall, | ||
Algebra.algebraMapSubmonoid, ← SetLike.mem_coe, Submonoid.coe_map, | ||
Set.forall_mem_image, ← IsScalarTower.algebraMap_apply] | ||
· simp_rw [Prod.exists, Subtype.exists, Algebra.algebraMapSubmonoid] | ||
simp [← IsScalarTower.algebraMap_apply, Submonoid.mk_smul, Algebra.smul_def, mul_comm] | ||
· congr!; simp_rw [Subtype.exists, Algebra.algebraMapSubmonoid]; simp [Algebra.smul_def] | ||
|
||
instance {A Aₛ} [CommSemiring A] [Algebra R A][CommSemiring Aₛ] [Algebra A Aₛ] [Algebra R Aₛ] | ||
[IsScalarTower R A Aₛ] [h : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ] : | ||
IsLocalizedModule S (IsScalarTower.toAlgHom R A Aₛ).toLinearMap := | ||
isLocalizedModule_iff_isLocalization.mpr h | ||
|
||
lemma isLocalizedModule_iff_isLocalization' (R') [CommSemiring R'] [Algebra R R'] : | ||
IsLocalizedModule S (Algebra.ofId R R').toLinearMap ↔ IsLocalization S R' := by | ||
convert isLocalizedModule_iff_isLocalization (S := S) (A := R) (Aₛ := R') | ||
exact (Submonoid.map_id S).symm | ||
|
||
instance {A} [CommRing A] [Algebra R A] [IsLocalization S A] : | ||
IsLocalizedModule S (Algebra.linearMap R A) := | ||
(isLocalizedModule_iff_isLocalization' S _).mpr inferInstance | ||
|
||
end IsLocalizedModule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.