Skip to content

Commit b3c3864

Browse files
Amelia Livingston101damnations
andcommitted
feat(RepresentationTheory/*): Rep.diagonal k G (n + 1) ≅ Rep.free k G (Fin n → G) (leanprover-community#21736)
The first of 2 PRs refactoring group cohomology to use the bar resolution. Given a comm ring `k` and a group `G`, the bar resolution is the projective resolution of `k` as a trivial `G`-representation whose `n`th object is `Gⁿ →₀ k[G]`, with representation defined pointwise by the left regular representation on k[G], and whose differentials send `(g₀, ..., gₙ)` to `g₀·(g₁, ..., gₙ) + ∑ (-1)ʲ⁺¹·(g₀, ..., gⱼgⱼ₊₁, ..., gₙ) + (-1)ⁿ⁺¹·(g₀, ..., gₙ₋₁)` for `j = 0, ... , n - 1`. The refactor means we can reuse this material to set up group homology. This PR defines an isomorphism between the objects in the standard resolution and the bar resolution, i.e. an isomorphism of representations `k[Gⁿ⁺¹] ≅ (Gⁿ →₀ k[G])`, called `Rep.diagonalSuccIsoFree`. Moves: - groupCohomology.resolution.actionDiagonalSucc -> Action.diagonalSuccIsoTensorTrivial - groupCohomology.resolution.diagonalSucc -> Rep.diagonalSuccIsoTensorTrivial Co-authored-by: 101damnations <[email protected]>
1 parent c49466b commit b3c3864

File tree

6 files changed

+260
-230
lines changed

6 files changed

+260
-230
lines changed

Mathlib/CategoryTheory/Action/Basic.lean

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,15 @@ variable (G : Type*) [Monoid G]
6363

6464
section
6565

66+
/-- The action defined by sending every group element to the identity. -/
67+
@[simps]
68+
def trivial (X : V) : Action V G := { V := X, ρ := 1 }
69+
6670
instance inhabited' : Inhabited (Action (Type*) G) :=
6771
⟨⟨PUnit, 1⟩⟩
6872

69-
/-- The trivial representation of a group. -/
70-
def trivial : Action AddCommGrp G where
71-
V := AddCommGrp.of PUnit
72-
ρ := 1
73-
7473
instance : Inhabited (Action AddCommGrp G) :=
75-
⟨trivial G⟩
74+
⟨trivial G <| AddCommGrp.of PUnit
7675

7776
end
7877

Mathlib/CategoryTheory/Action/Concrete.lean

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,23 @@ open CategoryTheory Limits
2424

2525
namespace Action
2626

27+
section
28+
variable {G : Type u} [Group G] {A : Action (Type u) G}
29+
30+
@[simp]
31+
theorem ρ_inv_self_apply (g : G) (x : A.V) :
32+
A.ρ g⁻¹ (A.ρ g x) = x :=
33+
show (A.ρ g⁻¹ * A.ρ g) x = x by simp [← map_mul, Function.End.one_def]
34+
35+
@[simp]
36+
theorem ρ_self_inv_apply (g : G) (x : A.V) :
37+
A.ρ g (A.ρ g⁻¹ x) = x :=
38+
show (A.ρ g * A.ρ g⁻¹) x = x by simp [← map_mul, Function.End.one_def]
39+
40+
end
41+
2742
/-- Bundles a type `H` with a multiplicative action of `G` as an `Action`. -/
43+
@[simps -isSimp]
2844
def ofMulAction (G : Type*) (H : Type u) [Monoid G] [MulAction G H] : Action (Type u) G where
2945
V := H
3046
ρ := @MulAction.toEndHom _ _ _ (by assumption)
@@ -58,13 +74,11 @@ def ofMulActionLimitCone {ι : Type v} (G : Type max v u) [Monoid G] (F : ι →
5874
rfl }
5975

6076
/-- The `G`-set `G`, acting on itself by left multiplication. -/
61-
@[simps!]
62-
def leftRegular (G : Type u) [Monoid G] : Action (Type u) G :=
77+
abbrev leftRegular (G : Type u) [Monoid G] : Action (Type u) G :=
6378
Action.ofMulAction G G
6479

6580
/-- The `G`-set `Gⁿ`, acting on itself by left multiplication. -/
66-
@[simps!]
67-
def diagonal (G : Type u) [Monoid G] (n : ℕ) : Action (Type u) G :=
81+
abbrev diagonal (G : Type u) [Monoid G] (n : ℕ) : Action (Type u) G :=
6882
Action.ofMulAction G (Fin n → G)
6983

7084
/-- We have `Fin 1 → G ≅ G` as `G`-sets, with `G` acting by left multiplication. -/

Mathlib/CategoryTheory/Action/Monoidal.lean

Lines changed: 72 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2020 Kim Morrison. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Kim Morrison
55
-/
6+
import Mathlib.Algebra.BigOperators.Fin
67
import Mathlib.CategoryTheory.Monoidal.Linear
78
import Mathlib.CategoryTheory.Monoidal.Rigid.FunctorCategory
89
import Mathlib.CategoryTheory.Monoidal.Rigid.OfEquivalence
@@ -189,48 +190,86 @@ end
189190

190191
end Monoidal
191192

193+
section
194+
192195
open MonoidalCategory
193196

194-
/-- Given `X : Action (Type u) G` for `G` a group, then `G × X` (with `G` acting as left
195-
multiplication on the first factor and by `X.ρ` on the second) is isomorphic as a `G`-set to
196-
`G × X` (with `G` acting as left multiplication on the first factor and trivially on the second).
197-
The isomorphism is given by `(g, x) ↦ (g, g⁻¹ • x)`. -/
198-
@[simps]
199-
noncomputable def leftRegularTensorIso (G : Type u) [Group G] (X : Action (Type u) G) :
200-
leftRegular G ⊗ X ≅ leftRegular G ⊗ Action.mk X.V 1 where
201-
hom :=
202-
{ hom := fun g => ⟨g.1, (X.ρ (g.1⁻¹ : G) g.2 : X.V)⟩
203-
comm := fun (g : G) => by
204-
funext ⟨(x₁ : G), (x₂ : X.V)⟩
205-
refine Prod.ext rfl ?_
206-
change (X.ρ ((g * x₁)⁻¹ : G) * X.ρ g) x₂ = X.ρ _ _
207-
rw [mul_inv_rev, ← X.ρ.map_mul, inv_mul_cancel_right] }
208-
inv :=
209-
{ hom := fun g => ⟨g.1, X.ρ g.1 g.2
210-
comm := fun (g : G) => by
211-
funext ⟨(x₁ : G), (x₂ : X.V)⟩
212-
refine Prod.ext rfl ?_
213-
simp [leftRegular] }
214-
hom_inv_id := by
215-
apply Hom.ext
216-
funext x
217-
refine Prod.ext rfl ?_
218-
change (X.ρ x.1 * X.ρ (x.1⁻¹ : G)) x.2 = x.2
219-
rw [← X.ρ.map_mul, mul_inv_cancel, X.ρ.map_one, End.one_def, types_id_apply]
220-
inv_hom_id := by
221-
apply Hom.ext
222-
funext x
223-
refine Prod.ext rfl ?_
224-
change (X.ρ (x.1⁻¹ : G) * X.ρ x.1) x.2 = x.2
225-
rw [← X.ρ.map_mul, inv_mul_cancel, X.ρ.map_one, End.one_def, types_id_apply]
197+
variable (G : Type u)
226198

227199
/-- The natural isomorphism of `G`-sets `Gⁿ⁺¹ ≅ G × Gⁿ`, where `G` acts by left multiplication on
228200
each factor. -/
229201
@[simps!]
230-
noncomputable def diagonalSucc (G : Type*) [Monoid G] (n : ℕ) :
202+
noncomputable def diagonalSuccIsoTensorDiagonal [Monoid G] (n : ℕ) :
231203
diagonal G (n + 1) ≅ leftRegular G ⊗ diagonal G n :=
232204
mkIso (Fin.consEquiv _).symm.toIso fun _ => rfl
233205

206+
@[deprecated (since := "2025-06-02")] alias diagonalSucc := diagonalSuccIsoTensorDiagonal
207+
208+
variable [Group G]
209+
210+
/-- Given `X : Action (Type u) G` for `G` a group, then `G × X` (with `G` acting as left
211+
multiplication on the first factor and by `X.ρ` on the second) is isomorphic as a `G`-set to
212+
`G × X` (with `G` acting as left multiplication on the first factor and trivially on the second).
213+
The isomorphism is given by `(g, x) ↦ (g, g⁻¹ • x)`. -/
214+
@[simps!]
215+
noncomputable def leftRegularTensorIso (X : Action (Type u) G) :
216+
leftRegular G ⊗ X ≅ leftRegular G ⊗ trivial G X.V :=
217+
mkIso (Equiv.toIso {
218+
toFun g := ⟨g.1, (X.ρ (g.1⁻¹ : G) g.2 : X.V)⟩
219+
invFun g := ⟨g.1, X.ρ g.1 g.2
220+
left_inv _ := Prod.ext rfl <| by simp
221+
right_inv _ := Prod.ext rfl <| by simp }) <| fun _ => by
222+
ext _
223+
simp only [tensorObj_V, tensor_ρ, types_comp_apply, tensor_apply, ofMulAction_apply]
224+
simp
225+
226+
/-- An isomorphism of `G`-sets `Gⁿ⁺¹ ≅ G × Gⁿ`, where `G` acts by left multiplication on `Gⁿ⁺¹` and
227+
`G` but trivially on `Gⁿ`. The map sends `(g₀, ..., gₙ) ↦ (g₀, (g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ))`,
228+
and the inverse is `(g₀, (g₁, ..., gₙ)) ↦ (g₀, g₀g₁, g₀g₁g₂, ..., g₀g₁...gₙ).` -/
229+
noncomputable def diagonalSuccIsoTensorTrivial :
230+
∀ n : ℕ, diagonal G (n + 1) ≅ leftRegular G ⊗ trivial G (Fin n → G)
231+
| 0 =>
232+
diagonalOneIsoLeftRegular G ≪≫
233+
(ρ_ _).symm ≪≫ tensorIso (Iso.refl _) (tensorUnitIso (Equiv.ofUnique PUnit _).toIso)
234+
| n + 1 =>
235+
diagonalSuccIsoTensorDiagonal _ _ ≪≫
236+
tensorIso (Iso.refl _) (diagonalSuccIsoTensorTrivial n) ≪≫
237+
leftRegularTensorIso _ _ ≪≫
238+
tensorIso (Iso.refl _)
239+
(mkIso (Fin.insertNthEquiv (fun _ => G) 0).toIso fun _ => rfl)
240+
241+
variable {G}
242+
243+
@[simp]
244+
theorem diagonalSuccIsoTensorTrivial_hom_hom_apply {n : ℕ} (f : Fin (n + 1) → G) :
245+
(diagonalSuccIsoTensorTrivial G n).hom.hom f =
246+
(f 0, fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) := by
247+
induction' n with n hn
248+
· exact Prod.ext rfl (funext fun x => Fin.elim0 x)
249+
· refine Prod.ext rfl (funext fun x => ?_)
250+
induction' x using Fin.cases
251+
<;> simp_all only [tensorObj_V, diagonalSuccIsoTensorTrivial, Iso.trans_hom, tensorIso_hom,
252+
Iso.refl_hom, id_tensorHom, comp_hom, whiskerLeft_hom, types_comp_apply, whiskerLeft_apply,
253+
leftRegularTensorIso_hom_hom, tensor_ρ, tensor_apply, ofMulAction_apply]
254+
<;> simp [ofMulAction_V, types_tensorObj_def, Fin.tail, Fin.castSucc_fin_succ]
255+
256+
@[simp]
257+
theorem diagonalSuccIsoTensorTrivial_inv_hom_apply {n : ℕ} (g : G) (f : Fin n → G) :
258+
(diagonalSuccIsoTensorTrivial G n).inv.hom (g, f) =
259+
(g • Fin.partialProd f : Fin (n + 1) → G) := by
260+
induction' n with n hn generalizing g
261+
· funext (x : Fin 1)
262+
simp [diagonalSuccIsoTensorTrivial, diagonalOneIsoLeftRegular, Subsingleton.elim x 0,
263+
ofMulAction_V]
264+
· funext x
265+
induction' x using Fin.cases
266+
<;> simp_all only [diagonalSuccIsoTensorTrivial, Iso.trans_inv, comp_hom, mkIso_inv_hom,
267+
tensorObj_V, types_comp_apply, leftRegularTensorIso_inv_hom, tensor_ρ, tensor_apply,
268+
ofMulAction_apply]
269+
<;> simp_all [types_tensorObj_def, mul_assoc, Fin.partialProd_succ', ofMulAction_V]
270+
271+
end
272+
234273
end Action
235274

236275
namespace CategoryTheory.Functor

Mathlib/CategoryTheory/Monoidal/Types/Basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ instance typesCartesianMonoidalCategory : CartesianMonoidalCategory (Type u) :=
2525

2626
instance : BraidedCategory (Type u) := .ofCartesianMonoidalCategory
2727

28+
theorem types_tensorObj_def {X Y : Type u} : X ⊗ Y = (X × Y) := rfl
29+
30+
theorem types_tensorUnit_def : 𝟙_ (Type u) = PUnit := rfl
31+
2832
@[simp]
2933
theorem tensor_apply {W X Y Z : Type u} (f : W ⟶ X) (g : Y ⟶ Z) (p : W ⊗ Y) :
3034
(f ⊗ g) p = (f p.1, g p.2) :=

0 commit comments

Comments
 (0)