Skip to content

Conversation

@frederic-marbach
Copy link
Contributor

@frederic-marbach frederic-marbach commented Apr 18, 2024

This finishes the proof that all derivations in a finite-dimensional Lie algebra with non-degenerate Killing form are inner derivations, a project discussed in this thread with @ocfnash.


I am particularly open to design remarks or suggestions. More specifically, here are some points of which I doubt:

  • I took the liberty of introducing local notations to ease my mind,
  • I stated intermediary lemmas which might be useless outside of this file,
  • I left a comment in the Killing.lean file for a hacky coercion I could not figure my way out otherwise.

@frederic-marbach frederic-marbach added awaiting-review t-algebra Algebra (groups, rings, fields, etc) labels Apr 18, 2024
@ocfnash ocfnash self-assigned this Apr 18, 2024
@ocfnash
Copy link
Contributor

ocfnash commented Apr 18, 2024

@frederic-marbach Thanks for doing this. I added a commit because I realised that new lemma you proposed LieIdeal.killingCompl_eq_orthogonalBilin should be true by definition (I also renamed it to LieIdeal.toSubmodule_killingCompl).

I'm out of time for today so I'll have to finish reviewing tomorrow.

@ocfnash ocfnash added awaiting-author A reviewer has asked the author a question or requested changes. and removed awaiting-review labels Apr 19, 2024
frederic-marbach and others added 2 commits April 19, 2024 15:06
Co-authored-by: Oliver Nash <github@olivernash.org>
@frederic-marbach frederic-marbach added awaiting-review and removed awaiting-author A reviewer has asked the author a question or requested changes. labels Apr 19, 2024
ocfnash added 2 commits April 20, 2024 21:32
Also some minor tweaks to Lie theory
This should be helpful as I recently added some facts connecting
`LieAlgebra.IsKilling` with `LinearMap.BilinForm.Nondegenerate`
@ocfnash
Copy link
Contributor

ocfnash commented Apr 20, 2024

I thought about this PR quite a bit today and I have some remarks:

  1. The local notation is great: IMHO we underuse this feature.
  2. The lemmas about 𝕀ᗮ are not really so desirable because ultimately you prove this is (I recognise you allude to this above)
  3. Some of the results are true more generally, e.g., without assuming [LieAlgebra.IsKilling R L] so it would be nice to extract these
  4. I think it's better to have lemmas which talk about (ad R L).range rather than (ad R L).idealRange unless the statement actually needs an ideal, since it's a simpler object

With all that in mind I tried to work out what was the core result and I learned (from your code!) that seems to be that if D is orthogonal to (ad R L).range then so is ad R L (D x) for any x. So I extracted this lemma (which doesn't require the assumption [LieAlgebra.IsKilling R L]) and then after adding a bit of API to LinearMap.BilinForm things seemed to work out quite nicely. I've pushed a commit (and merged master) so that the following suggestion should work:

@ocfnash
Copy link
Contributor

ocfnash commented Apr 20, 2024

So here's what I suggest:

variable (R L : Type*) [Field R] [LieRing L] [LieAlgebra R L] [Module.Finite R L]

/-- A local notation for the set of (Lie) derivations on `L`. -/
local notation "𝔻" => (LieDerivation R L L)

-- /-- A local notation for the ideal range of `ad`. -/
-- local notation "𝕀" => LieHom.idealRange (ad R L)

-- /-- A local notation for the Killing complement of the ideal range of `ad`. -/
-- local notation "𝕀ᗮ" => LieIdeal.killingCompl R 𝔻 𝕀

lemma killingForm_restrict_range_ad :
    (killingForm R 𝔻).restrict (ad R L).range = killingForm R (ad R L).range := by
  rw [← (ad_isIdealMorphism R L).eq, ← LieIdeal.killingForm_eq]
  rfl

variable {R L}

-- This is really the key result
lemma ad_mem_orthogonal_of_mem_orthogonal
    {D : LieDerivation R L L} (hD : D ∈ (killingForm R 𝔻).orthogonal (ad R L).range) (x : L) :
    ad R L (D x) ∈ (killingForm R 𝔻).orthogonal (ad R L).range := by
  have : (killingForm R 𝔻).orthogonal (ad R L).range = (ad R L).idealRange.killingCompl := by
    simp [← (ad_isIdealMorphism R L).eq]
  rw [this] at hD ⊢
  rw [← lie_der_ad_eq_ad_der]
  exact lie_mem_left _ _ (ad R L).idealRange.killingCompl _ _ hD

lemma add_mem_ker_killingForm_ad_range_of_mem_orthogonal
    {D : LieDerivation R L L} (hD : D ∈ (killingForm R 𝔻).orthogonal (ad R L).range) (x : L) :
    ad R L (D x) ∈ (LinearMap.ker <| killingForm R (ad R L).range).map (ad R L).range.subtype := by
  rw [← killingForm_restrict_range_ad]
  exact LinearMap.BilinForm.inf_orthogonal_self_le_ker_restrict
    (LieModule.traceForm_isSymm R 𝔻 𝔻).isRefl ⟨by simp, ad_mem_orthogonal_of_mem_orthogonal hD x⟩

variable (R L)
variable [LieAlgebra.IsKilling R L]

@[simp] lemma ad_apply_eq_zero_iff (x : L) : ad R L x = 0 ↔ x = 0 := by
  refine ⟨fun h ↦ ?_, fun h ↦ by simp [h]⟩
  rwa [← LieHom.mem_ker, ad_ker_eq_center, LieAlgebra.center_eq_bot_of_semisimple,
    LieSubmodule.mem_bot] at h

instance instIsKilling_range_ad : LieAlgebra.IsKilling R (ad R L).range :=
  (LieEquiv.ofInjective (ad R L) (injective_ad_of_center_eq_bot <| by simp)).isKilling

lemma killingForm_restrict_range_ad_nondegenerate :
    ((killingForm R 𝔻).restrict (ad R L).range).Nondegenerate :=
  killingForm_restrict_range_ad R L ▸ LieAlgebra.IsKilling.killingForm_nondegenerate R _

lemma range_ad_eq_top : (ad R L).range = ⊤ := by
  rw [← LieSubalgebra.coe_to_submodule_eq_iff]
  apply LinearMap.BilinForm.eq_top_of_restrict_nondegenerate_of_orthogonal_eq_bot
    (LieModule.traceForm_isSymm R 𝔻 𝔻).isRefl (killingForm_restrict_range_ad_nondegenerate R L)
  refine (Submodule.eq_bot_iff _).mpr fun D hD ↦ ext fun x ↦ ?_
  simpa using add_mem_ker_killingForm_ad_range_of_mem_orthogonal hD x

lemma exists_eq_ad (D : 𝔻) : ∃ x, ad R L x = D := by
  change D ∈ (ad R L).range
  rw [range_ad_eq_top R L]
  exact Submodule.mem_top

I've been too lazy to add comments or to use the local notation though both would be good.

What do you think?

@ocfnash ocfnash added awaiting-author A reviewer has asked the author a question or requested changes. and removed awaiting-review labels Apr 20, 2024
@frederic-marbach
Copy link
Contributor Author

I applied your suggestions, with local notations and (some) comments.

I have a few questions:

  • You added ad_apply_eq_zero_iff (in Semisimple.lean), which looks a lot like injective_ad_of_center_eq_bot (in AdjointAction.lean). Should we keep both?
  • I had added equivRangeAdOfCenterEqBot (in AdjointAction.lean), but your solution does not use it anymore, should we keep it?
  • Eventually, I had named the file Semisimple.lean, but should it be Killing.lean?

@frederic-marbach frederic-marbach added awaiting-review and removed awaiting-author A reviewer has asked the author a question or requested changes. labels Apr 21, 2024
@ocfnash
Copy link
Contributor

ocfnash commented Apr 21, 2024

* You added `ad_apply_eq_zero_iff ` (in `Semisimple.lean`), which looks a lot like `injective_ad_of_center_eq_bot` (in `AdjointAction.lean`). Should we keep both?

Yes, we should keep both. injective_ad_of_center_eq_bot is useful as input to lemmas that demand this hypothesis and ad_apply_eq_zero_iff has several useful features:

  • It is a useful simp lemma
  • It is useful for rewriting
  • It picks up the trivial center condition via typeclasses

It could be generalised if we had a typeclass LieAlgebra.HasTrivialCenter (or something) but I'm not sure if we need this and anyway, that's out of scope for this PR.

* I had added `equivRangeAdOfCenterEqBot` (in `AdjointAction.lean`), but your solution does not use it anymore, should we keep it?

Good point, I think we should drop this now.

* Eventually, I had named the file `Semisimple.lean`, but should it be `Killing.lean`?

Yes, probably Killing.lean is a better name

@ocfnash ocfnash self-requested a review April 21, 2024 08:27
Copy link
Contributor

@ocfnash ocfnash left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this, I learned the proof from your work!

I think this is ready to be merged but I'm going to ask for another reviewer to take a look because the PR now contains a mixture of your work and mine.

@ocfnash ocfnash requested a review from jcommelin April 21, 2024 08:30
@ocfnash ocfnash removed their assignment Apr 21, 2024
frederic-marbach and others added 2 commits April 21, 2024 11:16
Co-authored-by: Oliver Nash <github@olivernash.org>
@frederic-marbach
Copy link
Contributor Author

Thanks. I fixed the typo, renamed the file, and removed my useless lemma.

Copy link
Member

@jcommelin jcommelin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Very nice work! Two mini comments

bors d+

@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Apr 23, 2024

✌️ frederic-marbach can now approve this pull request. To approve and merge a pull request, simply reply with bors r+. More detailed instructions are available here.

@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). and removed awaiting-review labels Apr 23, 2024
Co-authored-by: Johan Commelin <johan@commelin.net>
@frederic-marbach
Copy link
Contributor Author

bors r+

mathlib-bors bot pushed a commit that referenced this pull request Apr 23, 2024
…Killing Lie algebra (#12250)

This finishes the proof that all derivations in a finite-dimensional Lie algebra with non-degenerate Killing form are inner derivations, a project discussed in [this thread](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Derivations.20on.20Lie.20algebras) with @ocfnash.



Co-authored-by: Oliver Nash <github@olivernash.org>
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Apr 23, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat(Algebra/Lie): prove derivations are inner in finite-dimensional Killing Lie algebra [Merged by Bors] - feat(Algebra/Lie): prove derivations are inner in finite-dimensional Killing Lie algebra Apr 23, 2024
@mathlib-bors mathlib-bors bot closed this Apr 23, 2024
@mathlib-bors mathlib-bors bot deleted the fm_lie_derivations_killing2 branch April 23, 2024 20:08
ocfnash added a commit that referenced this pull request Apr 23, 2024
…Killing Lie algebra (#12250)

This finishes the proof that all derivations in a finite-dimensional Lie algebra with non-degenerate Killing form are inner derivations, a project discussed in [this thread](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Derivations.20on.20Lie.20algebras) with @ocfnash.



Co-authored-by: Oliver Nash <github@olivernash.org>
Jun2M pushed a commit that referenced this pull request Apr 24, 2024
…Killing Lie algebra (#12250)

This finishes the proof that all derivations in a finite-dimensional Lie algebra with non-degenerate Killing form are inner derivations, a project discussed in [this thread](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Derivations.20on.20Lie.20algebras) with @ocfnash.



Co-authored-by: Oliver Nash <github@olivernash.org>
callesonne pushed a commit that referenced this pull request May 16, 2024
…Killing Lie algebra (#12250)

This finishes the proof that all derivations in a finite-dimensional Lie algebra with non-degenerate Killing form are inner derivations, a project discussed in [this thread](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Derivations.20on.20Lie.20algebras) with @ocfnash.



Co-authored-by: Oliver Nash <github@olivernash.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

delegated This pull request has been delegated to the PR author (or occasionally another non-maintainer). t-algebra Algebra (groups, rings, fields, etc)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants