Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(algebra/lie_algebra): define Lie subalgebras, morphisms, modules…
…, submodules, quotients (#1835) * feat(algebra/lie_algebra): define Lie subalgebras, morphisms, modules, submodules, quotients * Code review: colons at end of line * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Catch up after GH commits from code review * Remove accidentally-included '#lint' * Rename: lie_subalgebra.bracket --> lie_subalgebra.lie_mem * Lie ideals are subalgebras * Add missing doc string * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Allow quotients of lie_modules by lie_submodules (part 1) The missing piece is the construction of a lie_module structure on the quotient by a lie_submodule, i.e.,: `instance lie_quotient_lie_module : lie_module R L N.quotient := ...` I will add this in due course. * Code review: minor fixes * New lie_module approach based on add_action, linear_action * Remove add_action by merging into linear_action. I would prefer to keep add_action, and especially like to keep the feature that linear_action extends has_scalar, but unfortunately this is not possible with the current typeclass resolution algorithm since we should never extend a class with fewer carrier types. * Add missing doc string * Simplify Lie algebra adjoing action definitions * whitespace tweaks * Remove redundant explicit type * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/algebra/lie_algebra.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Catch up after rename bracket --> map_lie in morphism * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> * Update src/linear_algebra/linear_action.lean Co-Authored-By: Johan Commelin <johan@commelin.net> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
- Loading branch information
1 parent
96ee2a6
commit b686bc2
Showing
2 changed files
with
320 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
/- | ||
Copyright (c) 2020 Oliver Nash. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Oliver Nash | ||
-/ | ||
import linear_algebra.basic | ||
|
||
/-! | ||
# Linear actions | ||
For modules M and N, we can regard a linear map M →ₗ End N as a "linear action" of M on N. | ||
In this file we introduce the class `linear_action` to make it easier to work with such actions. | ||
## Tags | ||
linear action | ||
-/ | ||
|
||
universes u v | ||
|
||
section linear_action | ||
|
||
variables (R : Type u) (M N : Type v) | ||
variables [comm_ring R] [add_comm_group M] [add_comm_group N] [module R M] [module R N] | ||
|
||
section prio | ||
set_option default_priority 100 -- see Note [default priority] | ||
/-- | ||
A binary operation representing one module acting linearly on another. | ||
-/ | ||
class linear_action := | ||
(act : M → N → N) | ||
(add_act : ∀ (m m' : M) (n : N), act (m + m') n = act m n + act m' n) | ||
(act_add : ∀ (m : M) (n n' : N), act m (n + n') = act m n + act m n') | ||
(act_smul : ∀ (r : R) (m : M) (n : N), act (r • m) n = r • (act m n)) | ||
(smul_act : ∀ (r : R) (m : M) (n : N), act m (r • n) = act (r • m) n) | ||
end prio | ||
|
||
@[simp] lemma zero_linear_action [linear_action R M N] (n : N) : | ||
linear_action.act R (0 : M) n = 0 := | ||
begin | ||
let z := linear_action.act R (0 : M) n, | ||
have H : z + z = z + 0 := by { rw ←linear_action.add_act, simp, }, | ||
exact add_left_cancel H, | ||
end | ||
|
||
@[simp] lemma linear_action_zero [linear_action R M N] (m : M) : | ||
linear_action.act R m (0 : N) = 0 := | ||
begin | ||
let z := linear_action.act R m (0 : N), | ||
have H : z + z = z + 0 := by { rw ←linear_action.act_add, simp, }, | ||
exact add_left_cancel H, | ||
end | ||
|
||
@[simp] lemma linear_action_add_act [linear_action R M N] (m m' : M) (n : N) : | ||
linear_action.act R (m + m') n = linear_action.act R m n + | ||
linear_action.act R m' n := | ||
linear_action.add_act R m m' n | ||
|
||
@[simp] lemma linear_action_act_add [linear_action R M N] (m : M) (n n' : N) : | ||
linear_action.act R m (n + n') = linear_action.act R m n + | ||
linear_action.act R m n' := | ||
linear_action.act_add R m n n' | ||
|
||
@[simp] lemma linear_action_act_smul [linear_action R M N] (r : R) (m : M) (n : N) : | ||
linear_action.act R (r • m) n = r • (linear_action.act R m n) := | ||
linear_action.act_smul r m n | ||
|
||
@[simp] lemma linear_action_smul_act [linear_action R M N] (r : R) (m : M) (n : N) : | ||
linear_action.act R m (r • n) = linear_action.act R (r • m) n := | ||
linear_action.smul_act r m n | ||
|
||
end linear_action | ||
|
||
namespace linear_action | ||
|
||
variables (R : Type u) (M N : Type v) | ||
variables [comm_ring R] [add_comm_group M] [add_comm_group N] [module R M] [module R N] | ||
|
||
/-- | ||
A linear map to the endomorphism algebra yields a linear action. | ||
-/ | ||
def of_endo_map (α : M →ₗ[R] module.End R N) : linear_action R M N := | ||
{ act := λ m n, α m n, | ||
add_act := by { intros, rw linear_map.map_add, simp, }, | ||
act_add := by { intros, simp, }, | ||
act_smul := by { intros, rw linear_map.map_smul, simp, }, | ||
smul_act := by { intros, repeat { rw linear_map.map_smul }, simp, } } | ||
|
||
/-- | ||
A linear action yields a linear map to the endomorphism algebra. | ||
-/ | ||
def to_endo_map (α : linear_action R M N) : M →ₗ[R] module.End R N := | ||
{ to_fun := λ m, | ||
{ to_fun := λ n, linear_action.act R m n, | ||
add := by { intros, simp, }, | ||
smul := by { intros, simp, }, }, | ||
add := by { intros, ext, simp, }, | ||
smul := by { intros, ext, simp, } } | ||
|
||
end linear_action |