Derivations #
This file defines derivation. A derivation D
from the R
-algebra A
to the A
-module M
is an
R
-linear map that satisfy the Leibniz rule D (a * b) = a * D b + D a * b
.
Main results #
derivation
: The type ofR
-derivations fromA
toM
. This has anA
-module structure.derivation.llcomp
: We may compose linear maps and derivations to obtain a derivation, and the composition is bilinear.derivation.lie_algebra
: TheR
-derivations fromA
toA
form an lie algebra overR
.derivation_to_square_zero_equiv_lift
: TheR
-derivations fromA
into a square-zero idealI
ofB
corresponds to the liftsA →ₐ[R] B
of the mapA →ₐ[R] B ⧸ I
.kaehler_differential
: The module of kaehler differentials. For anR
-algebraS
, we provide the notationΩ[S⁄R]
forkaehler_differential R S
. Note that the slash is\textfractionsolidus
.kaehler_differential.D
: The derivation into the module of kaehler differentials.kaehler_differential.span_range_derivation
: The image ofD
spansΩ[S⁄R]
as anS
-module.kaehler_differential.linear_map_equiv_derivation
: The isomorphismHom_R(Ω[S⁄R], M) ≃ₗ[S] Der_R(S, M)
.
Future project #
Generalize this into bimodules.
- to_linear_map : A →ₗ[R] M
- map_one_eq_zero' : ⇑(self.to_linear_map) 1 = 0
- leibniz' : ∀ (a b : A), ⇑(self.to_linear_map) (a * b) = a • ⇑(self.to_linear_map) b + b • ⇑(self.to_linear_map) a
D : derivation R A M
is an R
-linear map from A
to M
that satisfies the leibniz
equality. We also require that D 1 = 0
. See derivation.mk'
for a constructor that deduces this
assumption from the Leibniz rule when M
is cancellative.
TODO: update this when bimodules are defined.
Instances for derivation
- derivation.has_smul
- derivation.distrib_mul_action
- derivation.module
- derivation.has_sizeof_inst
- derivation.add_monoid_hom_class
- derivation.has_coe_to_fun
- derivation.has_coe_to_linear_map
- derivation.has_zero
- derivation.has_add
- derivation.inhabited
- derivation.add_comm_monoid
- derivation.is_central_scalar
- derivation.is_scalar_tower
- derivation.has_neg
- derivation.has_sub
- derivation.add_comm_group
- derivation.has_bracket
- derivation.lie_ring
- derivation.lie_algebra
- left_invariant_derivation.derivation.has_coe
Equations
- derivation.add_monoid_hom_class = {coe := λ (D : derivation R A M), D.to_linear_map.to_fun, coe_injective' := _, map_add := _, map_zero := _}
Helper instance for when there's too many metavariables to apply fun_like.has_coe_to_fun
directly.
Equations
- derivation.has_coe_to_fun = {coe := λ (D : derivation R A M), D.to_linear_map.to_fun}
Equations
- derivation.has_coe_to_linear_map = {coe := λ (D : derivation R A M), D.to_linear_map}
If adjoin of a set is the whole algebra, then any two derivations equal on this set are equal on the whole algebra.
Equations
- derivation.has_zero = {zero := {to_linear_map := 0, map_one_eq_zero' := _, leibniz' := _}}
Equations
- derivation.has_add = {add := λ (D1 D2 : derivation R A M), {to_linear_map := ↑D1 + ↑D2, map_one_eq_zero' := _, leibniz' := _}}
Equations
- derivation.inhabited = {default := 0}
Equations
- derivation.has_smul = {smul := λ (r : S) (D : derivation R A M), {to_linear_map := r • ↑D, map_one_eq_zero' := _, leibniz' := _}}
Equations
- derivation.add_comm_monoid = function.injective.add_comm_monoid coe_fn derivation.coe_injective derivation.coe_zero derivation.coe_add derivation.add_comm_monoid._proof_3
coe_fn
as an add_monoid_hom
.
Equations
- derivation.coe_fn_add_monoid_hom = {to_fun := coe_fn derivation.has_coe_to_fun, map_zero' := _, map_add' := _}
Equations
- derivation.module = function.injective.module S derivation.coe_fn_add_monoid_hom derivation.coe_injective derivation.module._proof_1
We can push forward derivations using linear maps, i.e., the composition of a derivation with a linear map is a derivation. Furthermore, this operation is linear on the spaces of derivations.
Equations
- f.comp_der = {to_fun := λ (D : derivation R A M), {to_linear_map := ↑f.comp ↑D, map_one_eq_zero' := _, leibniz' := _}, map_add' := _, map_smul' := _}
The composition of a derivation with a linear map as a bilinear map
Define derivation R A M
from a linear map when M
is cancellative by verifying the Leibniz
rule.
Equations
- derivation.mk' D h = {to_linear_map := D, map_one_eq_zero' := _, leibniz' := h}
Equations
- derivation.has_neg = {neg := λ (D : derivation R A M), derivation.mk' (-↑D) _}
Equations
- derivation.has_sub = {sub := λ (D1 D2 : derivation R A M), derivation.mk' (↑D1 - ↑D2) _}
Equations
- derivation.add_comm_group = function.injective.add_comm_group coe_fn derivation.add_comm_group._proof_3 derivation.add_comm_group._proof_4 derivation.add_comm_group._proof_5 derivation.coe_neg derivation.coe_sub derivation.add_comm_group._proof_6 derivation.add_comm_group._proof_7
Lie structures #
The commutator of derivations is again a derivation.
Equations
- derivation.has_bracket = {bracket := λ (D1 D2 : derivation R A A), derivation.mk' ⁅↑D1,↑D2⁆ _}
Equations
- derivation.lie_ring = {to_add_comm_group := derivation.add_comm_group algebra.to_module, to_has_bracket := derivation.has_bracket _inst_3, add_lie := _, lie_add := _, lie_self := _, leibniz_lie := _}
Equations
- derivation.lie_algebra = {to_module := {to_distrib_mul_action := module.to_distrib_mul_action derivation.module, add_smul := _, zero_smul := _}, lie_smul := _}
If f₁ f₂ : A →ₐ[R] B
are two lifts of the same A →ₐ[R] B ⧸ I
,
we may define a map f₁ - f₂ : A →ₗ[R] I
.
Equations
- diff_to_ideal_of_quotient_comp_eq I f₁ f₂ e = linear_map.cod_restrict (submodule.restrict_scalars R I) (f₁.to_linear_map - f₂.to_linear_map) _
Given a tower of algebras R → A → B
, and a square-zero I : ideal B
, each lift A →ₐ[R] B
of the canonical map A →ₐ[R] B ⧸ I
corresponds to a R
-derivation from A
to I
.
Equations
- derivation_to_square_zero_of_lift I hI f e = {to_linear_map := {to_fun := (diff_to_ideal_of_quotient_comp_eq I f (is_scalar_tower.to_alg_hom R A B) _).to_fun, map_add' := _, map_smul' := _}, map_one_eq_zero' := _, leibniz' := _}
Given a tower of algebras R → A → B
, and a square-zero I : ideal B
, each R
-derivation
from A
to I
corresponds to a lift A →ₐ[R] B
of the canonical map A →ₐ[R] B ⧸ I
.
Equations
- lift_of_derivation_to_square_zero I hI f = {to_fun := ((submodule.restrict_scalars R I).subtype.comp f.to_linear_map + (is_scalar_tower.to_alg_hom R A B).to_linear_map).to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _, commutes' := _}
Given a tower of algebras R → A → B
, and a square-zero I : ideal B
,
there is a 1-1 correspondance between R
-derivations from A
to I
and
lifts A →ₐ[R] B
of the canonical map A →ₐ[R] B ⧸ I
.
Equations
- derivation_to_square_zero_equiv_lift I hI = {to_fun := λ (d : derivation R A ↥I), ⟨lift_of_derivation_to_square_zero I hI d, _⟩, inv_fun := λ (f : {f // (ideal.quotient.mkₐ R I).comp f = is_scalar_tower.to_alg_hom R A (B ⧸ I)}), derivation_to_square_zero_of_lift I hI f.val _, left_inv := _, right_inv := _}
The kernel of the multiplication map S ⊗[R] S →ₐ[R] S
.
For a R
-derivation S → M
, this is the map S ⊗[R] S →ₗ[S] M
sending s ⊗ₜ t ↦ s • D t
.
Equations
- D.tensor_product_to = tensor_product.algebra_tensor_module.lift (⇑((linear_map.lsmul S (S →ₗ[R] M)).flip) D.to_linear_map)
The kernel of S ⊗[R] S →ₐ[R] S
is generated by 1 ⊗ s - s ⊗ 1
as a S
-module.
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
kaehler_differential.tensor_product_to_surjective
and derivation.tensor_product_to_tmul
.
We also provide the notation Ω[S⁄R]
for kaehler_differential R S
.
Note that the slash is \textfractionsolidus
.
(Implementation) The underlying linear map of the derivation into Ω[S⁄R]
.
Equations
- kaehler_differential.D_linear_map R S = (linear_map.restrict_scalars R (kaehler_differential.ideal R S).to_cotangent).comp (linear_map.cod_restrict (submodule.restrict_scalars R (kaehler_differential.ideal R S)) (algebra.tensor_product.include_right.to_linear_map - algebra.tensor_product.include_left.to_linear_map) _)
The universal derivation into Ω[S⁄R]
.
Equations
- kaehler_differential.D R S = {to_linear_map := {to_fun := (kaehler_differential.D_linear_map R S).to_fun, map_add' := _, map_smul' := _}, map_one_eq_zero' := _, leibniz' := _}
The linear map from Ω[S⁄R]
, associated with a derivation.
Equations
The S
-linear maps from Ω[S⁄R]
to M
are (S
-linearly) equivalent to R
-derivations
from S
to M
.
Equations
- kaehler_differential.linear_map_equiv_derivation R S = {to_fun := (⇑(derivation.llcomp.flip) (kaehler_differential.D R S)).to_fun, map_add' := _, map_smul' := _, inv_fun := derivation.lift_kaehler_differential _inst_7, left_inv := _, right_inv := _}