# mathlibdocumentation

ring_theory.derivation

# 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.

## Notation #

The notation ⁅D1, D2⁆ is used for the commutator of two derivations.

TODO: this file is just a stub to go on with some PRs in the geometry section. It only implements the definition of derivations in commutative algebra. This will soon change: as soon as bimodules will be there in mathlib I will change this file to take into account the non-commutative case. Any development on the theory of derivations is discouraged until the definitive definition of derivation will be implemented.

def derivation.to_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (self : A M) :

The linear_map underlying a derivation.

structure derivation (R : Type u_1) (A : Type u_2) [ A] (M : Type u_3) [ M] [ M] [ M] :
Type (max u_2 u_3)

D : derivation R A M is an R-linear map from A to M that satisfies the leibniz equality. TODO: update this when bimodules are defined.

@[instance]
def derivation.has_coe_to_fun {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations
@[simp]
theorem derivation.to_fun_eq_coe {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
@[instance]
def derivation.has_coe_to_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
has_coe A M) (A →ₗ[R] M)
Equations
@[simp]
theorem derivation.to_linear_map_eq_coe {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
@[simp]
theorem derivation.mk_coe {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (f : A →ₗ[R] M) (h₁ : ∀ (x y : A), f (x + y) = f x + f y) (h₂ : ∀ (m : R) (x : A), f (m x) = m f x) (h₃ : ∀ (a b : A), f (a * b) = a f b + b f a) :
{to_fun := f, map_add' := h₁, map_smul' := h₂, leibniz' := h₃} = f
@[simp]
theorem derivation.coe_fn_coe {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (f : A M) :
theorem derivation.coe_injective {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
@[ext]
theorem derivation.ext {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] {D1 D2 : A M} (H : ∀ (a : A), D1 a = D2 a) :
D1 = D2
theorem derivation.congr_fun {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] {D1 D2 : A M} (h : D1 = D2) (a : A) :
D1 a = D2 a
@[simp]
theorem derivation.map_add {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (a b : A) :
D (a + b) = D a + D b
@[simp]
theorem derivation.map_zero {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
D 0 = 0
@[simp]
theorem derivation.map_smul {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (r : R) (a : A) :
D (r a) = r D a
@[simp]
theorem derivation.leibniz {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (a b : A) :
D (a * b) = a D b + b D a
@[simp]
theorem derivation.map_one_eq_zero {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
D 1 = 0
@[simp]
theorem derivation.map_algebra_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (r : R) :
D ( A) r) = 0
@[instance]
def derivation.has_zero {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations
@[simp]
theorem derivation.coe_zero {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
0 = 0
@[simp]
theorem derivation.coe_zero_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
0 = 0
theorem derivation.zero_apply {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (a : A) :
0 a = 0
@[instance]
def derivation.has_add {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations
@[simp]
theorem derivation.coe_add {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D1 D2 : A M) :
(D1 + D2) = D1 + D2
@[simp]
theorem derivation.coe_add_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D1 D2 : A M) :
(D1 + D2) = D1 + D2
theorem derivation.add_apply {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] {D1 D2 : A M} (a : A) :
(D1 + D2) a = D1 a + D2 a
@[instance]
def derivation.Rscalar {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M)
Equations
@[simp]
theorem derivation.coe_Rsmul {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (r : R) (D : A M) :
(r D) = r D
@[simp]
theorem derivation.coe_Rsmul_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (r : R) (D : A M) :
(r D) = r D
theorem derivation.Rsmul_apply {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (a : A) (r : R) (D : A M) :
(r D) a = r D a
@[instance]
def derivation.has_scalar {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M)
Equations
@[simp]
theorem derivation.coe_smul {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (a : A) (D : A M) :
(a D) = a D
@[simp]
theorem derivation.coe_smul_linear_map {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (a : A) (D : A M) :
(a D) = a D
theorem derivation.smul_apply {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (a : A) (D : A M) (b : A) :
(a D) b = a D b
@[instance]
def derivation.inhabited {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations
@[instance]
def derivation.add_comm_monoid {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations
def derivation.coe_fn_add_monoid_hom {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M →+ A → M

coe_fn as an add_monoid_hom.

Equations
@[instance]
def derivation.derivation.Rmodule {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M)
Equations
@[instance]
def derivation.module {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M)
Equations
@[instance]
def derivation.is_scalar_tower {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] :
A M)
def linear_map.comp_der {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] {N : Type u_4} [ N] [ N] [ N] (f : M →ₗ[A] N) :
A M →ₗ[R] A N

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
@[simp]
theorem derivation.coe_to_linear_map_comp {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) {N : Type u_4} [ N] [ N] [ N] (f : M →ₗ[A] N) :
@[simp]
theorem derivation.coe_comp {R : Type u_1} {A : Type u_2} [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) {N : Type u_4} [ N] [ N] [ N] (f : M →ₗ[A] N) :
@[simp]
theorem derivation.map_neg {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (a : A) :
D (-a) = -D a
@[simp]
theorem derivation.map_sub {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (a b : A) :
D (a - b) = D a - D b
@[instance]
def derivation.has_neg {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] :
has_neg A M)
Equations
@[simp]
theorem derivation.coe_neg {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
@[simp]
theorem derivation.coe_neg_linear_map {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) :
theorem derivation.neg_apply {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D : A M) (a : A) :
(-D) a = -D a
@[instance]
def derivation.has_sub {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] :
has_sub A M)
Equations
@[simp]
theorem derivation.coe_sub {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D1 D2 : A M) :
(D1 - D2) = D1 - D2
@[simp]
theorem derivation.coe_sub_linear_map {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] (D1 D2 : A M) :
(D1 - D2) = D1 - D2
theorem derivation.sub_apply {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] {D1 D2 : A M} (a : A) :
(D1 - D2) a = D1 a - D2 a
@[instance]
def derivation.add_comm_group {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {M : Type u_3} [ M] [ M] [ M] :
Equations

# Lie structures #

@[instance]
def derivation.has_bracket {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] :
has_bracket A A) A A)

The commutator of derivations is again a derivation.

Equations
@[simp]
theorem derivation.commutator_coe_linear_map {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {D1 D2 : A A} :
theorem derivation.commutator_apply {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] {D1 D2 : A A} (a : A) :
D1,D2 a = D1 (D2 a) - D2 (D1 a)
@[instance]
def derivation.lie_ring {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] :
Equations
@[instance]
def derivation.lie_algebra {R : Type u_1} [comm_ring R] {A : Type u_2} [comm_ring A] [ A] :
A A)
Equations