Lie derivations #
This file defines Lie derivations and establishes some basic properties.
Main definitions #
LieDerivation
: A Lie derivationD
from the LieR
-algebraL
to theL
-moduleM
is anR
-linear map that satisfies the Leibniz ruleD [a, b] = [a, D b] - [b, D a]
.
Main statements #
- Two Lie derivations equal on a set are equal on its Lie span.
- The set of Lie derivations from a Lie algebra to itself is a Lie algebra.
Implementation notes #
- Mathematically, a Lie derivation is just a derivation on a Lie algebra. However, the current
implementation of
Derivation
requires a commutative associative algebra, so is incompatible with the setting of Lie algebras. Initially, this file is a copy-pasted adaptation of theRingTheory.Derivation.Basic
file. - Since we don't have right actions of Lie algebras, the second term in the Leibniz rule is written
as
- [b, D a]
. Within Lie algebras, skew symmetry restores the expected definition[D a, b]
.
structure
LieDerivation
(R : Type u_1)
(L : Type u_2)
(M : Type u_3)
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
extends
LinearMap
:
Type (max u_2 u_3)
A Lie derivation D
from the Lie R
-algebra L
to the L
-module M
is an R
-linear map
that satisfies the Leibniz rule D [a, b] = [a, D b] - [b, D a]
.
- toFun : L → M
- map_smul' : ∀ (r : R) (x : L), self.toFun (r • x) = (RingHom.id R) r • self.toFun x
Instances For
instance
LieDerivation.instFunLikeLieDerivation
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
FunLike (LieDerivation R L M) L M
Equations
- LieDerivation.instFunLikeLieDerivation = { coe := fun (D : LieDerivation R L M) => D.toFun, coe_injective' := ⋯ }
instance
LieDerivation.instLinearMapClass
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
LinearMapClass (LieDerivation R L M) R L M
Equations
- ⋯ = ⋯
theorem
LieDerivation.toFun_eq_coe
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
:
D.toFun = ⇑D
def
LieDerivation.Simps.apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
:
L → M
See Note [custom simps projection]
Equations
Instances For
instance
LieDerivation.instCoeToLinearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Coe (LieDerivation R L M) (L →ₗ[R] M)
Equations
- LieDerivation.instCoeToLinearMap = { coe := fun (D : LieDerivation R L M) => ↑D }
@[simp]
@[simp]
theorem
LieDerivation.coeFn_coe
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(f : LieDerivation R L M)
:
⇑↑f = ⇑f
theorem
LieDerivation.coe_injective
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Function.Injective DFunLike.coe
theorem
LieDerivation.ext
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
(H : ∀ (a : L), D1 a = D2 a)
:
D1 = D2
theorem
LieDerivation.congr_fun
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
(h : D1 = D2)
(a : L)
:
D1 a = D2 a
@[simp]
theorem
LieDerivation.apply_lie_eq_sub
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
(a : L)
(b : L)
:
theorem
LieDerivation.eqOn_lieSpan
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
{s : Set L}
(h : Set.EqOn (⇑D1) (⇑D2) s)
:
Set.EqOn ⇑D1 ⇑D2 ↑(LieSubalgebra.lieSpan R L s)
Two Lie derivations equal on a set are equal on its Lie span.
theorem
LieDerivation.ext_of_lieSpan_eq_top
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
(s : Set L)
(hs : LieSubalgebra.lieSpan R L s = ⊤)
(h : Set.EqOn (⇑D1) (⇑D2) s)
:
D1 = D2
If the Lie span of a set is the whole Lie algebra, then two Lie derivations equal on this set are equal on the whole Lie algebra.
instance
LieDerivation.instZero
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Zero (LieDerivation R L M)
Equations
- LieDerivation.instZero = { zero := { toLinearMap := 0, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.coe_zero
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
⇑0 = 0
@[simp]
theorem
LieDerivation.coe_zero_linearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
↑0 = 0
theorem
LieDerivation.zero_apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(a : L)
:
0 a = 0
instance
LieDerivation.instInhabitedLieDerivation
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Inhabited (LieDerivation R L M)
Equations
- LieDerivation.instInhabitedLieDerivation = { default := 0 }
instance
LieDerivation.instAdd
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Add (LieDerivation R L M)
Equations
- LieDerivation.instAdd = { add := fun (D1 D2 : LieDerivation R L M) => { toLinearMap := ↑D1 + ↑D2, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.coe_add
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D1 : LieDerivation R L M)
(D2 : LieDerivation R L M)
:
@[simp]
theorem
LieDerivation.coe_add_linearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D1 : LieDerivation R L M)
(D2 : LieDerivation R L M)
:
theorem
LieDerivation.add_apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
(a : L)
:
theorem
LieDerivation.map_neg
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
(a : L)
:
theorem
LieDerivation.map_sub
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
(a : L)
(b : L)
:
instance
LieDerivation.instNeg
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Neg (LieDerivation R L M)
Equations
- LieDerivation.instNeg = { neg := fun (D : LieDerivation R L M) => { toLinearMap := -↑D, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.coe_neg
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
:
@[simp]
theorem
LieDerivation.coe_neg_linearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
:
theorem
LieDerivation.neg_apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D : LieDerivation R L M)
(a : L)
:
instance
LieDerivation.instSub
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
Sub (LieDerivation R L M)
Equations
- LieDerivation.instSub = { sub := fun (D1 D2 : LieDerivation R L M) => { toLinearMap := ↑D1 - ↑D2, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.coe_sub
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D1 : LieDerivation R L M)
(D2 : LieDerivation R L M)
:
@[simp]
theorem
LieDerivation.coe_sub_linearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(D1 : LieDerivation R L M)
(D2 : LieDerivation R L M)
:
theorem
LieDerivation.sub_apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(a : L)
{D1 : LieDerivation R L M}
{D2 : LieDerivation R L M}
:
class
LieDerivation.SMulBracketCommClass
(S : Type u_4)
(L : Type u_5)
(α : Type u_6)
[SMul S α]
[LieRing L]
[AddCommGroup α]
[LieRingModule L α]
:
A typeclass mixin saying that scalar multiplication and Lie bracket are left commutative.
•
and⁅⬝, ⬝⁆
are left commutative
Instances
instance
LieDerivation.instSMul
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
:
SMul S (LieDerivation R L M)
Equations
- LieDerivation.instSMul = { smul := fun (r : S) (D : LieDerivation R L M) => { toLinearMap := r • ↑D, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.coe_smul
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
(r : S)
(D : LieDerivation R L M)
:
@[simp]
theorem
LieDerivation.coe_smul_linearMap
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
(r : S)
(D : LieDerivation R L M)
:
theorem
LieDerivation.smul_apply
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
(a : L)
{S : Type u_4}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
(r : S)
(D : LieDerivation R L M)
:
instance
LieDerivation.instSMulNat
{L : Type u_2}
{M : Type u_3}
[LieRing L]
[AddCommGroup M]
[LieRingModule L M]
:
Equations
- ⋯ = ⋯
instance
LieDerivation.instSMulInt
{L : Type u_2}
{M : Type u_3}
[LieRing L]
[AddCommGroup M]
[LieRingModule L M]
:
Equations
- ⋯ = ⋯
instance
LieDerivation.instAddCommGroup
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
AddCommGroup (LieDerivation R L M)
Equations
- LieDerivation.instAddCommGroup = Function.Injective.addCommGroup DFunLike.coe ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
def
LieDerivation.coeFnAddMonoidHom
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
:
LieDerivation R L M →+ L → M
coe_fn
as an AddMonoidHom
.
Equations
- LieDerivation.coeFnAddMonoidHom = { toZeroHom := { toFun := DFunLike.coe, map_zero' := ⋯ }, map_add' := ⋯ }
Instances For
instance
LieDerivation.instDistribMulActionLieDerivationToAddMonoidToSubNegMonoidToAddGroupInstAddCommGroup
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
:
DistribMulAction S (LieDerivation R L M)
Equations
- LieDerivation.instDistribMulActionLieDerivationToAddMonoidToSubNegMonoidToAddGroupInstAddCommGroup = Function.Injective.distribMulAction LieDerivation.coeFnAddMonoidHom ⋯ ⋯
instance
LieDerivation.instIsScalarTowerLieDerivationInstSMulInstSMul
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
{T : Type u_5}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
[Monoid T]
[DistribMulAction T M]
[SMulCommClass R T M]
[LieDerivation.SMulBracketCommClass T L M]
[SMul S T]
[IsScalarTower S T M]
:
IsScalarTower S T (LieDerivation R L M)
Equations
- ⋯ = ⋯
instance
LieDerivation.instSMulCommClassLieDerivationInstSMulInstSMul
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
{T : Type u_5}
[Monoid S]
[DistribMulAction S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
[Monoid T]
[DistribMulAction T M]
[SMulCommClass R T M]
[LieDerivation.SMulBracketCommClass T L M]
[SMulCommClass S T M]
:
SMulCommClass S T (LieDerivation R L M)
Equations
- ⋯ = ⋯
instance
LieDerivation.instModule
{R : Type u_1}
{L : Type u_2}
{M : Type u_3}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
[AddCommGroup M]
[Module R M]
[LieRingModule L M]
[LieModule R L M]
{S : Type u_4}
[Semiring S]
[Module S M]
[SMulCommClass R S M]
[LieDerivation.SMulBracketCommClass S L M]
:
Module S (LieDerivation R L M)
Equations
- LieDerivation.instModule = Function.Injective.module S LieDerivation.coeFnAddMonoidHom ⋯ ⋯
instance
LieDerivation.instBracket
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
:
Bracket (LieDerivation R L L) (LieDerivation R L L)
The commutator of two Lie derivations on a Lie algebra is a Lie derivation.
Equations
- LieDerivation.instBracket = { bracket := fun (D1 D2 : LieDerivation R L L) => { toLinearMap := ⁅↑D1, ↑D2⁆, leibniz' := ⋯ } }
@[simp]
theorem
LieDerivation.commutator_coe_linear_map
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
{D1 : LieDerivation R L L}
{D2 : LieDerivation R L L}
:
theorem
LieDerivation.commutator_apply
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
{D1 : LieDerivation R L L}
{D2 : LieDerivation R L L}
(a : L)
:
instance
LieDerivation.instLieRingLieDerivationToAddCommGroupToModuleLieRingSelfModuleLieAlgebraSelfModule
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
:
LieRing (LieDerivation R L L)
Equations
- LieDerivation.instLieRingLieDerivationToAddCommGroupToModuleLieRingSelfModuleLieAlgebraSelfModule = LieRing.mk ⋯ ⋯ ⋯ ⋯
instance
LieDerivation.instSMulBracketCommClassToSMulToZeroToNegZeroClassToSubNegZeroMonoidToSubtractionMonoidToDivisionAddCommMonoidToAddCommGroupToSMulZeroClassToZeroToCommMonoidWithZeroToCommSemiringToSMulWithZeroToMonoidWithZeroToSemiringToMulActionWithZeroToAddCommMonoidToModuleLieRingSelfModule
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
:
Equations
- ⋯ = ⋯
instance
LieDerivation.instLieAlgebra
{R : Type u_1}
{L : Type u_2}
[CommRing R]
[LieRing L]
[LieAlgebra R L]
:
LieAlgebra R (LieDerivation R L L)
The set of Lie derivations from a Lie algebra L
to itself is a Lie algebra.
Equations
- LieDerivation.instLieAlgebra = LieAlgebra.mk ⋯