-
Notifications
You must be signed in to change notification settings - Fork 298
/
invariants.lean
121 lines (97 loc) · 4.04 KB
/
invariants.lean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/-
Copyright (c) 2022 Antoine Labelle. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Antoine Labelle
-/
import representation_theory.basic
/-!
# Subspace of invariants a group representation
This file introduce the subspace of invariants of a group representation
and proves basic result about it.
The main tool used is the average of all elements of the group, seen as an element of
`monoid_algebra k G`. Scalar multiplication by this special element gives a projection onto the
subspace of invariants.
In order for the definition of the average element to make sense, we need to assume for most of the
results that the order of `G` is invertible in `k` (e. g. `k` has characteristic `0`).
-/
open_locale big_operators
open monoid_algebra finset finite_dimensional linear_map representation
namespace representation
section average
variables (k G : Type*) [comm_semiring k] [group G]
variables [fintype G] [invertible (fintype.card G : k)]
/--
The average of all elements of the group `G`, considered as an element of `monoid_algebra k G`.
-/
noncomputable def average : monoid_algebra k G :=
⅟(fintype.card G : k) • ∑ g : G, of k G g
lemma average_def : average k G = ⅟(fintype.card G : k) • ∑ g : G, of k G g := rfl
/--
`average k G` is invariant under left multiplication by elements of `G`.
-/
@[simp]
theorem mul_average_left (g : G) :
(finsupp.single g 1 * average k G : monoid_algebra k G) = average k G :=
begin
simp [average_def, finset.mul_sum],
set f : G → monoid_algebra k G := λ x, finsupp.single x 1,
show ⅟ ↑(fintype.card G) • ∑ (x : G), f (g * x) = ⅟ ↑(fintype.card G) • ∑ (x : G), f x,
rw function.bijective.sum_comp (group.mul_left_bijective g) _,
end
/--
`average k G` is invariant under right multiplication by elements of `G`.
-/
@[simp]
theorem mul_average_right (g : G) :
average k G * finsupp.single g 1 = average k G :=
begin
simp [average_def, finset.sum_mul],
set f : G → monoid_algebra k G := λ x, finsupp.single x 1,
show ⅟ ↑(fintype.card G) • ∑ (x : G), f (x * g) = ⅟ ↑(fintype.card G) • ∑ (x : G), f x,
rw function.bijective.sum_comp (group.mul_right_bijective g) _,
end
end average
section invariants
variables (k G V : Type*) [comm_semiring k] [group G] [add_comm_group V]
variables [module k V] [distrib_mul_action G V] [smul_comm_class G k V]
/--
The subspace of invariants, consisting of the vectors fixed by all elements of `G`.
-/
def invariants : submodule k V :=
{ carrier := set_of (λ v, ∀ (g : G), g • v = v),
zero_mem' := by simp,
add_mem' := λ v w hv hw g, by simp [hv g, hw g],
smul_mem' := λ r v hv g, by simp [smul_comm, hv g] }
@[simp]
lemma mem_invariants (v : V) : v ∈ (invariants k G V) ↔ ∀ (g: G), g • v = v := by refl
lemma invariants_eq_inter :
(invariants k G V).carrier = ⋂ g : G, function.fixed_points (has_scalar.smul g) :=
by { ext, simp [function.is_fixed_pt] }
/--
The subspace of invariants, as a submodule over `monoid_algebra k G`.
-/
noncomputable def invariants' : submodule (monoid_algebra k G) V :=
submodule_of_smul_mem (invariants k G V) (λ g v hv, by {rw [of_smul, hv g], exact hv})
@[simp] lemma invariants'_carrier :
(invariants' k G V).carrier = (invariants k G V).carrier := rfl
variables [fintype G] [invertible (fintype.card G : k)]
/--
Scalar multiplication by `average k G` sends elements of `V` to the subspace of invariants.
-/
theorem smul_average_invariant (v : V) : (average k G) • v ∈ invariants k G V :=
λ g, by rw [←of_smul k, smul_smul, of_apply, mul_average_left]
/--
`average k G` acts as the identity on the subspace of invariants.
-/
theorem smul_average_id (v ∈ invariants k G V) : (average k G) • v = v :=
begin
simp at H,
simp [average_def, sum_smul, H, card_univ, nsmul_eq_smul_cast k _ v, smul_smul, of_smul,
-of_apply],
end
/--
Scalar multiplication by `average k G` gives a projection map onto the subspace of invariants.
-/
noncomputable def average_map : V →ₗ[k] V := (as_algebra_hom k G V) (average k G)
end invariants
end representation