Derivations of a non-associative algebra #
A derivation of an algebra A is a linear map D obeying the Leibniz rule
D (x * y) = D x * y + x * D y. Nothing in that rule asks the multiplication to be associative,
commutative or unital, and the derivations of any algebra are closed under the commutator
⁅D, E⁆ = D ∘ E - E ∘ D, so they always form a Lie algebra Der A. Mathlib has this construction
twice over, but only in special cases: Derivation R A M needs A commutative and associative, and
LieDerivation R L M needs the multiplication to be a Lie bracket. Two of the exceptional Lie
algebras are derivation algebras of algebras of neither kind -- G₂ = Der 𝕆 for the octonions
(Ado.Octonion) and F₄ = Der H₃(𝕆) for the Albert algebra -- so this file builds Der A for
an arbitrary non-unital non-associative algebra, and records that both Mathlib constructions are
instances of it.
Main definitions #
Ado.derivationLieAlgebra R A: the derivations ofA, as a Lie subalgebra ofModule.End R A.Ado.innerDerivation: for an associative algebra, the inner derivationsz ↦ ⁅z, -⁆, as a homomorphism of Lie algebrasA →ₗ⁅R⁆ Der A.Ado.stableDerivations: the Lie subalgebra of derivations preserving a fixed submodule.Ado.stableDerivations.lieSubmodule: that submodule, as a Lie module over the derivations preserving it.Ado.derivationLieAlgebraCongr: an isomorphism of algebras induces an isomorphism of their derivation Lie algebras, by conjugation.
Main results #
Ado.derivationLieAlgebra.leibniz: the Leibniz rule;Ado.derivationLieAlgebra.apply_one_eq_zero: a derivation of a unital algebra kills the unit; andAdo.derivationLieAlgebra.apply_mul_eq_zero: its constants are closed under multiplication.Ado.ad_mem_derivationLieAlgebra_commutatorRing: the adjoint action of a Lie algebra is by derivations -- the Jacobi identity in Leibniz form; andAdo.ad_mem_derivationLieAlgebra: the same for the commutator of an associative algebra.Ado.derivationEquivDerivationLieAlgebra: for a commutative associative algebra,Der Ais Mathlib'sDerivation R A Awith its Lie structure.Ado.derivationLieAlgebraCommutatorRingEquivLieDerivation: for a Lie algebraL, the derivations of the underlying non-associative algebraCommutatorRing Lare Mathlib'sLieDerivation R L L.
Implementation notes #
Der A is a bundled Lie subalgebra of Module.End R A rather than a fresh carrier type with
hand-built instances: the LieRing and LieAlgebra R structures, the Module R-structure, the
action of Der A on A as a Lie module, and the lattice API then all come from Mathlib's
LieSubalgebra, and the only thing left to prove is that the commutator of two derivations is a
derivation. This is also why the base is a CommRing and A a NonUnitalNonAssocRing: a Lie ring
is an additive group, so the semiring-level hypotheses under which the Leibniz rule still makes
sense do not suffice to make Der A one.
The Leibniz rule is preserved by sums and by scalar multiples because the multiplication of A is
R-bilinear, and by the commutator because the "second derivative" terms D (E x) * y and
x * D (E y) that the composite D ∘ E contributes cancel against those of E ∘ D.
The Lie bracket of Module.End R A is the ring commutator, which Mathlib deliberately keeps out of
the global instance set (LieRing.ofAssociativeRing) because it clashes with the module action; it
is a local instance here, exactly as in Mathlib/Algebra/Lie/OfAssociative.lean. A file consuming
derivationLieAlgebra needs the same attribute [local instance 100] LieRing.ofAssociativeRing
line in order to state facts about Module.End R A as a Lie algebra, but not in order to use
↥(derivationLieAlgebra R A), whose own Lie structure is carried by the subalgebra.
The simp-normal form of the action of a derivation is the application (D : Module.End R A) x of
the underlying linear map: Mathlib's LieSubalgebra.coe_bracket_of_module and
Module.End.lie_apply already rewrite the Lie bracket ⁅D, x⁆ into it, and those two lemmas
together with LieHom.lie_apply likewise evaluate the commutator ⁅D, E⁆ of two derivations, so no
lemma of this file needs to say so.
The _apply and _symm_apply lemmas of derivationEquivDerivationLieAlgebra and
derivationLieAlgebraCommutatorRingEquivLieDerivation are proved by rfl, and no rewriting lemma
could replace it: those two equivalences are defined to be the identity on the underlying linear
map, so the right-hand side of each lemma is literally the toFun/invFun field of the structure
instance just above it. Mathlib proves the same shape the same way (LieEquiv.ofSubalgebras_apply,
LinearEquiv.lieConj_apply). The point of stating them is precisely that no consumer then has to
unfold the definition. The parentheses in (rfl) are the module system's: the definitions' bodies
are not @[expose]d, so a bare rfl -- whose proof term is exported -- fails with "not a
definitional equality", while the parenthesised form elaborates inside this module, where the bodies
are visible. By contrast derivationLieAlgebraCongr is not the identity but a composite of
LieEquiv.ofSubalgebras and LinearEquiv.lieConj, so its two lemmas are proved from those
constructions' own apply lemmas rather than by unfolding.
References #
- Highest-weight roadmap,
Layer 8, whose
derivationLieAlgebrathis is: the derivation algebra through which the split octonions and the Albert algebra produceG₂andF₄. - N. Jacobson, Lie Algebras (1962), Chapter I, §2, and Chapter VII.
The derivation Lie algebra Der A of a non-unital non-associative R-algebra A: the
R-linear maps D : A → A satisfying the Leibniz rule D (x * y) = D x * y + x * D y, a Lie
subalgebra of Module.End R A under the commutator bracket.
Equations
Instances For
The Leibniz rule: a derivation differentiates each factor of a product.
The constants of a derivation are closed under multiplication: if D kills x and y
then it kills x * y. Together with linearity this says that the kernel of a derivation is an
R-submodule of A closed under multiplication -- a subalgebra where A is unital and
associative enough for Subalgebra to be available.
A derivation is determined by its values.
The derivations of A that preserve the submodule S, as a Lie subalgebra of Der(A).
Equations
- Ado.stableDerivations R S = { carrier := {D : ↥(Ado.derivationLieAlgebra R A) | ∀ x ∈ S, ↑D x ∈ S}, add_mem' := ⋯, zero_mem' := ⋯, smul_mem' := ⋯, lie_mem' := ⋯ }
Instances For
Membership in stableDerivations R S means pointwise preservation of S.
The submodule S, as a Lie submodule of A over the derivations preserving it. Through this
Lie submodule, Mathlib equips the quotient A ⧸ S with its action by stable derivations.
Equations
- Ado.stableDerivations.lieSubmodule R S = { toSubmodule := S, lie_mem := ⋯ }
Instances For
The underlying submodule of stableDerivations.lieSubmodule R S is S.
Membership in stableDerivations.lieSubmodule R S is membership in S.
A derivation of a unital algebra kills the unit: 1 = 1 * 1 forces D 1 = D 1 + D 1.
Only unitality is used, not associativity.
The inner derivations of an associative algebra A: the assignment z ↦ ⁅z, -⁆, as a
homomorphism of Lie algebras from A under its commutator bracket to Der A. It is the adjoint
action LieAlgebra.ad with its codomain cut down to the derivations.
Equations
- Ado.innerDerivation R = { toFun := fun (z : A) => ⟨(LieAlgebra.ad R A) z, ⋯⟩, map_add' := ⋯, map_smul' := ⋯, map_lie' := ⋯ }
Instances For
Conjugation by a multiplicative linear equivalence carries derivations to derivations.
Derivation algebras are transported along isomorphisms of algebras. A multiplicative
R-linear equivalence e : A ≃ₗ[R] B conjugates derivations of A to derivations of B, and the
resulting map is an isomorphism of Lie algebras. This is the tool that transports Der between two
models of the same algebra -- two constructions of the split octonions, say.
Equations
Instances For
Mathlib's Derivation R A A is Der A. For a commutative associative algebra the two
Leibniz rules D (x * y) = D x * y + x * D y and D (x * y) = x • D y + y • D x say the same
thing, and both Lie structures are the commutator of Module.End R A, so the identity on
underlying linear maps is an isomorphism of Lie algebras.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two spellings of the Leibniz rule on a Lie ring agree: the symmetric form
⁅D x, y⁆ + ⁅x, D y⁆ that derivationLieAlgebra inherits from the multiplication of
CommutatorRing L, and the form ⁅x, D y⁆ - ⁅y, D x⁆ that LieDerivation is stated with because a
Lie algebra carries no right action. They differ by skew symmetry alone, so neither linearity of
D nor the base ring plays any part.
Membership in Der (CommutatorRing L) is exactly the defining condition of a
LieDerivation R L L. Regarding a Lie algebra as a non-associative algebra with x * y = ⁅x, y⁆
turns the defining condition of derivationLieAlgebra into D ⁅x, y⁆ = ⁅D x, y⁆ + ⁅x, D y⁆, which
Ado.leibniz_add_iff_leibniz_sub rewrites into the skew form.
The adjoint action is by derivations: ad x lies in Der (CommutatorRing L), which is
exactly the Jacobi identity in Leibniz form.
Mathlib's LieDerivation R L L is Der (CommutatorRing L). For the non-associative
algebra underlying a Lie algebra the two Leibniz rules agree by
Ado.mem_derivationLieAlgebra_commutatorRing_iff_apply_lie_eq_sub, and both Lie structures are
the commutator of the endomorphism ring, so the identity on underlying linear maps is an isomorphism
of Lie algebras.
Equations
- One or more equations did not get rendered due to their size.