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

Commit b40c140

Browse files
committed
feat(ring_theory/derivation): A presentation of the Kähler differential module (#17011)
We add an alternative description of `Ω[S⁄R]`, presenting it as `S` copies of `S` with kernel generated by the relations: 1. `dx + dy = d(x + y)` 2. `x dy + y dx = d(x * y)` 3. `dr = 0` for `r ∈ R` Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 6075e17 commit b40c140

File tree

1 file changed

+175
-1
lines changed

1 file changed

+175
-1
lines changed

src/ring_theory/derivation.lean

Lines changed: 175 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,19 @@ This file defines derivation. A derivation `D` from the `R`-algebra `A` to the `
3131
- `kaehler_differential.span_range_derivation`: The image of `D` spans `Ω[S⁄R]` as an `S`-module.
3232
- `kaehler_differential.linear_map_equiv_derivation`:
3333
The isomorphism `Hom_R(Ω[S⁄R], M) ≃ₗ[S] Der_R(S, M)`.
34+
- `kaehler_differential.quot_ker_total_equiv`: An alternative description of `Ω[S⁄R]` as `S` copies
35+
of `S` with kernel (`kaehler_differential.ker_total`) generated by the relations:
36+
1. `dx + dy = d(x + y)`
37+
2. `x dy + y dx = d(x * y)`
38+
3. `dr = 0` for `r ∈ R`
3439
- `kaehler_differential.map`: Given a map between the arrows `R → A` and `S → B`, we have an
3540
`A`-linear map `Ω[A⁄R] → Ω[B⁄S]`.
3641
3742
## Future project
3843
39-
Generalize this into bimodules.
44+
- Generalize derivations into bimodules.
45+
- Define a `is_kaehler_differential` predicate.
46+
4047
-/
4148

4249
open algebra
@@ -717,6 +724,10 @@ begin
717724
derivation.tensor_product_to_tmul, one_smul, D.map_one_eq_zero, smul_zero, sub_zero],
718725
end
719726

727+
@[simp] lemma derivation.lift_kaehler_differential_comp_D (D' : derivation R S M) (x : S) :
728+
D'.lift_kaehler_differential (kaehler_differential.D R S x) = D' x :=
729+
derivation.congr_fun D'.lift_kaehler_differential_comp x
730+
720731
@[ext]
721732
lemma derivation.lift_kaehler_differential_unique
722733
(f f' : Ω[S⁄R] →ₗ[S] M)
@@ -847,6 +858,169 @@ def kaehler_differential.End_equiv :
847858
(kaehler_differential.ideal R S).cotangent_ideal_square).trans $
848859
kaehler_differential.End_equiv_aux_equiv R S
849860

861+
section presentation
862+
863+
open kaehler_differential (D)
864+
open finsupp (single)
865+
866+
/-- The `S`-submodule of `S →₀ S` (the direct sum of copies of `S` indexed by `S`) generated by
867+
the relations:
868+
1. `dx + dy = d(x + y)`
869+
2. `x dy + y dx = d(x * y)`
870+
3. `dr = 0` for `r ∈ R`
871+
where `db` is the unit in the copy of `S` with index `b`.
872+
873+
This is the kernel of the surjection `finsupp.total S Ω[S⁄R] S (kaehler_differential.D R S)`.
874+
See `kaehler_differential.ker_total_eq` and `kaehler_differential.total_surjective`.
875+
-/
876+
noncomputable
877+
def kaehler_differential.ker_total : submodule S (S →₀ S) :=
878+
submodule.span S
879+
((set.range (λ (x : S × S), single x.1 1 + single x.2 1 - single (x.1 + x.2) 1)) ∪
880+
(set.range (λ (x : S × S), single x.2 x.1 + single x.1 x.2 - single (x.1 * x.2) 1)) ∪
881+
(set.range (λ x : R, single (algebra_map R S x) 1)))
882+
883+
local notation x `𝖣` y := (kaehler_differential.ker_total R S).mkq (single y x)
884+
885+
lemma kaehler_differential.ker_total_mkq_single_add (x y z) :
886+
(z 𝖣 (x + y)) = (z 𝖣 x) + (z 𝖣 y) :=
887+
begin
888+
rw [← map_add, eq_comm, ← sub_eq_zero, ← map_sub, submodule.mkq_apply,
889+
submodule.quotient.mk_eq_zero],
890+
simp_rw [← finsupp.smul_single_one _ z, ← smul_add, ← smul_sub],
891+
exact submodule.smul_mem _ _ (submodule.subset_span (or.inl $ or.inl $ ⟨⟨_, _⟩, rfl⟩)),
892+
end
893+
894+
lemma kaehler_differential.ker_total_mkq_single_mul (x y z) :
895+
(z 𝖣 (x * y)) = ((z * x) 𝖣 y) + ((z * y) 𝖣 x) :=
896+
begin
897+
rw [← map_add, eq_comm, ← sub_eq_zero, ← map_sub, submodule.mkq_apply,
898+
submodule.quotient.mk_eq_zero],
899+
simp_rw [← finsupp.smul_single_one _ z, ← @smul_eq_mul _ _ z,
900+
← finsupp.smul_single, ← smul_add, ← smul_sub],
901+
exact submodule.smul_mem _ _ (submodule.subset_span (or.inl $ or.inr $ ⟨⟨_, _⟩, rfl⟩)),
902+
end
903+
904+
lemma kaehler_differential.ker_total_mkq_single_algebra_map (x y) :
905+
(y 𝖣 (algebra_map R S x)) = 0 :=
906+
begin
907+
rw [submodule.mkq_apply, submodule.quotient.mk_eq_zero, ← finsupp.smul_single_one _ y],
908+
exact submodule.smul_mem _ _ (submodule.subset_span (or.inr $ ⟨_, rfl⟩)),
909+
end
910+
911+
lemma kaehler_differential.ker_total_mkq_single_algebra_map_one (x) :
912+
(x 𝖣 1) = 0 :=
913+
begin
914+
rw [← (algebra_map R S).map_one, kaehler_differential.ker_total_mkq_single_algebra_map],
915+
end
916+
917+
lemma kaehler_differential.ker_total_mkq_single_smul (r : R) (x y) :
918+
(y 𝖣 (r • x)) = r • (y 𝖣 x) :=
919+
begin
920+
rw [algebra.smul_def, kaehler_differential.ker_total_mkq_single_mul,
921+
kaehler_differential.ker_total_mkq_single_algebra_map, add_zero,
922+
← linear_map.map_smul_of_tower, finsupp.smul_single, mul_comm, algebra.smul_def],
923+
end
924+
925+
/-- The (universal) derivation into `(S →₀ S) ⧸ kaehler_differential.ker_total R S`. -/
926+
noncomputable
927+
def kaehler_differential.derivation_quot_ker_total :
928+
derivation R S ((S →₀ S) ⧸ kaehler_differential.ker_total R S) :=
929+
{ to_fun := λ x, 1 𝖣 x,
930+
map_add' := λ x y, kaehler_differential.ker_total_mkq_single_add _ _ _ _ _,
931+
map_smul' := λ r s, kaehler_differential.ker_total_mkq_single_smul _ _ _ _ _,
932+
map_one_eq_zero' := kaehler_differential.ker_total_mkq_single_algebra_map_one _ _ _,
933+
leibniz' := λ a b, (kaehler_differential.ker_total_mkq_single_mul _ _ _ _ _).trans
934+
(by { simp_rw [← finsupp.smul_single_one _ (1 * _ : S)], dsimp, simp }) }
935+
936+
lemma kaehler_differential.derivation_quot_ker_total_apply (x) :
937+
kaehler_differential.derivation_quot_ker_total R S x = (1 𝖣 x) := rfl
938+
939+
lemma kaehler_differential.derivation_quot_ker_total_lift_comp_total :
940+
(kaehler_differential.derivation_quot_ker_total R S).lift_kaehler_differential.comp
941+
(finsupp.total S Ω[S⁄R] S (kaehler_differential.D R S)) = submodule.mkq _ :=
942+
begin
943+
apply finsupp.lhom_ext,
944+
intros a b,
945+
conv_rhs { rw [← finsupp.smul_single_one a b, linear_map.map_smul] },
946+
simp [kaehler_differential.derivation_quot_ker_total_apply],
947+
end
948+
949+
lemma kaehler_differential.ker_total_eq :
950+
(finsupp.total S Ω[S⁄R] S (kaehler_differential.D R S)).ker =
951+
kaehler_differential.ker_total R S :=
952+
begin
953+
apply le_antisymm,
954+
{ conv_rhs { rw ← (kaehler_differential.ker_total R S).ker_mkq },
955+
rw ← kaehler_differential.derivation_quot_ker_total_lift_comp_total,
956+
exact linear_map.ker_le_ker_comp _ _ },
957+
{ rw [kaehler_differential.ker_total, submodule.span_le],
958+
rintros _ ((⟨⟨x, y⟩, rfl⟩|⟨⟨x, y⟩, rfl⟩)|⟨x, rfl⟩); dsimp; simp [linear_map.mem_ker] },
959+
end
960+
961+
lemma kaehler_differential.total_surjective :
962+
function.surjective (finsupp.total S Ω[S⁄R] S (kaehler_differential.D R S)) :=
963+
begin
964+
rw [← linear_map.range_eq_top, finsupp.range_total, kaehler_differential.span_range_derivation],
965+
end
966+
967+
/-- `Ω[S⁄R]` is isomorphic to `S` copies of `S` with kernel `kaehler_differential.ker_total`. -/
968+
@[simps] noncomputable
969+
def kaehler_differential.quot_ker_total_equiv :
970+
((S →₀ S) ⧸ kaehler_differential.ker_total R S) ≃ₗ[S] Ω[S⁄R] :=
971+
{ inv_fun := (kaehler_differential.derivation_quot_ker_total R S).lift_kaehler_differential,
972+
left_inv := begin
973+
intro x,
974+
obtain ⟨x, rfl⟩ := submodule.mkq_surjective _ x,
975+
exact linear_map.congr_fun
976+
(kaehler_differential.derivation_quot_ker_total_lift_comp_total R S : _) x,
977+
end,
978+
right_inv := begin
979+
intro x,
980+
obtain ⟨x, rfl⟩ := kaehler_differential.total_surjective R S x,
981+
erw linear_map.congr_fun
982+
(kaehler_differential.derivation_quot_ker_total_lift_comp_total R S : _) x,
983+
refl
984+
end,
985+
..(kaehler_differential.ker_total R S).liftq
986+
(finsupp.total S Ω[S⁄R] S (kaehler_differential.D R S))
987+
(kaehler_differential.ker_total_eq R S).ge }
988+
989+
lemma kaehler_differential.quot_ker_total_equiv_symm_comp_D :
990+
(kaehler_differential.quot_ker_total_equiv R S).symm.to_linear_map.comp_der
991+
(kaehler_differential.D R S) = kaehler_differential.derivation_quot_ker_total R S :=
992+
by convert
993+
(kaehler_differential.derivation_quot_ker_total R S).lift_kaehler_differential_comp using 0
994+
995+
variables (A B : Type*) [comm_ring A] [comm_ring B] [algebra R A] [algebra S B] [algebra R B]
996+
variables [algebra A B] [is_scalar_tower R S B] [is_scalar_tower R A B]
997+
998+
-- The map `(A →₀ A) →ₗ[A] (B →₀ B)`
999+
local notation `finsupp_map` := ((finsupp.map_range.linear_map (algebra.of_id A B).to_linear_map)
1000+
.comp (finsupp.lmap_domain A A (algebra_map A B)))
1001+
1002+
lemma kaehler_differential.ker_total_map (h : function.surjective (algebra_map A B)) :
1003+
(kaehler_differential.ker_total R A).map finsupp_map ⊔
1004+
submodule.span A (set.range (λ x : S, single (algebra_map S B x) (1 : B))) =
1005+
(kaehler_differential.ker_total S B).restrict_scalars _ :=
1006+
begin
1007+
rw [kaehler_differential.ker_total, submodule.map_span, kaehler_differential.ker_total,
1008+
← submodule.span_eq_restrict_scalars _ _ _ _ h],
1009+
simp_rw [set.image_union, submodule.span_union, ← set.image_univ, set.image_image,
1010+
set.image_univ, map_sub, map_add],
1011+
simp only [linear_map.comp_apply, finsupp.map_range.linear_map_apply, finsupp.map_range_single,
1012+
finsupp.lmap_domain_apply, finsupp.map_domain_single, alg_hom.to_linear_map_apply,
1013+
algebra.of_id_apply, ← is_scalar_tower.algebra_map_apply, map_one, map_add, map_mul],
1014+
simp_rw [sup_assoc, ← (h.prod_map h).range_comp],
1015+
congr' 3,
1016+
rw [sup_eq_right],
1017+
apply submodule.span_mono,
1018+
simp_rw is_scalar_tower.algebra_map_apply R S B,
1019+
exact set.range_comp_subset_range (algebra_map R S) (λ x, single (algebra_map S B x) (1 : B))
1020+
end
1021+
1022+
end presentation
1023+
8501024
section exact_sequence
8511025

8521026
local attribute [irreducible] kaehler_differential

0 commit comments

Comments
 (0)