@@ -31,12 +31,19 @@ This file defines derivation. A derivation `D` from the `R`-algebra `A` to the `
31
31
- `kaehler_differential.span_range_derivation`: The image of `D` spans `Ω[S⁄R]` as an `S`-module.
32
32
- `kaehler_differential.linear_map_equiv_derivation`:
33
33
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`
34
39
- `kaehler_differential.map`: Given a map between the arrows `R → A` and `S → B`, we have an
35
40
`A`-linear map `Ω[A⁄R] → Ω[B⁄S]`.
36
41
37
42
## Future project
38
43
39
- Generalize this into bimodules.
44
+ - Generalize derivations into bimodules.
45
+ - Define a `is_kaehler_differential` predicate.
46
+
40
47
-/
41
48
42
49
open algebra
@@ -717,6 +724,10 @@ begin
717
724
derivation.tensor_product_to_tmul, one_smul, D.map_one_eq_zero, smul_zero, sub_zero],
718
725
end
719
726
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
+
720
731
@[ext]
721
732
lemma derivation.lift_kaehler_differential_unique
722
733
(f f' : Ω[S⁄R] →ₗ[S] M)
@@ -847,6 +858,169 @@ def kaehler_differential.End_equiv :
847
858
(kaehler_differential.ideal R S).cotangent_ideal_square).trans $
848
859
kaehler_differential.End_equiv_aux_equiv R S
849
860
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
+
850
1024
section exact_sequence
851
1025
852
1026
local attribute [irreducible] kaehler_differential
0 commit comments