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

Commit 28e5032

Browse files
committed
feat(ring_theory/derivation): Endomorphisms of the Kähler differential module (#15854)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 54619e0 commit 28e5032

File tree

6 files changed

+116
-2
lines changed

6 files changed

+116
-2
lines changed

src/algebra/module/submodule/basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ instance [has_smul S R] [has_smul S M] [is_scalar_tower S R M] :
167167
instance [has_smul S R] [has_smul S M] [is_scalar_tower S R M] : is_scalar_tower S R p :=
168168
p.to_sub_mul_action.is_scalar_tower
169169

170+
instance is_scalar_tower' {S' : Type*}
171+
[has_smul S R] [has_smul S M] [has_smul S' R] [has_smul S' M] [has_smul S S']
172+
[is_scalar_tower S' R M] [is_scalar_tower S S' M] [is_scalar_tower S R M] :
173+
is_scalar_tower S S' p :=
174+
p.to_sub_mul_action.is_scalar_tower'
175+
170176
instance
171177
[has_smul S R] [has_smul S M] [is_scalar_tower S R M]
172178
[has_smul Sᵐᵒᵖ R] [has_smul Sᵐᵒᵖ M] [is_scalar_tower Sᵐᵒᵖ R M]

src/group_theory/group_action/sub_mul_action.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,11 @@ instance has_smul' : has_smul S p :=
117117
instance : is_scalar_tower S R p :=
118118
{ smul_assoc := λ s r x, subtype.ext $ smul_assoc s r ↑x }
119119

120+
instance is_scalar_tower' {S' : Type*} [has_smul S' R] [has_smul S' S]
121+
[has_smul S' M] [is_scalar_tower S' R M] [is_scalar_tower S' S M] :
122+
is_scalar_tower S' S p :=
123+
{ smul_assoc := λ s r x, subtype.ext $ smul_assoc s r ↑x }
124+
120125
@[simp, norm_cast] lemma coe_smul_of_tower (s : S) (x : p) : ((s • x : p) : M) = s • ↑x := rfl
121126

122127
@[simp] lemma smul_mem_iff' {G} [group G] [has_smul G R] [mul_action G M]

src/ring_theory/derivation.lean

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Nicolò Cavalleri, Andrew Yang
66

77
import ring_theory.adjoin.basic
88
import algebra.lie.of_associative
9+
import ring_theory.ideal.cotangent
910
import ring_theory.tensor_product
1011
import ring_theory.ideal.cotangent
1112

@@ -211,7 +212,7 @@ section push_forward
211212

212213
variables {N : Type*} [add_comm_monoid N] [module A N] [module R N] [is_scalar_tower R A M]
213214
[is_scalar_tower R A N]
214-
variables (f : M →ₗ[A] N)
215+
variables (f : M →ₗ[A] N) (e : M ≃ₗ[A] N)
215216

216217
/-- We can push forward derivations using linear maps, i.e., the composition of a derivation with a
217218
linear map is a derivation. Furthermore, this operation is linear on the spaces of derivations. -/
@@ -233,11 +234,20 @@ rfl
233234
rfl
234235

235236
/-- The composition of a derivation with a linear map as a bilinear map -/
237+
@[simps]
236238
def llcomp : (M →ₗ[A] N) →ₗ[A] derivation R A M →ₗ[R] derivation R A N :=
237239
{ to_fun := λ f, f.comp_der,
238240
map_add' := λ f₁ f₂, by { ext, refl },
239241
map_smul' := λ r D, by { ext, refl } }
240242

243+
/-- Pushing a derivation foward through a linear equivalence is an equivalence. -/
244+
def _root_.linear_equiv.comp_der : derivation R A M ≃ₗ[R] derivation R A N :=
245+
{ inv_fun := e.symm.to_linear_map.comp_der,
246+
left_inv := λ D, by { ext a, exact e.symm_apply_apply (D a) },
247+
right_inv := λ D, by { ext a, exact e.apply_symm_apply (D a) },
248+
..e.to_linear_map.comp_der }
249+
250+
241251
end push_forward
242252

243253
end
@@ -356,7 +366,7 @@ section to_square_zero
356366

357367
universes u v w
358368

359-
variables {R : Type u} {A : Type u} {B : Type w} [comm_semiring R] [comm_semiring A] [comm_ring B]
369+
variables {R : Type u} {A : Type v} {B : Type w} [comm_semiring R] [comm_semiring A] [comm_ring B]
360370
variables [algebra R A] [algebra R B] (I : ideal B) (hI : I ^ 2 = ⊥)
361371

362372
/-- If `f₁ f₂ : A →ₐ[R] B` are two lifts of the same `A →ₐ[R] B ⧸ I`,
@@ -721,4 +731,81 @@ def kaehler_differential.linear_map_equiv_derivation : (Ω[S⁄R] →ₗ[S] M)
721731
right_inv := derivation.lift_kaehler_differential_comp,
722732
..(derivation.llcomp.flip $ kaehler_differential.D R S) }
723733

734+
/-- The quotient ring of `S ⊗ S ⧸ J ^ 2` by `Ω[S⁄R]` is isomorphic to `S`. -/
735+
def kaehler_differential.quotient_cotangent_ideal_ring_equiv :
736+
(S ⊗ S ⧸ kaehler_differential.ideal R S ^ 2) ⧸
737+
(kaehler_differential.ideal R S).cotangent_ideal ≃+* S :=
738+
begin
739+
have : function.right_inverse tensor_product.include_left
740+
(↑(tensor_product.lmul' R : S ⊗[R] S →ₐ[R] S) : S ⊗[R] S →+* S),
741+
{ intro x, rw [alg_hom.coe_to_ring_hom, ← alg_hom.comp_apply,
742+
tensor_product.lmul'_comp_include_left], refl },
743+
refine (ideal.quot_cotangent _).trans _,
744+
refine (ideal.quot_equiv_of_eq _).trans (ring_hom.quotient_ker_equiv_of_right_inverse this),
745+
ext, refl,
746+
end
747+
748+
/-- The quotient ring of `S ⊗ S ⧸ J ^ 2` by `Ω[S⁄R]` is isomorphic to `S` as an `S`-algebra. -/
749+
def kaehler_differential.quotient_cotangent_ideal :
750+
((S ⊗ S ⧸ kaehler_differential.ideal R S ^ 2) ⧸
751+
(kaehler_differential.ideal R S).cotangent_ideal) ≃ₐ[S] S :=
752+
{ commutes' := (kaehler_differential.quotient_cotangent_ideal_ring_equiv R S).apply_symm_apply,
753+
..kaehler_differential.quotient_cotangent_ideal_ring_equiv R S }
754+
755+
lemma kaehler_differential.End_equiv_aux (f : S →ₐ[R] S ⊗ S ⧸ kaehler_differential.ideal R S ^ 2) :
756+
(ideal.quotient.mkₐ R (kaehler_differential.ideal R S).cotangent_ideal).comp f =
757+
is_scalar_tower.to_alg_hom R S _ ↔
758+
(tensor_product.lmul' R : S ⊗[R] S →ₐ[R] S).ker_square_lift.comp f = alg_hom.id R S :=
759+
begin
760+
rw [alg_hom.ext_iff, alg_hom.ext_iff],
761+
apply forall_congr,
762+
intro x,
763+
have e₁ : (tensor_product.lmul' R : S ⊗[R] S →ₐ[R] S).ker_square_lift (f x) =
764+
kaehler_differential.quotient_cotangent_ideal_ring_equiv R S
765+
(ideal.quotient.mk (kaehler_differential.ideal R S).cotangent_ideal $ f x),
766+
{ generalize : f x = y, obtain ⟨y, rfl⟩ := ideal.quotient.mk_surjective y, refl },
767+
have e₂ : x = kaehler_differential.quotient_cotangent_ideal_ring_equiv
768+
R S (is_scalar_tower.to_alg_hom R S _ x),
769+
{ exact ((tensor_product.lmul'_apply_tmul x 1).trans (mul_one x)).symm },
770+
split,
771+
{ intro e,
772+
exact (e₁.trans (@ring_equiv.congr_arg _ _ _ _ _ _
773+
(kaehler_differential.quotient_cotangent_ideal_ring_equiv R S) _ _ e)).trans e₂.symm },
774+
{ intro e, apply (kaehler_differential.quotient_cotangent_ideal_ring_equiv R S).injective,
775+
exact e₁.symm.trans (e.trans e₂) }
776+
end
777+
778+
/-- Derivations into `Ω[S⁄R]` is equivalent to derivations
779+
into `(kaehler_differential.ideal R S).cotangent_ideal` -/
780+
-- This has type
781+
-- `derivation R S Ω[ S / R ] ≃ₗ[R] derivation R S (kaehler_differential.ideal R S).cotangent_ideal`
782+
-- But lean times-out if this is given explicitly.
783+
noncomputable
784+
def kaehler_differential.End_equiv_derivation' :=
785+
@linear_equiv.comp_der R _ _ _ _ Ω[S⁄R] _ _ _ _ _ _ _ _ _
786+
((kaehler_differential.ideal R S).cotangent_equiv_ideal.restrict_scalars S)
787+
788+
/-- (Implementation) An `equiv` version of `kaehler_differential.End_equiv_aux`.
789+
Used in `kaehler_differential.End_equiv`. -/
790+
def kaehler_differential.End_equiv_aux_equiv :
791+
{f // (ideal.quotient.mkₐ R (kaehler_differential.ideal R S).cotangent_ideal).comp f =
792+
is_scalar_tower.to_alg_hom R S _ } ≃
793+
{ f // (tensor_product.lmul' R : S ⊗[R] S →ₐ[R] S).ker_square_lift.comp f = alg_hom.id R S } :=
794+
(equiv.refl _).subtype_equiv (kaehler_differential.End_equiv_aux R S)
795+
796+
/--
797+
The endomorphisms of `Ω[S⁄R]` corresponds to sections of the surjection `S ⊗[R] S ⧸ J ^ 2 →ₐ[R] S`,
798+
with `J` being the kernel of the multiplication map `S ⊗[R] S →ₐ[R] S`.
799+
-/
800+
noncomputable
801+
def kaehler_differential.End_equiv :
802+
module.End S Ω[S⁄R] ≃
803+
{ f // (tensor_product.lmul' R : S ⊗[R] S →ₐ[R] S).ker_square_lift.comp f = alg_hom.id R S } :=
804+
(kaehler_differential.linear_map_equiv_derivation R S).to_equiv.trans $
805+
(kaehler_differential.End_equiv_derivation' R S).to_equiv.trans $
806+
(derivation_to_square_zero_equiv_lift
807+
(kaehler_differential.ideal R S).cotangent_ideal
808+
(kaehler_differential.ideal R S).cotangent_ideal_square).trans $
809+
kaehler_differential.End_equiv_aux_equiv R S
810+
724811
end kaehler_differential

src/ring_theory/ideal/cotangent.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,14 @@ begin
179179
{ rintros _ ⟨x, hx, rfl⟩, exact hx }
180180
end
181181

182+
/-- The quotient ring of `I ⧸ I ^ 2` is `R ⧸ I`. -/
183+
def quot_cotangent : ((R ⧸ I ^ 2) ⧸ I.cotangent_ideal) ≃+* R ⧸ I :=
184+
begin
185+
refine (ideal.quot_equiv_of_eq (ideal.map_eq_submodule_map _ _).symm).trans _,
186+
refine (double_quot.quot_quot_equiv_quot_sup _ _).trans _,
187+
exact (ideal.quot_equiv_of_eq (sup_eq_right.mpr $ ideal.pow_le_self two_ne_zero)),
188+
end
189+
182190
end ideal
183191

184192
namespace local_ring

src/ring_theory/ideal/operations.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,12 @@ lemma mem_map_iff_of_surjective {I : ideal R} {y} :
12061206
lemma le_map_of_comap_le_of_surjective : comap f K ≤ I → K ≤ map f I :=
12071207
λ h, (map_comap_of_surjective f hf K) ▸ map_mono h
12081208

1209+
omit hf
1210+
1211+
lemma map_eq_submodule_map (f : R →+* S) [h : ring_hom_surjective f] (I : ideal R) :
1212+
I.map f = submodule.map f.to_semilinear_map I :=
1213+
submodule.ext (λ x, mem_map_iff_of_surjective f h.1)
1214+
12091215
end surjective
12101216

12111217
section injective

src/ring_theory/ideal/quotient.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ instance : unique (R ⧸ (⊤ : ideal R)) :=
121121
lemma mk_surjective : function.surjective (mk I) :=
122122
λ y, quotient.induction_on' y (λ x, exists.intro x rfl)
123123

124+
instance : ring_hom_surjective (mk I) := ⟨mk_surjective⟩
125+
124126
/-- If `I` is an ideal of a commutative ring `R`, if `q : R → R/I` is the quotient map, and if
125127
`s ⊆ R` is a subset, then `q⁻¹(q(s)) = ⋃ᵢ(i + s)`, the union running over all `i ∈ I`. -/
126128
lemma quotient_ring_saturate (I : ideal R) (s : set R) :

0 commit comments

Comments
 (0)