Documentation

Mathlib.RingTheory.Kaehler.Basic

The module of kaehler differentials #

Main results #

Future project #

@[reducible, inline]
noncomputable abbrev KaehlerDifferential.ideal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The kernel of the multiplication map S ⊗[R] S →ₐ[R] S.

Equations
noncomputable def Derivation.tensorProductTo {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (D : Derivation R S M) :

For a R-derivation S → M, this is the map S ⊗[R] S →ₗ[S] M sending s ⊗ₜ t ↦ s • D t.

Equations
theorem Derivation.tensorProductTo_tmul {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (D : Derivation R S M) (s t : S) :
D.tensorProductTo (s ⊗ₜ[R] t) = s D t

The kernel of S ⊗[R] S →ₐ[R] S is generated by 1 ⊗ s - s ⊗ 1 as a S-module.

theorem KaehlerDifferential.span_range_eq_ideal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :
Ideal.span (Set.range fun (s : S) => 1 ⊗ₜ[R] s - s ⊗ₜ[R] 1) = ideal R S
noncomputable def KaehlerDifferential (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The module of Kähler differentials (Kahler differentials, Kaehler differentials). This is implemented as I / I ^ 2 with I the kernel of the multiplication map S ⊗[R] S →ₐ[R] S. To view elements as a linear combination of the form s • D s', use KaehlerDifferential.tensorProductTo_surjective and Derivation.tensorProductTo_tmul.

We also provide the notation Ω[S⁄R] for KaehlerDifferential R S. Note that the slash is \textfractionsolidus.

Equations

The module of Kähler differentials (Kahler differentials, Kaehler differentials). This is implemented as I / I ^ 2 with I the kernel of the multiplication map S ⊗[R] S →ₐ[R] S. To view elements as a linear combination of the form s • D s', use KaehlerDifferential.tensorProductTo_surjective and Derivation.tensorProductTo_tmul.

We also provide the notation Ω[S⁄R] for KaehlerDifferential R S. Note that the slash is \textfractionsolidus.

Equations
  • One or more equations did not get rendered due to their size.
instance KaehlerDifferential.isScalarTower_of_tower (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {R₁ : Type u_2} {R₂ : Type u_3} [CommRing R₁] [CommRing R₂] [Algebra R₁ S] [Algebra R₂ S] [SMul R₁ R₂] [SMulCommClass R R₁ S] [SMulCommClass R R₂ S] [IsScalarTower R₁ R₂ S] :
IsScalarTower R₁ R₂ (Ω[SR])
noncomputable def KaehlerDifferential.fromIdeal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The quotient map I → Ω[S⁄R] with I being the kernel of S ⊗[R] S → S.

Equations
noncomputable def KaehlerDifferential.DLinearMap (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

(Implementation) The underlying linear map of the derivation into Ω[S⁄R].

Equations
  • One or more equations did not get rendered due to their size.
theorem KaehlerDifferential.DLinearMap_apply (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (s : S) :
(DLinearMap R S) s = (ideal R S).toCotangent 1 ⊗ₜ[R] s - s ⊗ₜ[R] 1,
noncomputable def KaehlerDifferential.D (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The universal derivation into Ω[S⁄R].

Equations
theorem KaehlerDifferential.D_apply (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (s : S) :
(D R S) s = (ideal R S).toCotangent 1 ⊗ₜ[R] s - s ⊗ₜ[R] 1,

Ω[S⁄R] is trivial if R → S is surjective. Also see Algebra.FormallyUnramified.iff_subsingleton_kaehlerDifferential.

noncomputable def Derivation.liftKaehlerDifferential {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (D : Derivation R S M) :

The linear map from Ω[S⁄R], associated with a derivation.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem Derivation.liftKaehlerDifferential_comp_D {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (D' : Derivation R S M) (x : S) :
theorem Derivation.liftKaehlerDifferential_unique {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (f f' : Ω[SR] →ₗ[S] M) (hf : f.compDer (KaehlerDifferential.D R S) = f'.compDer (KaehlerDifferential.D R S)) :
f = f'
theorem KaehlerDifferential.D_tensorProductTo {R : Type u} {S : Type v} [CommRing R] [CommRing S] [Algebra R S] (x : (ideal R S)) :
(D R S).tensorProductTo x = (ideal R S).toCotangent x
noncomputable def KaehlerDifferential.linearMapEquivDerivation (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] :

The S-linear maps from Ω[S⁄R] to M are (S-linearly) equivalent to R-derivations from S to M.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem KaehlerDifferential.linearMapEquivDerivation_apply_apply (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] {M : Type u_1} [AddCommGroup M] [Module R M] [Module S M] [IsScalarTower R S M] (m : Ω[SR] →ₗ[S] M) (a✝ : S) :
((linearMapEquivDerivation R S) m) a✝ = m ((D R S) a✝)
noncomputable def KaehlerDifferential.quotientCotangentIdeal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The quotient ring of S ⊗ S ⧸ J ^ 2 by Ω[S⁄R] is isomorphic to S as an S-algebra.

Equations
noncomputable def smul_SSmod_SSmod (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

Equations

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

noncomputable def instS (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

Equations
noncomputable def instR (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

Equations
noncomputable def instSS (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

A shortcut instance to prevent timing out. Hopefully to be removed in the future.

Equations

Derivations into Ω[S⁄R] is equivalent to derivations into (KaehlerDifferential.ideal R S).cotangentIdeal.

Equations

The endomorphisms of Ω[S⁄R] corresponds to sections of the surjection S ⊗[R] S ⧸ J ^ 2 →ₐ[R] S, with J being the kernel of the multiplication map S ⊗[R] S →ₐ[R] S.

Equations
  • One or more equations did not get rendered due to their size.
noncomputable def KaehlerDifferential.kerTotal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

The S-submodule of S →₀ S (the direct sum of copies of S indexed by S) generated by the relations:

  1. dx + dy = d(x + y)
  2. x dy + y dx = d(x * y)
  3. dr = 0 for r ∈ R where db is the unit in the copy of S with index b.

This is the kernel of the surjection Finsupp.linearCombination S Ω[S⁄R] S (KaehlerDifferential.D R S). See KaehlerDifferential.kerTotal_eq and KaehlerDifferential.linearCombination_surjective.

Equations
  • One or more equations did not get rendered due to their size.
theorem KaehlerDifferential.kerTotal_mkQ_single_add (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (x y z : S) :
theorem KaehlerDifferential.kerTotal_mkQ_single_mul (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (x y z : S) :
(kerTotal R S).mkQ (Finsupp.single (x * y) z) = (kerTotal R S).mkQ (Finsupp.single y (z * x)) + (kerTotal R S).mkQ (Finsupp.single x (z * y))
theorem KaehlerDifferential.kerTotal_mkQ_single_algebraMap (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (x : R) (y : S) :
(kerTotal R S).mkQ (Finsupp.single ((algebraMap R S) x) y) = 0
theorem KaehlerDifferential.kerTotal_mkQ_single_smul (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (r : R) (x y : S) :
(kerTotal R S).mkQ (Finsupp.single (r x) y) = r (kerTotal R S).mkQ (Finsupp.single x y)
noncomputable def KaehlerDifferential.derivationQuotKerTotal (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :
Derivation R S ((S →₀ S) kerTotal R S)

The (universal) derivation into (S →₀ S) ⧸ KaehlerDifferential.kerTotal R S.

Equations
  • One or more equations did not get rendered due to their size.
noncomputable def KaehlerDifferential.quotKerTotalEquiv (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] :

Ω[S⁄R] is isomorphic to S copies of S with kernel KaehlerDifferential.kerTotal.

Equations
  • One or more equations did not get rendered due to their size.

Given the commutative diagram

A --→ B
↑     ↑
|     |
R --→ S

The kernel of the presentation ⊕ₓ B dx ↠ Ω_{B/S} is spanned by the image of the kernel of ⊕ₓ A dx ↠ Ω_{A/R} and all ds with s : S. See kerTotal_map' for the special case where R = S.

This is a special case of kerTotal_map where R = S. The kernel of the presentation ⊕ₓ B dx ↠ Ω_{B/R} is spanned by the image of the kernel of ⊕ₓ A dx ↠ Ω_{A/R} and all da with a : A.

noncomputable def KaehlerDifferential.map (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra S B] [Algebra R B] [IsScalarTower R A B] [IsScalarTower R S B] [SMulCommClass S A B] :

The map Ω[A⁄R] →ₗ[A] Ω[B⁄S] given a square

A --→ B
↑     ↑
|     |
R --→ S
Equations
theorem KaehlerDifferential.map_compDer (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra S B] [Algebra R B] [IsScalarTower R A B] [IsScalarTower R S B] [SMulCommClass S A B] :
@[simp]
theorem KaehlerDifferential.map_D (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra S B] [Algebra R B] [IsScalarTower R A B] [IsScalarTower R S B] [SMulCommClass S A B] (x : A) :
(map R S A B) ((D R A) x) = (D S B) ((algebraMap A B) x)
theorem KaehlerDifferential.map_surjective_of_surjective (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra S B] [Algebra R B] [IsScalarTower R A B] [IsScalarTower R S B] [SMulCommClass S A B] (h : Function.Surjective (algebraMap A B)) :
theorem KaehlerDifferential.map_surjective (R : Type u) (S : Type v) [CommRing R] [CommRing S] [Algebra R S] (B : Type u_3) [CommRing B] [Algebra S B] [Algebra R B] [IsScalarTower R S B] :
noncomputable def KaehlerDifferential.mapBaseChange (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra R B] [IsScalarTower R A B] :

The lift of the map Ω[A⁄R] →ₗ[A] Ω[B⁄R] to the base change along A → B. This is the first map in the exact sequence B ⊗[A] Ω[A⁄R] → Ω[B⁄R] → Ω[B⁄A] → 0.

Equations
@[simp]
theorem KaehlerDifferential.mapBaseChange_tmul (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra R B] [IsScalarTower R A B] (x : B) (y : Ω[AR]) :
(mapBaseChange R A B) (x ⊗ₜ[A] y) = x (map R R A B) y
theorem KaehlerDifferential.range_mapBaseChange (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra R B] [IsScalarTower R A B] :
theorem KaehlerDifferential.exact_mapBaseChange_map (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] [Algebra R B] [IsScalarTower R A B] :
Function.Exact (mapBaseChange R A B) (map R A B B)

The sequence B ⊗[A] Ω[A⁄R] → Ω[B⁄R] → Ω[B⁄A] → 0 is exact. Also see KaehlerDifferential.map_surjective.

noncomputable def KaehlerDifferential.kerToTensor (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] :

The map I → B ⊗[A] Ω[A⁄R] where I = ker(A → B).

Equations
@[simp]
theorem KaehlerDifferential.kerToTensor_apply (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] (x : (RingHom.ker (algebraMap A B))) :
(kerToTensor R A B) x = 1 ⊗ₜ[A] (D R A) x
noncomputable def KaehlerDifferential.kerCotangentToTensor (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] :

The map I/I² → B ⊗[A] Ω[A⁄R] where I = ker(A → B).

Equations
@[simp]
theorem KaehlerDifferential.kerCotangentToTensor_toCotangent (R : Type u) [CommRing R] (A : Type u_2) (B : Type u_3) [CommRing A] [CommRing B] [Algebra R A] [Algebra A B] (x : (RingHom.ker (algebraMap A B))) :