Skip to content

Commit 04cfb62

Browse files
Amelia Livingston101damnations
andcommitted
feat(RepresentationTheory/Coinvariants): more API about the coinvariants of a representation (#21735)
In this PR we add more API for the coinvariants of a representation `(V, ρ)`: * `Representation.coinvariantsFinsuppLEquiv ρ α`: given a type `α`, this is the `k`-linear equivalence between `(α →₀ V)_G` and `α →₀ V_G`. * `Representation.coinvariantsTprodLeftRegularLEquiv ρ`: the `k`-linear equivalence between `(V ⊗[k] k[G])_G` and `V` sending `⟦v ⊗ single g r⟧ ↦ r • ρ(g⁻¹)(v)`. * `Rep.coinvariantsTensor k G`: the functor sending representations `A, B` to `(A ⊗[k] B)_G`. This is naturally isomorphic to the functor sending `A, B` to `A ⊗[k[G]] B`, where we give `A` the `k[G]ᵐᵒᵖ`-module structure defined by `g • a := A.ρ g⁻¹ a`. * `Rep.coinvariantsTensorFreeLEquiv A α`: given a representation `A` and a type `α`, this is the `k`-linear equivalence between `(A ⊗ (α →₀ k[G]))_G` and `α →₀ A` sending `⟦a ⊗ single x (single g r)⟧ ↦ single x (r • ρ(g⁻¹)(a))`. This is useful for group homology. Co-authored-by: 101damnations <al3717@ic.ac.uk>
1 parent 2a32cbb commit 04cfb62

File tree

1 file changed

+211
-1
lines changed

1 file changed

+211
-1
lines changed

Mathlib/RepresentationTheory/Coinvariants.lean

Lines changed: 211 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ of the form `ρ g x - x` for `x : V`, `g : G`. Then the coinvariants of `(V, ρ)
1616
`V` by this submodule. We show that the functor sending a representation to its coinvariants is
1717
left adjoint to the functor equipping a module with the trivial representation.
1818
19+
## Main definitions
20+
21+
* `Representation.Coinvariants ρ`: the coinvariants of a representation `ρ`.
22+
* `Representation.coinvariantsFinsuppLEquiv ρ α`: given a type `α`, this is the `k`-linear
23+
equivalence between `(α →₀ V)_G` and `α →₀ V_G`.
24+
* `Representation.coinvariantsTprodLeftRegularLEquiv ρ`: the `k`-linear equivalence between
25+
`(V ⊗ k[G])_G` and `V` sending `⟦v ⊗ single g r⟧ ↦ r • ρ(g⁻¹)(v)`.
26+
* `Rep.coinvariantsAdjunction k G`: the adjunction between the functor sending a representation to
27+
its coinvariants and the functor equipping a module with the trivial representation.
28+
* `Rep.coinvariantsTensor k G`: the functor sending representations `A, B` to `(A ⊗[k] B)_G`. This
29+
is naturally isomorphic to the functor sending `A, B` to `A ⊗[k[G]] B`, where we give `A` the
30+
`k[G]ᵐᵒᵖ`-module structure defined by `g • a := A.ρ g⁻¹ a`.
31+
* `Rep.coinvariantsTensorFreeLEquiv A α`: given a representation `A` and a type `α`, this is the
32+
`k`-linear equivalence between `(A ⊗ (α →₀ k[G]))_G` and `α →₀ A` sending
33+
`⟦a ⊗ single x (single g r)⟧ ↦ single x (r • ρ(g⁻¹)(a))`. This is useful for group homology.
34+
1935
-/
2036

2137
universe u v
@@ -124,7 +140,105 @@ lemma map_comp (φ : V →ₗ[k] W) (ψ : W →ₗ[k] X)
124140
ext x; have : φ _ = _ := congr($(H g) x); have : ψ _ = _ := congr($(h g) (φ x)); simp_all) :=
125141
hom_ext rfl
126142

127-
end Representation.Coinvariants
143+
end Coinvariants
144+
145+
section Finsupp
146+
147+
open Finsupp Coinvariants
148+
149+
variable {k G V : Type*} [CommRing k] [Group G] [AddCommGroup V] [Module k V]
150+
(ρ : Representation k G V) (α : Type*)
151+
152+
/-- Given a `G`-representation `(V, ρ)` and a type `α`, this is the map `(α →₀ V)_G →ₗ (α →₀ V_G)`
153+
sending `⟦single a v⟧ ↦ single a ⟦v⟧`. -/
154+
noncomputable def coinvariantsToFinsupp :
155+
Coinvariants (ρ.finsupp α) →ₗ[k] α →₀ Coinvariants ρ :=
156+
Coinvariants.lift _ (mapRange.linearMap (Coinvariants.mk _)) <| fun _ => by ext; simp
157+
158+
variable {ρ α}
159+
160+
@[simp]
161+
lemma coinvariantsToFinsupp_mk_single (x : α) (a : V) :
162+
coinvariantsToFinsupp ρ α (Coinvariants.mk _ (single x a)) =
163+
single x (Coinvariants.mk _ a) := by
164+
simp [coinvariantsToFinsupp]
165+
166+
variable (ρ α) in
167+
/-- Given a `G`-representation `(V, ρ)` and a type `α`, this is the map `(α →₀ V_G) →ₗ (α →₀ V)_G`
168+
sending `single a ⟦v⟧ ↦ ⟦single a v⟧`. -/
169+
noncomputable def finsuppToCoinvariants :
170+
(α →₀ Coinvariants ρ) →ₗ[k] Coinvariants (ρ.finsupp α) :=
171+
lsum (R := k) k fun a => Coinvariants.lift _ (Coinvariants.mk _ ∘ₗ lsingle a) fun g =>
172+
LinearMap.ext fun x => (mk_eq_iff _).2 <| mem_ker_of_eq g (single a x) _ <| by simp
173+
174+
@[simp]
175+
lemma finsuppToCoinvariants_single_mk (a : α) (x : V) :
176+
finsuppToCoinvariants ρ α (single a <| Coinvariants.mk _ x) =
177+
Coinvariants.mk _ (single a x) := by
178+
simp [finsuppToCoinvariants]
179+
180+
variable (ρ α) in
181+
/-- Given a `G`-representation `(V, ρ)` and a type `α`, this is the linear equivalence
182+
`(α →₀ V)_G ≃ₗ (α →₀ V_G)` sending `⟦single a v⟧ ↦ single a ⟦v⟧`. -/
183+
@[simps! symm_apply]
184+
noncomputable def coinvariantsFinsuppLEquiv :
185+
Coinvariants (ρ.finsupp α) ≃ₗ[k] α →₀ Coinvariants ρ :=
186+
LinearEquiv.ofLinear (coinvariantsToFinsupp ρ α) (finsuppToCoinvariants ρ α)
187+
(by ext; simp) (by ext; simp)
188+
189+
@[simp]
190+
lemma coinvariantsFinsuppLEquiv_apply (x : Coinvariants (ρ.finsupp α)) :
191+
coinvariantsFinsuppLEquiv ρ α x = coinvariantsToFinsupp ρ α x := by rfl
192+
193+
end Finsupp
194+
195+
section TensorProduct
196+
197+
open TensorProduct Coinvariants Finsupp
198+
199+
variable {k G V W : Type*} [CommRing k] [Group G] [AddCommGroup V] [Module k V]
200+
[AddCommGroup W] [Module k W] (ρ : Representation k G V) (τ : Representation k G W)
201+
202+
-- the next two lemmas eliminate inverses
203+
204+
@[simp]
205+
lemma Coinvariants.mk_inv_tmul (x : V) (y : W) (g : G) :
206+
Coinvariants.mk (ρ.tprod τ) (ρ g⁻¹ x ⊗ₜ[k] y) = Coinvariants.mk (ρ.tprod τ) (x ⊗ₜ[k] τ g y) :=
207+
(mk_eq_iff _).2 <| mem_ker_of_eq g⁻¹ (x ⊗ₜ[k] τ g y) _ <| by simp
208+
209+
@[simp]
210+
lemma Coinvariants.mk_tmul_inv (x : V) (y : W) (g : G) :
211+
Coinvariants.mk (ρ.tprod τ) (x ⊗ₜ[k] τ g⁻¹ y) = Coinvariants.mk (ρ.tprod τ) (ρ g x ⊗ₜ[k] y) :=
212+
(mk_eq_iff _).2 <| mem_ker_of_eq g⁻¹ (ρ g x ⊗ₜ[k] y) _ <| by simp
213+
214+
/-- Given a `k`-linear `G`-representation `V, ρ`, this is the map `(V ⊗ k[G])_G →ₗ[k] V` sending
215+
`⟦v ⊗ single g r⟧ ↦ r • ρ(g⁻¹)(v)`. -/
216+
noncomputable def ofCoinvariantsTprodLeftRegular :
217+
Coinvariants (ρ.tprod (leftRegular k G)) →ₗ[k] V :=
218+
Coinvariants.lift _ (TensorProduct.lift (Finsupp.linearCombination _ fun g => ρ g⁻¹) ∘ₗ
219+
(TensorProduct.comm _ _ _).toLinearMap) fun _ => by ext; simp
220+
221+
@[simp]
222+
lemma ofCoinvariantsTprodLeftRegular_mk_tmul_single (x : V) (g : G) (r : k) :
223+
ofCoinvariantsTprodLeftRegular ρ (Coinvariants.mk _ (x ⊗ₜ Finsupp.single g r)) = r • ρ g⁻¹ x :=
224+
congr($(Finsupp.linearCombination_single k (v := fun g => ρ g⁻¹) r g) x)
225+
226+
/-- Given a `k`-linear `G`-representation `(V, ρ)`, this is the linear equivalence
227+
`(V ⊗ k[G])_G ≃ₗ[k] V` sending `⟦v ⊗ single g r⟧ ↦ r • ρ(g⁻¹)(v)`. -/
228+
@[simps! symm_apply]
229+
noncomputable def coinvariantsTprodLeftRegularLEquiv :
230+
Coinvariants (ρ.tprod (leftRegular k G)) ≃ₗ[k] V :=
231+
LinearEquiv.ofLinear (ofCoinvariantsTprodLeftRegular ρ)
232+
(Coinvariants.mk _ ∘ₗ (TensorProduct.mk k V (G →₀ k)).flip (single 1 1))
233+
(by ext; simp) (by ext; simp)
234+
235+
@[simp]
236+
lemma coinvariantsTprodLeftRegularLEquiv_apply (x : (ρ.tprod (leftRegular k G)).Coinvariants) :
237+
coinvariantsTprodLeftRegularLEquiv ρ x = ofCoinvariantsTprodLeftRegular ρ x := by
238+
rfl
239+
240+
end TensorProduct
241+
end Representation
128242

129243
namespace Rep
130244

@@ -198,4 +312,100 @@ theorem coinvariantsAdjunction_homEquiv_symm_apply_hom {X : Rep k G} {Y : Module
198312
instance : (coinvariantsFunctor k G).PreservesZeroMorphisms where
199313
instance : (coinvariantsFunctor k G).IsLeftAdjoint := (coinvariantsAdjunction k G).isLeftAdjoint
200314

315+
/-- The functor sending `A, B` to `(A ⊗[k] B)_G`. This is naturally isomorphic to the functor
316+
sending `A, B` to `A ⊗[k[G]] B`, where we give `A` the `k[G]ᵐᵒᵖ`-module structure defined by
317+
`g • a := A.ρ g⁻¹ a`. -/
318+
noncomputable abbrev coinvariantsTensor : Rep k G ⥤ Rep k G ⥤ ModuleCat k :=
319+
(Functor.postcompose₂.obj (coinvariantsFunctor k G)).obj (MonoidalCategory.curriedTensor _)
320+
321+
variable {k G} (A B)
322+
323+
/-- The bilinear map sending `a : A, b : B` to `⟦a ⊗ₜ b⟧` in `(A ⊗[k] B)_G`. -/
324+
noncomputable abbrev coinvariantsTensorMk :
325+
A →ₗ[k] B →ₗ[k] ((coinvariantsTensor k G).obj A).obj B :=
326+
(TensorProduct.mk k A B).compr₂ (Coinvariants.mk _)
327+
328+
variable {A B}
329+
330+
lemma coinvariantsTensorMk_apply (a : A) (b : B) :
331+
coinvariantsTensorMk A B a b = Coinvariants.mk _ (a ⊗ₜ[k] b) := rfl
332+
333+
@[ext]
334+
lemma coinvariantsTensor_hom_ext {M : ModuleCat k}
335+
{f g : ((coinvariantsTensor k G).obj A).obj B ⟶ M}
336+
(hfg : (coinvariantsTensorMk A B).compr₂ f.hom = (coinvariantsTensorMk A B).compr₂ g.hom) :
337+
f = g := coinvariantsFunctor_hom_ext <| ModuleCat.hom_ext <| TensorProduct.ext <| hfg
338+
339+
instance (A : Rep k G) : ((coinvariantsTensor k G).obj A).Additive where
340+
instance (A : Rep k G) : ((coinvariantsTensor k G).obj A).Linear k where
341+
342+
section Finsupp
343+
344+
variable {k G : Type u} [CommRing k] [Group G] (A : Rep k G) (α : Type u) [DecidableEq α]
345+
346+
open MonoidalCategory Finsupp Representation ModuleCat.MonoidalCategory
347+
348+
/-- Given a `k`-linear `G`-representation `(A, ρ)` and a type `α`, this is the map
349+
`(A ⊗ (α →₀ k[G]))_G →ₗ[k] (α →₀ A)` sending
350+
`⟦a ⊗ single x (single g r)⟧ ↦ single x (r • ρ(g⁻¹)(a)).` -/
351+
noncomputable def coinvariantsTensorFreeToFinsupp :
352+
(A ⊗ free k G α).ρ.Coinvariants →ₗ[k] (α →₀ A) :=
353+
(coinvariantsFinsuppLEquiv _ α ≪≫ₗ lcongr (Equiv.refl α)
354+
(coinvariantsTprodLeftRegularLEquiv A.ρ)).toLinearMap ∘ₗ
355+
((coinvariantsFunctor k G).map (finsuppTensorRight A (leftRegular k G) α).hom).hom
356+
357+
variable {A α}
358+
359+
@[simp]
360+
lemma coinvariantsTensorFreeToFinsupp_mk_tmul_single (x : A) (i : α) (g : G) (r : k) :
361+
DFunLike.coe (F := (A.ρ.tprod (Representation.free k G α)).Coinvariants →ₗ[k] α →₀ A.V)
362+
(coinvariantsTensorFreeToFinsupp A α) (Coinvariants.mk _ (x ⊗ₜ single i (single g r))) =
363+
single i (r • A.ρ g⁻¹ x) := by
364+
simp [tensorObj_def, ModuleCat.MonoidalCategory.tensorObj, coinvariantsTensorFreeToFinsupp,
365+
Coinvariants.map, finsuppTensorRight, TensorProduct.finsuppRight]
366+
367+
variable (A α)
368+
369+
/-- Given a `k`-linear `G`-representation `(A, ρ)` and a type `α`, this is the map
370+
`(α →₀ A) →ₗ[k] (A ⊗ (α →₀ k[G]))_G` sending `single x a ↦ ⟦a ⊗ₜ single x 1⟧.` -/
371+
noncomputable def finsuppToCoinvariantsTensorFree :
372+
(α →₀ A) →ₗ[k] Coinvariants (A ⊗ (free k G α)).ρ :=
373+
((coinvariantsFunctor k G).map ((finsuppTensorRight A (leftRegular k G) α)).inv).hom ∘ₗ
374+
(coinvariantsFinsuppLEquiv _ α ≪≫ₗ
375+
lcongr (Equiv.refl α) (coinvariantsTprodLeftRegularLEquiv A.ρ)).symm.toLinearMap
376+
377+
variable {A α}
378+
379+
@[simp]
380+
lemma finsuppToCoinvariantsTensorFree_single (i : α) (x : A) :
381+
DFunLike.coe (F := (α →₀ A.V) →ₗ[k] (A.ρ.tprod (Representation.free k G α)).Coinvariants)
382+
(finsuppToCoinvariantsTensorFree A α) (single i x) =
383+
Coinvariants.mk _ (x ⊗ₜ single i (single (1 : G) (1 : k))) := by
384+
simp [finsuppToCoinvariantsTensorFree, Coinvariants.map, ModuleCat.MonoidalCategory.tensorObj,
385+
tensorObj_def]
386+
387+
variable (A α)
388+
389+
/-- Given a `k`-linear `G`-representation `(A, ρ)` and a type `α`, this is the linear equivalence
390+
`(A ⊗ (α →₀ k[G]))_G ≃ₗ[k] (α →₀ A)` sending
391+
`⟦a ⊗ single x (single g r)⟧ ↦ single x (r • ρ(g⁻¹)(a)).` -/
392+
@[simps! symm_apply]
393+
noncomputable abbrev coinvariantsTensorFreeLEquiv :
394+
Coinvariants (A ⊗ free k G α).ρ ≃ₗ[k] (α →₀ A) :=
395+
LinearEquiv.ofLinear (coinvariantsTensorFreeToFinsupp A α) (finsuppToCoinvariantsTensorFree A α)
396+
(lhom_ext fun i x => by
397+
simp [finsuppToCoinvariantsTensorFree_single i,
398+
coinvariantsTensorFreeToFinsupp_mk_tmul_single x]) <|
399+
Coinvariants.hom_ext <| TensorProduct.ext <| LinearMap.ext fun a => lhom_ext' fun i =>
400+
lhom_ext fun g r => by
401+
simp [coinvariantsTensorFreeToFinsupp_mk_tmul_single a,
402+
finsuppToCoinvariantsTensorFree_single (A := A) i, TensorProduct.smul_tmul]
403+
404+
@[simp]
405+
lemma coinvariantsTensorFreeLEquiv_apply (x : (A ⊗ free k G α).ρ.Coinvariants) :
406+
DFunLike.coe (F := (A.ρ.tprod (Representation.free k G α)).Coinvariants →ₗ[k] α →₀ A)
407+
(A.coinvariantsTensorFreeToFinsupp α) x = coinvariantsTensorFreeToFinsupp A α x := by
408+
rfl
409+
410+
end Finsupp
201411
end Rep

0 commit comments

Comments
 (0)