@@ -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
1717left 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
2137universe 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
129243namespace Rep
130244
@@ -198,4 +312,100 @@ theorem coinvariantsAdjunction_homEquiv_symm_apply_hom {X : Rep k G} {Y : Module
198312instance : (coinvariantsFunctor k G).PreservesZeroMorphisms where
199313instance : (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
201411end Rep
0 commit comments