Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit c04bc6e

Browse files
author
Amelia Livingston
committed
refactor(representation_theory/group_cohomology_resolution): refactor k[G^{n + 1}] isomorphism (#18271)
This refactors the isomorphism $k[G^{n + 1}] \cong k[G] \otimes_k k[G^n]$ (where $G$ acts by left multiplication on $k[G^{n + 1}]$ and $k[G]$ but trivially on $k[G^n]$) to use an isomorphism of $G$-sets $G^{n + 1} \cong G \times G^n.$
1 parent 564bcc4 commit c04bc6e

4 files changed

Lines changed: 254 additions & 140 deletions

File tree

src/representation_theory/Action.lean

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import category_theory.monoidal.rigid.of_equivalence
1414
import category_theory.monoidal.rigid.functor_category
1515
import category_theory.monoidal.linear
1616
import category_theory.monoidal.braided
17+
import category_theory.monoidal.types
1718
import category_theory.abelian.functor_category
1819
import category_theory.abelian.transfer
1920
import category_theory.conj
@@ -405,6 +406,13 @@ begin
405406
simp,
406407
end
407408

409+
/-- Given an object `X` isomorphic to the tensor unit of `V`, `X` equipped with the trivial action
410+
is isomorphic to the tensor unit of `Action V G`. -/
411+
def tensor_unit_iso {X : V} (f : 𝟙_ V ≅ X) :
412+
𝟙_ (Action V G) ≅ Action.mk X 1 :=
413+
Action.mk_iso f (λ g, by simp only [monoid_hom.one_apply, End.one_def, category.id_comp f.hom,
414+
tensor_unit_rho, category.comp_id])
415+
408416
variables (V G)
409417

410418
/-- When `V` is monoidal the forgetful functor `Action V G` to `V` is monoidal. -/
@@ -653,6 +661,47 @@ def of_mul_action_limit_cone {ι : Type v} (G : Type (max v u)) [monoid G]
653661
congr,
654662
end } }
655663

664+
/-- The `G`-set `G`, acting on itself by left multiplication. -/
665+
@[simps] def left_regular (G : Type u) [monoid G] : Action (Type u) (Mon.of G) :=
666+
Action.of_mul_action G G
667+
668+
/-- The `G`-set `Gⁿ`, acting on itself by left multiplication. -/
669+
@[simps] def diagonal (G : Type u) [monoid G] (n : ℕ) : Action (Type u) (Mon.of G) :=
670+
Action.of_mul_action G (fin n → G)
671+
672+
/-- We have `fin 1 → G ≅ G` as `G`-sets, with `G` acting by left multiplication. -/
673+
def diagonal_one_iso_left_regular (G : Type u) [monoid G] :
674+
diagonal G 1 ≅ left_regular G := Action.mk_iso (equiv.fun_unique _ _).to_iso (λ g, rfl)
675+
676+
/-- Given `X : Action (Type u) (Mon.of G)` for `G` a group, then `G × X` (with `G` acting as left
677+
multiplication on the first factor and by `X.ρ` on the second) is isomorphic as a `G`-set to
678+
`G × X` (with `G` acting as left multiplication on the first factor and trivially on the second).
679+
The isomorphism is given by `(g, x) ↦ (g, g⁻¹ • x)`. -/
680+
@[simps] def left_regular_tensor_iso (G : Type u) [group G]
681+
(X : Action (Type u) (Mon.of G)) :
682+
left_regular G ⊗ X ≅ left_regular G ⊗ Action.mk X.V 1 :=
683+
{ hom :=
684+
{ hom := λ g, ⟨g.1, (X.ρ (g.1⁻¹ : G) g.2 : X.V)⟩,
685+
comm' := λ g, funext $ λ x, prod.ext rfl $
686+
show (X.ρ ((g * x.1)⁻¹ : G) * X.ρ g) x.2 = _,
687+
by simpa only [mul_inv_rev, ←X.ρ.map_mul, inv_mul_cancel_right] },
688+
inv :=
689+
{ hom := λ g, ⟨g.1, X.ρ g.1 g.2⟩,
690+
comm' := λ g, funext $ λ x, prod.ext rfl $
691+
by simpa only [tensor_rho, types_comp_apply, tensor_apply, left_regular_ρ_apply, map_mul] },
692+
hom_inv_id' := hom.ext _ _ (funext $ λ x, prod.ext rfl $
693+
show (X.ρ x.1 * X.ρ (x.1⁻¹ : G)) x.2 = _,
694+
by simpa only [←X.ρ.map_mul, mul_inv_self, X.ρ.map_one]),
695+
inv_hom_id' := hom.ext _ _ (funext $ λ x, prod.ext rfl $
696+
show (X.ρ (x.1⁻¹ : G) * X.ρ x.1) _ = _,
697+
by simpa only [←X.ρ.map_mul, inv_mul_self, X.ρ.map_one]) }
698+
699+
/-- The natural isomorphism of `G`-sets `Gⁿ⁺¹ ≅ G × Gⁿ`, where `G` acts by left multiplication on
700+
each factor. -/
701+
@[simps] def diagonal_succ (G : Type u) [monoid G] (n : ℕ) :
702+
diagonal G (n + 1) ≅ left_regular G ⊗ diagonal G n :=
703+
mk_iso (equiv.pi_fin_succ_above_equiv _ 0).to_iso (λ g, rfl)
704+
656705
end Action
657706

658707
namespace category_theory.functor
@@ -689,10 +738,11 @@ namespace category_theory.monoidal_functor
689738

690739
open Action
691740
variables {V} {W : Type (u+1)} [large_category W] [monoidal_category V] [monoidal_category W]
741+
(F : monoidal_functor V W) (G : Mon.{u})
692742

693743
/-- A monoidal functor induces a monoidal functor between
694744
the categories of `G`-actions within those categories. -/
695-
@[simps] def map_Action (F : monoidal_functor V W) (G : Mon.{u}) :
745+
@[simps] def map_Action :
696746
monoidal_functor (Action V G) (Action W G) :=
697747
{ ε :=
698748
{ hom := F.ε,
@@ -709,4 +759,20 @@ the categories of `G`-actions within those categories. -/
709759
right_unitality' := by { intros, ext, dsimp, simp, dsimp, simp, },
710760
..F.to_functor.map_Action G, }
711761

762+
@[simp] lemma map_Action_ε_inv_hom :
763+
(inv (F.map_Action G).ε).hom = inv F.ε :=
764+
begin
765+
ext,
766+
simp only [←F.map_Action_to_lax_monoidal_functor_ε_hom G, ←Action.comp_hom,
767+
is_iso.hom_inv_id, id_hom],
768+
end
769+
770+
@[simp] lemma map_Action_μ_inv_hom (X Y : Action V G) :
771+
(inv ((F.map_Action G).μ X Y)).hom = inv (F.μ X.V Y.V) :=
772+
begin
773+
ext,
774+
simpa only [←F.map_Action_to_lax_monoidal_functor_μ_hom G, ←Action.comp_hom,
775+
is_iso.hom_inv_id, id_hom],
776+
end
777+
712778
end category_theory.monoidal_functor

src/representation_theory/Rep.lean

Lines changed: 61 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ lemma of_ρ_apply {V : Type u} [add_comm_group V] [module k V]
7676
(ρ : representation k G V) (g : Mon.of G) :
7777
(Rep.of ρ).ρ g = ρ (g : G) := rfl
7878

79+
variables (k G)
80+
81+
/-- The trivial `k`-linear `G`-representation on a `k`-module `V.` -/
82+
def trivial (V : Type u) [add_comm_group V] [module k V] : Rep k G :=
83+
Rep.of (@representation.trivial k G V _ _ _ _)
84+
85+
variables {k G}
86+
87+
lemma trivial_def {V : Type u} [add_comm_group V] [module k V] (g : G) (v : V) :
88+
(trivial k G V).ρ g v = v := rfl
89+
7990
-- Verify that limits are calculated correctly.
8091
noncomputable example : preserves_limits (forget₂ (Rep k G) (Module.{u} k)) :=
8192
by apply_instance
@@ -101,35 +112,75 @@ noncomputable def linearization :
101112
variables {k G}
102113

103114
@[simp] lemma linearization_obj_ρ (X : Action (Type u) (Mon.of G)) (g : G) (x : X.V →₀ k) :
104-
((linearization k G).1.1.obj X).ρ g x = finsupp.lmap_domain k k (X.ρ g) x := rfl
115+
((linearization k G).obj X).ρ g x = finsupp.lmap_domain k k (X.ρ g) x := rfl
105116

106117
@[simp] lemma linearization_of (X : Action (Type u) (Mon.of G)) (g : G) (x : X.V) :
107-
((linearization k G).1.1.obj X).ρ g (finsupp.single x (1 : k))
118+
((linearization k G).obj X).ρ g (finsupp.single x (1 : k))
108119
= finsupp.single (X.ρ g x) (1 : k) :=
109120
by rw [linearization_obj_ρ, finsupp.lmap_domain_apply, finsupp.map_domain_single]
110121

111-
variables (X Y : Action (Type u) (Mon.of G)) (f : X ⟶ Y)
122+
variables {X Y : Action (Type u) (Mon.of G)} (f : X ⟶ Y)
112123

113124
@[simp] lemma linearization_map_hom :
114-
((linearization k G).1.1.map f).hom = finsupp.lmap_domain k k f.hom := rfl
125+
((linearization k G).map f).hom = finsupp.lmap_domain k k f.hom := rfl
115126

116-
lemma linearization_map_hom_of (x : X.V) :
117-
((linearization k G).1.1.map f).hom (finsupp.single x (1 : k))
118-
= finsupp.single (f.hom x) (1 : k) :=
127+
lemma linearization_map_hom_single (x : X.V) (r : k) :
128+
((linearization k G).map f).hom (finsupp.single x r)
129+
= finsupp.single (f.hom x) r :=
119130
by rw [linearization_map_hom, finsupp.lmap_domain_apply, finsupp.map_domain_single]
120131

132+
@[simp] lemma linearization_μ_hom (X Y : Action (Type u) (Mon.of G)) :
133+
((linearization k G).μ X Y).hom = (finsupp_tensor_finsupp' k X.V Y.V).to_linear_map :=
134+
rfl
135+
136+
@[simp] lemma linearization_μ_inv_hom (X Y : Action (Type u) (Mon.of G)) :
137+
(inv ((linearization k G).μ X Y)).hom = (finsupp_tensor_finsupp' k X.V Y.V).symm.to_linear_map :=
138+
begin
139+
simp_rw [←Action.forget_map, functor.map_inv, Action.forget_map, linearization_μ_hom],
140+
apply is_iso.inv_eq_of_hom_inv_id _,
141+
exact linear_map.ext (λ x, linear_equiv.symm_apply_apply _ _),
142+
end
143+
144+
@[simp] lemma linearization_ε_hom :
145+
(linearization k G).ε.hom = finsupp.lsingle punit.star :=
146+
rfl
147+
148+
@[simp] lemma linearization_ε_inv_hom_apply (r : k) :
149+
(inv (linearization k G).ε).hom (finsupp.single punit.star r) = r :=
150+
begin
151+
simp_rw [←Action.forget_map, functor.map_inv, Action.forget_map],
152+
rw [←finsupp.lsingle_apply punit.star r],
153+
apply is_iso.hom_inv_id_apply _ _,
154+
end
155+
156+
variables (k G)
157+
158+
/-- The linearization of a type `X` on which `G` acts trivially is the trivial `G`-representation
159+
on `k[X]`. -/
160+
@[simps] noncomputable def linearization_trivial_iso (X : Type u) :
161+
(linearization k G).obj (Action.mk X 1) ≅ trivial k G (X →₀ k) :=
162+
Action.mk_iso (iso.refl _) $ λ g, by { ext1, ext1, exact linearization_of _ _ _ }
163+
121164
variables (k G)
122165

123166
/-- Given a `G`-action on `H`, this is `k[H]` bundled with the natural representation
124167
`G →* End(k[H])` as a term of type `Rep k G`. -/
125168
noncomputable abbreviation of_mul_action (H : Type u) [mul_action G H] : Rep k G :=
126169
of $ representation.of_mul_action k G H
127170

171+
/-- The `k`-linear `G`-representation on `k[G]`, induced by left multiplication. -/
172+
noncomputable def left_regular : Rep k G :=
173+
of_mul_action k G G
174+
175+
/-- The `k`-linear `G`-representation on `k[Gⁿ]`, induced by left multiplication. -/
176+
noncomputable def diagonal (n : ℕ) : Rep k G :=
177+
of_mul_action k G (fin n → G)
178+
128179
/-- The linearization of a type `H` with a `G`-action is definitionally isomorphic to the
129180
`k`-linear `G`-representation on `k[H]` induced by the `G`-action on `H`. -/
130-
noncomputable def linearization_of_mul_action_iso (n : ℕ) :
131-
(linearization k G).1.1.obj (Action.of_mul_action G (fin n → G))
132-
≅ of_mul_action k G (fin n → G) := iso.refl _
181+
noncomputable def linearization_of_mul_action_iso (H : Type u) [mul_action G H] :
182+
(linearization k G).obj (Action.of_mul_action G H)
183+
≅ of_mul_action k G H := iso.refl _
133184

134185
variables {k G}
135186

src/representation_theory/basic.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ namespace representation
4747

4848
section trivial
4949

50-
variables {k G V : Type*} [comm_semiring k] [monoid G] [add_comm_monoid V] [module k V]
50+
variables (k : Type*) {G V : Type*} [comm_semiring k] [monoid G] [add_comm_monoid V] [module k V]
5151

5252
/--
53-
The trivial representation of `G` on the one-dimensional module `k`.
53+
The trivial representation of `G` on a `k`-module V.
5454
-/
55-
def trivial : representation k G k := 1
55+
def trivial : representation k G V := 1
5656

5757
@[simp]
58-
lemma trivial_def (g : G) (v : k) : trivial g v = v := rfl
58+
lemma trivial_def (g : G) (v : V) : trivial k g v = v := rfl
5959

6060
end trivial
6161

0 commit comments

Comments
 (0)