representation_theory.group_cohomology.resolution
⟷
Mathlib.RepresentationTheory.GroupCohomology.Resolution
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2022 Amelia Livingston. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
-/
-import Algebra.Category.Module.Projective
+import Algebra.Category.ModuleCat.Projective
import AlgebraicTopology.ExtraDegeneracy
import CategoryTheory.Abelian.Ext
import RepresentationTheory.Rep
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -660,7 +660,7 @@ theorem quasiIso_forget₂_εToSingle₀ :
QuasiIso' (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
have h : QuasiIso' (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso' _
- rw [← ε_to_single₀_comp_eq k G] at h
+ rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso'_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso_forget₂_εToSingle₀
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -370,7 +370,7 @@ def classifyingSpaceUniversalCover [Monoid G] : SimplicialObject (Action (Type u
map m n f :=
{ hom := fun x => x ∘ f.unop.toOrderHom
comm' := fun g => rfl }
- map_id' n := rfl
+ map_id'' n := rfl
map_comp' i j k f g := rfl
#align classifying_space_universal_cover classifyingSpaceUniversalCover
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -103,7 +103,7 @@ def actionDiagonalSucc (G : Type u) [Group G] :
tensorIso (Iso.refl _) (Action_diagonal_succ n) ≪≫
leftRegularTensorIso _ _ ≪≫
tensorIso (Iso.refl _)
- (mkIso (Equiv.piFinSuccAboveEquiv (fun j => G) 0).symm.toIso fun g => rfl)
+ (mkIso (Equiv.piFinSuccAbove (fun j => G) 0).symm.toIso fun g => rfl)
#align group_cohomology.resolution.Action_diagonal_succ groupCohomology.resolution.actionDiagonalSucc
-/
@@ -118,7 +118,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
· dsimp only [Action_diagonal_succ]
simp only [iso.trans_hom, comp_hom, types_comp_apply, diagonal_succ_hom_hom,
left_regular_tensor_iso_hom_hom, tensor_iso_hom, mk_iso_hom_hom, Equiv.toIso_hom,
- tensor_hom, Equiv.piFinSuccAboveEquiv_symm_apply, tensor_apply, types_id_apply, tensor_rho,
+ tensor_hom, Equiv.piFinSuccAbove_symm_apply, tensor_apply, types_id_apply, tensor_rho,
MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
· simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -655,19 +655,19 @@ theorem εToSingle₀_comp_eq :
#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
-/
-#print groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀ /-
-theorem quasiIso'OfForget₂εToSingle₀ :
+#print groupCohomology.resolution.quasiIso_forget₂_εToSingle₀ /-
+theorem quasiIso_forget₂_εToSingle₀ :
QuasiIso' (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
have h : QuasiIso' (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso' _
rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso'_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso_forget₂_εToSingle₀
-/
instance : QuasiIso' (εToSingle₀ k G) :=
- (forget₂ _ (ModuleCat.{u} k)).quasiIso'_of_map_quasiIso' _ (quasiIso'OfForget₂εToSingle₀ k G)
+ (forget₂ _ (ModuleCat.{u} k)).quasiIso'_of_map_quasiIso' _ (quasiIso_forget₂_εToSingle₀ k G)
end Exactness
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -190,7 +190,7 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
single (g • partialProd f) (a * b) :=
by
dsimp only [diagonal_succ]
- simp only [iso.trans_inv, iso.symm_inv, iso.refl_inv, tensor_iso_inv, Action.tensorHom,
+ simp only [iso.trans_inv, iso.symm_inv, iso.refl_inv, tensor_iso_inv, Action.tensor_hom,
Action.comp_hom, ModuleCat.comp_def, LinearMap.comp_apply, as_iso_hom, functor.map_iso_inv,
ModuleCat.MonoidalCategory.hom_apply, linearization_trivial_iso_inv_hom_apply,
linearization_μ_hom, Action.id_hom ((linearization k G).obj _), Action_diagonal_succ_inv_apply,
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -655,19 +655,19 @@ theorem εToSingle₀_comp_eq :
#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
-/
-#print groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀ /-
-theorem quasiIsoOfForget₂εToSingle₀ :
- QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
+#print groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀ /-
+theorem quasiIso'OfForget₂εToSingle₀ :
+ QuasiIso' (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
- have h : QuasiIso (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso _
+ have h : QuasiIso' (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso' _
rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
- exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
+ exact quasiIso'_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀
-/
-instance : QuasiIso (εToSingle₀ k G) :=
- (forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIsoOfForget₂εToSingle₀ k G)
+instance : QuasiIso' (εToSingle₀ k G) :=
+ (forget₂ _ (ModuleCat.{u} k)).quasiIso'_of_map_quasiIso' _ (quasiIso'OfForget₂εToSingle₀ k G)
end Exactness
@@ -695,7 +695,7 @@ standard resolution of `k` called `group_cohomology.resolution k G`. -/
def groupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
- (groupCohomology.resolution k G)).homology
+ (groupCohomology.resolution k G)).homology'
n).unop :=
by
let this.1 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3365b20c2ffa7c35e47e5209b89ba9abdddf3ffe
@@ -74,7 +74,7 @@ local notation "Gⁿ" => Fin n → G
local notation "Gⁿ⁺¹" => Fin (n + 1) → G
-namespace GroupCohomology.resolution
+namespace groupCohomology.resolution
open Finsupp hiding lift
@@ -89,7 +89,7 @@ section Action
open Action
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print GroupCohomology.Resolution.actionDiagonalSucc /-
+#print groupCohomology.resolution.actionDiagonalSucc /-
/-- An isomorphism of `G`-sets `Gⁿ⁺¹ ≅ G × Gⁿ`, where `G` acts by left multiplication on `Gⁿ⁺¹` and
`G` but trivially on `Gⁿ`. The map sends `(g₀, ..., gₙ) ↦ (g₀, (g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ))`,
and the inverse is `(g₀, (g₁, ..., gₙ)) ↦ (g₀, g₀g₁, g₀g₁g₂, ..., g₀g₁...gₙ).` -/
@@ -104,10 +104,10 @@ def actionDiagonalSucc (G : Type u) [Group G] :
leftRegularTensorIso _ _ ≪≫
tensorIso (Iso.refl _)
(mkIso (Equiv.piFinSuccAboveEquiv (fun j => G) 0).symm.toIso fun g => rfl)
-#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
+#align group_cohomology.resolution.Action_diagonal_succ groupCohomology.resolution.actionDiagonalSucc
-/
-#print GroupCohomology.Resolution.actionDiagonalSucc_hom_apply /-
+#print groupCohomology.resolution.actionDiagonalSucc_hom_apply /-
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
(actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f i.cast_succ)⁻¹ * f i.succ) :=
by
@@ -122,10 +122,10 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
· simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
-#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
+#align group_cohomology.resolution.Action_diagonal_succ_hom_apply groupCohomology.resolution.actionDiagonalSucc_hom_apply
-/
-#print GroupCohomology.Resolution.actionDiagonalSucc_inv_apply /-
+#print groupCohomology.resolution.actionDiagonalSucc_inv_apply /-
theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f : Fin n → G) :
(actionDiagonalSucc G n).inv.hom (g, f) = (g • Fin.partialProd f : Fin (n + 1) → G) :=
by
@@ -144,7 +144,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
· simp only [Fin.cons_zero, Fin.partialProd_zero, mul_one]
· intro i
simpa only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', mul_assoc]
-#align group_cohomology.resolution.Action_diagonal_succ_inv_apply GroupCohomology.Resolution.actionDiagonalSucc_inv_apply
+#align group_cohomology.resolution.Action_diagonal_succ_inv_apply groupCohomology.resolution.actionDiagonalSucc_inv_apply
-/
end Action
@@ -154,7 +154,7 @@ section Rep
open Rep
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print GroupCohomology.Resolution.diagonalSucc /-
+#print groupCohomology.resolution.diagonalSucc /-
/-- An isomorphism of `k`-linear representations of `G` from `k[Gⁿ⁺¹]` to `k[G] ⊗ₖ k[Gⁿ]` (on
which `G` acts by `ρ(g₁)(g₂ ⊗ x) = (g₁ * g₂) ⊗ x`) sending `(g₀, ..., gₙ)` to
`g₀ ⊗ (g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ)`. The inverse sends `g₀ ⊗ (g₁, ..., gₙ)` to
@@ -164,12 +164,12 @@ def diagonalSucc (n : ℕ) :
(linearization k G).mapIso (actionDiagonalSucc G n) ≪≫
(asIso ((linearization k G).μ (Action.leftRegular G) _)).symm ≪≫
tensorIso (Iso.refl _) (linearizationTrivialIso k G (Fin n → G))
-#align group_cohomology.resolution.diagonal_succ GroupCohomology.Resolution.diagonalSucc
+#align group_cohomology.resolution.diagonal_succ groupCohomology.resolution.diagonalSucc
-/
variable {k G n}
-#print GroupCohomology.Resolution.diagonalSucc_hom_single /-
+#print groupCohomology.resolution.diagonalSucc_hom_single /-
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
single (f 0) 1 ⊗ₜ single (fun i => (f i.cast_succ)⁻¹ * f i.succ) a :=
@@ -181,10 +181,10 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
linearization_μ_inv_hom, Action_diagonal_succ_hom_apply, finsuppTensorFinsupp',
LinearEquiv.trans_symm, lcongr_symm, LinearEquiv.trans_apply, lcongr_single,
TensorProduct.lid_symm_apply, finsuppTensorFinsupp_symm_single, LinearEquiv.coe_toLinearMap]
-#align group_cohomology.resolution.diagonal_succ_hom_single GroupCohomology.Resolution.diagonalSucc_hom_single
+#align group_cohomology.resolution.diagonal_succ_hom_single groupCohomology.resolution.diagonalSucc_hom_single
-/
-#print GroupCohomology.Resolution.diagonalSucc_inv_single_single /-
+#print groupCohomology.resolution.diagonalSucc_inv_single_single /-
theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g a ⊗ₜ Finsupp.single f b) =
single (g • partialProd f) (a * b) :=
@@ -197,10 +197,10 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
ModuleCat.id_apply, LinearEquiv.coe_toLinearMap,
finsuppTensorFinsupp'_single_tmul_single k (Action.leftRegular G).V,
linearization_map_hom_single (Action_diagonal_succ G n).inv (g, f) (a * b)]
-#align group_cohomology.resolution.diagonal_succ_inv_single_single GroupCohomology.Resolution.diagonalSucc_inv_single_single
+#align group_cohomology.resolution.diagonal_succ_inv_single_single groupCohomology.resolution.diagonalSucc_inv_single_single
-/
-#print GroupCohomology.Resolution.diagonalSucc_inv_single_left /-
+#print groupCohomology.resolution.diagonalSucc_inv_single_left /-
theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g r ⊗ₜ f) =
Finsupp.lift (Gⁿ⁺¹ →₀ k) k Gⁿ (fun f => single (g • partialProd f) r) f :=
@@ -211,10 +211,10 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
diagonal_succ_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
MulZeroClass.zero_mul, single_zero]
-#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
+#align group_cohomology.resolution.diagonal_succ_inv_single_left groupCohomology.resolution.diagonalSucc_inv_single_left
-/
-#print GroupCohomology.Resolution.diagonalSucc_inv_single_right /-
+#print groupCohomology.resolution.diagonalSucc_inv_single_right /-
theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
(diagonalSucc k G n).inv.hom (g ⊗ₜ Finsupp.single f r) =
Finsupp.lift _ k G (fun a => single (a • partialProd f) r) g :=
@@ -224,7 +224,7 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonal_succ_inv_single_single,
TensorProduct.add_tmul, Finsupp.sum_single_index, MulZeroClass.zero_mul, single_zero]
-#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
+#align group_cohomology.resolution.diagonal_succ_inv_single_right groupCohomology.resolution.diagonalSucc_inv_single_right
-/
end Rep
@@ -235,7 +235,7 @@ open scoped TensorProduct
open Representation
-#print GroupCohomology.Resolution.ofMulActionBasisAux /-
+#print groupCohomology.resolution.ofMulActionBasisAux /-
/-- The `k[G]`-linear isomorphism `k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹]`, where the `k[G]`-module structure on
the lefthand side is `tensor_product.left_module`, whilst that of the righthand side comes from
`representation.as_module`. Allows us to use `basis.algebra_tensor_product` to get a `k[G]`-basis
@@ -254,10 +254,10 @@ def ofMulActionBasisAux :
show (r * x) ⊗ₜ y = _
rw [← of_mul_action_self_smul_eq_mul, smul_tprod_one_as_module]
· rw [smul_add, hz, hy, smul_add] }
-#align group_cohomology.resolution.of_mul_action_basis_aux GroupCohomology.Resolution.ofMulActionBasisAux
+#align group_cohomology.resolution.of_mul_action_basis_aux groupCohomology.resolution.ofMulActionBasisAux
-/
-#print GroupCohomology.Resolution.ofMulActionBasis /-
+#print groupCohomology.resolution.ofMulActionBasis /-
/-- A `k[G]`-basis of `k[Gⁿ⁺¹]`, coming from the `k[G]`-linear isomorphism
`k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹].` -/
def ofMulActionBasis :
@@ -266,25 +266,25 @@ def ofMulActionBasis :
(@Algebra.TensorProduct.basis k _ (MonoidAlgebra k G) _ _ ((Fin n → G) →₀ k) _ _ (Fin n → G)
⟨LinearEquiv.refl k _⟩)
(ofMulActionBasisAux k G n)
-#align group_cohomology.resolution.of_mul_action_basis GroupCohomology.Resolution.ofMulActionBasis
+#align group_cohomology.resolution.of_mul_action_basis groupCohomology.resolution.ofMulActionBasis
-/
-#print GroupCohomology.Resolution.ofMulAction_free /-
+#print groupCohomology.resolution.ofMulAction_free /-
theorem ofMulAction_free :
Module.Free (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
Module.Free.of_basis (ofMulActionBasis k G n)
-#align group_cohomology.resolution.of_mul_action_free GroupCohomology.Resolution.ofMulAction_free
+#align group_cohomology.resolution.of_mul_action_free groupCohomology.resolution.ofMulAction_free
-/
end Basis
-end GroupCohomology.resolution
+end groupCohomology.resolution
namespace Rep
variable (n) [Group G] (A : Rep k G)
-open GroupCohomology.resolution
+open groupCohomology.resolution
#print Rep.diagonalHomEquiv /-
/-- Given a `k`-linear `G`-representation `A`, the set of representation morphisms
@@ -467,85 +467,85 @@ end classifyingSpaceUniversalCover
variable (k)
-#print GroupCohomology.resolution /-
+#print groupCohomology.resolution /-
/-- The standard resolution of `k` as a trivial representation, defined as the alternating
face map complex of a simplicial `k`-linear `G`-representation. -/
-def GroupCohomology.resolution [Monoid G] :=
+def groupCohomology.resolution [Monoid G] :=
(AlgebraicTopology.alternatingFaceMapComplex (Rep k G)).obj
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1)
-#align group_cohomology.resolution GroupCohomology.resolution
+#align group_cohomology.resolution groupCohomology.resolution
-/
-namespace GroupCohomology.resolution
+namespace groupCohomology.resolution
open classifyingSpaceUniversalCover AlgebraicTopology CategoryTheory CategoryTheory.Limits
variable (k G) [Monoid G]
-#print GroupCohomology.Resolution.d /-
+#print groupCohomology.resolution.d /-
/-- The `k`-linear map underlying the differential in the standard resolution of `k` as a trivial
`k`-linear `G`-representation. It sends `(g₀, ..., gₙ) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ)`. -/
def d (G : Type u) (n : ℕ) : ((Fin (n + 1) → G) →₀ k) →ₗ[k] (Fin n → G) →₀ k :=
Finsupp.lift ((Fin n → G) →₀ k) k (Fin (n + 1) → G) fun g =>
(@Finset.univ (Fin (n + 1)) _).Sum fun p =>
Finsupp.single (g ∘ p.succAboveEmb) ((-1 : k) ^ (p : ℕ))
-#align group_cohomology.resolution.d GroupCohomology.Resolution.d
+#align group_cohomology.resolution.d groupCohomology.resolution.d
-/
variable {k G}
-#print GroupCohomology.Resolution.d_of /-
+#print groupCohomology.resolution.d_of /-
@[simp]
theorem d_of {G : Type u} {n : ℕ} (c : Fin (n + 1) → G) :
d k G n (Finsupp.single c 1) =
Finset.univ.Sum fun p : Fin (n + 1) =>
Finsupp.single (c ∘ p.succAboveEmb) ((-1 : k) ^ (p : ℕ)) :=
by simp [d]
-#align group_cohomology.resolution.d_of GroupCohomology.Resolution.d_of
+#align group_cohomology.resolution.d_of groupCohomology.resolution.d_of
-/
variable (k G)
-#print GroupCohomology.Resolution.xIso /-
+#print groupCohomology.resolution.xIso /-
/-- The `n`th object of the standard resolution of `k` is definitionally isomorphic to `k[Gⁿ⁺¹]`
equipped with the representation induced by the diagonal action of `G`. -/
-def xIso (n : ℕ) : (GroupCohomology.resolution k G).pt n ≅ Rep.ofMulAction k G (Fin (n + 1) → G) :=
+def xIso (n : ℕ) : (groupCohomology.resolution k G).pt n ≅ Rep.ofMulAction k G (Fin (n + 1) → G) :=
Iso.refl _
-#align group_cohomology.resolution.X_iso GroupCohomology.Resolution.xIso
+#align group_cohomology.resolution.X_iso groupCohomology.resolution.xIso
-/
-#print GroupCohomology.Resolution.x_projective /-
+#print groupCohomology.resolution.x_projective /-
theorem x_projective (G : Type u) [Group G] (n : ℕ) :
- Projective ((GroupCohomology.resolution k G).pt n) :=
+ Projective ((groupCohomology.resolution k G).pt n) :=
Rep.equivalenceModuleMonoidAlgebra.toAdjunction.projective_of_map_projective _ <|
@ModuleCat.projective_of_free.{u} _ _
(ModuleCat.of (MonoidAlgebra k G) (Representation.ofMulAction k G (Fin (n + 1) → G)).asModule)
_ (ofMulActionBasis k G n)
-#align group_cohomology.resolution.X_projective GroupCohomology.Resolution.x_projective
+#align group_cohomology.resolution.X_projective groupCohomology.resolution.x_projective
-/
-#print GroupCohomology.Resolution.d_eq /-
+#print groupCohomology.resolution.d_eq /-
/-- Simpler expression for the differential in the standard resolution of `k` as a
`G`-representation. It sends `(g₀, ..., gₙ₊₁) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ₊₁)`. -/
-theorem d_eq (n : ℕ) : ((GroupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) :=
+theorem d_eq (n : ℕ) : ((groupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) :=
by
ext x y
- dsimp [GroupCohomology.resolution]
+ dsimp [groupCohomology.resolution]
simpa [← @intCast_smul k, simplicial_object.δ]
-#align group_cohomology.resolution.d_eq GroupCohomology.Resolution.d_eq
+#align group_cohomology.resolution.d_eq groupCohomology.resolution.d_eq
-/
section Exactness
-#print GroupCohomology.Resolution.forget₂ToModuleCat /-
+#print groupCohomology.resolution.forget₂ToModuleCat /-
/-- The standard resolution of `k` as a trivial representation as a complex of `k`-modules. -/
def forget₂ToModuleCat :=
((forget₂ (Rep k G) (ModuleCat.{u} k)).mapHomologicalComplex _).obj
- (GroupCohomology.resolution k G)
-#align group_cohomology.resolution.forget₂_to_Module GroupCohomology.Resolution.forget₂ToModuleCat
+ (groupCohomology.resolution k G)
+#align group_cohomology.resolution.forget₂_to_Module groupCohomology.resolution.forget₂ToModuleCat
-/
-#print GroupCohomology.Resolution.compForgetAugmentedIso /-
+#print groupCohomology.resolution.compForgetAugmentedIso /-
/-- If we apply the free functor `Type u ⥤ Module.{u} k` to the universal cover of the classifying
space of `G` as a simplicial set, then take the alternating face map complex, the result is
isomorphic to the standard resolution of the trivial `G`-representation `k` as a complex of
@@ -553,18 +553,18 @@ isomorphic to the standard resolution of the trivial `G`-representation `k` as a
def compForgetAugmentedIso :
AlternatingFaceMapComplex.obj
(SimplicialObject.Augmented.drop.obj (compForgetAugmented.toModule k G)) ≅
- GroupCohomology.Resolution.forget₂ToModuleCat k G :=
+ groupCohomology.resolution.forget₂ToModuleCat k G :=
eqToIso
(Functor.congr_obj (map_alternatingFaceMapComplex (forget₂ (Rep k G) (ModuleCat.{u} k))).symm
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1))
-#align group_cohomology.resolution.comp_forget_augmented_iso GroupCohomology.Resolution.compForgetAugmentedIso
+#align group_cohomology.resolution.comp_forget_augmented_iso groupCohomology.resolution.compForgetAugmentedIso
-/
-#print GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv /-
+#print groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv /-
/-- As a complex of `k`-modules, the standard resolution of the trivial `G`-representation `k` is
homotopy equivalent to the complex which is `k` at 0 and 0 elsewhere. -/
def forget₂ToModuleCatHomotopyEquiv :
- HomotopyEquiv (GroupCohomology.Resolution.forget₂ToModuleCat k G)
+ HomotopyEquiv (groupCohomology.resolution.forget₂ToModuleCat k G)
((ChainComplex.single₀ (ModuleCat k)).obj ((forget₂ (Rep k G) _).obj <| Rep.trivial k G k)) :=
(HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).trans <|
(SimplicialObject.Augmented.ExtraDegeneracy.homotopyEquiv
@@ -573,10 +573,10 @@ def forget₂ToModuleCatHomotopyEquiv :
(ChainComplex.single₀ (ModuleCat.{u} k)).mapIso
(@Finsupp.LinearEquiv.finsuppUnique k k _ _ _ (⊤_ Type u)
Types.terminalIso.toEquiv.unique).toModuleIso)
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv
-/
-#print GroupCohomology.Resolution.ε /-
+#print groupCohomology.resolution.ε /-
/-- The hom of `k`-linear `G`-representations `k[G¹] → k` sending `∑ nᵢgᵢ ↦ ∑ nᵢ`. -/
def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k
where
@@ -587,10 +587,10 @@ def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k
Finsupp.total (Fin 1 → G) k k (fun f => (1 : k)) (Finsupp.mapDomain _ (Finsupp.single _ _)) =
Finsupp.total _ _ _ _ (Finsupp.single _ _)
simp only [Finsupp.mapDomain_single, Finsupp.total_single]
-#align group_cohomology.resolution.ε GroupCohomology.Resolution.ε
+#align group_cohomology.resolution.ε groupCohomology.resolution.ε
-/
-#print GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq /-
+#print groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq /-
/-- The homotopy equivalence of complexes of `k`-modules between the standard resolution of `k` as
a trivial `G`-representation, and the complex which is `k` at 0 and 0 everywhere else, acts as
`∑ nᵢgᵢ ↦ ∑ nᵢ : k[G¹] → k` at 0. -/
@@ -617,11 +617,11 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
rw [Finsupp.total_single, one_smul, @Unique.eq_default _ types.terminal_iso.to_equiv.unique a,
Finsupp.single_eq_same]
· exact @Subsingleton.elim _ (@Unique.subsingleton _ (limits.unique_to_terminal _)) _ _
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
-/
-#print GroupCohomology.Resolution.d_comp_ε /-
-theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 :=
+#print groupCohomology.resolution.d_comp_ε /-
+theorem d_comp_ε : (groupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 :=
by
ext1
refine' LinearMap.ext fun x => _
@@ -630,19 +630,19 @@ theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 :=
(forget₂_to_Module_homotopy_equiv k G).1.2 1 0 rfl] <;>
exact comp_zero
exact LinearMap.ext_iff.1 this _
-#align group_cohomology.resolution.d_comp_ε GroupCohomology.Resolution.d_comp_ε
+#align group_cohomology.resolution.d_comp_ε groupCohomology.resolution.d_comp_ε
-/
-#print GroupCohomology.Resolution.εToSingle₀ /-
+#print groupCohomology.resolution.εToSingle₀ /-
/-- The chain map from the standard resolution of `k` to `k[0]` given by `∑ nᵢgᵢ ↦ ∑ nᵢ` in
degree zero. -/
def εToSingle₀ :
- GroupCohomology.resolution k G ⟶ (ChainComplex.single₀ _).obj (Rep.trivial k G k) :=
- ((GroupCohomology.resolution k G).toSingle₀Equiv _).symm ⟨ε k G, d_comp_ε k G⟩
-#align group_cohomology.resolution.ε_to_single₀ GroupCohomology.Resolution.εToSingle₀
+ groupCohomology.resolution k G ⟶ (ChainComplex.single₀ _).obj (Rep.trivial k G k) :=
+ ((groupCohomology.resolution k G).toSingle₀Equiv _).symm ⟨ε k G, d_comp_ε k G⟩
+#align group_cohomology.resolution.ε_to_single₀ groupCohomology.resolution.εToSingle₀
-/
-#print GroupCohomology.Resolution.εToSingle₀_comp_eq /-
+#print groupCohomology.resolution.εToSingle₀_comp_eq /-
theorem εToSingle₀_comp_eq :
((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G) ≫
(ChainComplex.single₀MapHomologicalComplex _).hom.app _ =
@@ -652,10 +652,10 @@ theorem εToSingle₀_comp_eq :
dsimp
rw [category.comp_id]
exact (forget₂_to_Module_homotopy_equiv_f_0_eq k G).symm
-#align group_cohomology.resolution.ε_to_single₀_comp_eq GroupCohomology.Resolution.εToSingle₀_comp_eq
+#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
-/
-#print GroupCohomology.Resolution.quasiIsoOfForget₂εToSingle₀ /-
+#print groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀ /-
theorem quasiIsoOfForget₂εToSingle₀ :
QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
@@ -663,7 +663,7 @@ theorem quasiIsoOfForget₂εToSingle₀ :
rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.Resolution.quasiIsoOfForget₂εToSingle₀
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
-/
instance : QuasiIso (εToSingle₀ k G) :=
@@ -671,37 +671,37 @@ instance : QuasiIso (εToSingle₀ k G) :=
end Exactness
-end GroupCohomology.resolution
+end groupCohomology.resolution
-open GroupCohomology.resolution
+open groupCohomology.resolution
variable [Group G]
-#print GroupCohomology.projectiveResolution /-
+#print groupCohomology.projectiveResolution /-
/-- The standard projective resolution of `k` as a trivial `k`-linear `G`-representation. -/
-def GroupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
+def groupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
(εToSingle₀ k G).toSingle₀ProjectiveResolution (x_projective k G)
-#align group_cohomology.ProjectiveResolution GroupCohomology.projectiveResolution
+#align group_cohomology.ProjectiveResolution groupCohomology.projectiveResolution
-/
instance : EnoughProjectives (Rep k G) :=
Rep.equivalenceModuleMonoidAlgebra.enoughProjectives_iff.2
ModuleCat.moduleCat_enoughProjectives.{u}
-#print GroupCohomology.extIso /-
+#print groupCohomology.extIso /-
/-- Given a `k`-linear `G`-representation `V`, `Extⁿ(k, V)` (where `k` is a trivial `k`-linear
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
standard resolution of `k` called `group_cohomology.resolution k G`. -/
-def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
+def groupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
- (GroupCohomology.resolution k G)).homology
+ (groupCohomology.resolution k G)).homology
n).unop :=
by
let this.1 :=
(((linear_yoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
- (GroupCohomology.projectiveResolution k G)).unop.symm <;>
+ (groupCohomology.projectiveResolution k G)).unop.symm <;>
exact this
-#align group_cohomology.Ext_iso GroupCohomology.extIso
+#align group_cohomology.Ext_iso groupCohomology.extIso
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2022 Amelia Livingston. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
-/
-import Mathbin.Algebra.Category.Module.Projective
-import Mathbin.AlgebraicTopology.ExtraDegeneracy
-import Mathbin.CategoryTheory.Abelian.Ext
-import Mathbin.RepresentationTheory.Rep
+import Algebra.Category.Module.Projective
+import AlgebraicTopology.ExtraDegeneracy
+import CategoryTheory.Abelian.Ext
+import RepresentationTheory.Rep
#align_import representation_theory.group_cohomology.resolution from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2022 Amelia Livingston. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
-
-! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
-! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Category.Module.Projective
import Mathbin.AlgebraicTopology.ExtraDegeneracy
import Mathbin.CategoryTheory.Abelian.Ext
import Mathbin.RepresentationTheory.Rep
+#align_import representation_theory.group_cohomology.resolution from "leanprover-community/mathlib"@"30faa0c3618ce1472bf6305ae0e3fa56affa3f95"
+
/-!
# The structure of the `k[G]`-module `k[Gⁿ]`
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -124,7 +124,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
tensor_hom, Equiv.piFinSuccAboveEquiv_symm_apply, tensor_apply, types_id_apply, tensor_rho,
MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
- · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSuccEmb_fin_succ]
+ · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
-/
@@ -348,7 +348,8 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
group cohomology. -/
theorem diagonalHomEquiv_symm_partialProd_succ (f : (Fin n → G) → A) (g : Fin (n + 1) → G)
(a : Fin (n + 1)) :
- ((diagonalHomEquiv n A).symm f).hom (Finsupp.single (Fin.partialProd g ∘ a.succ.succAbove) 1) =
+ ((diagonalHomEquiv n A).symm f).hom
+ (Finsupp.single (Fin.partialProd g ∘ a.succ.succAboveEmb) 1) =
f (Fin.contractNth a (· * ·) g) :=
by
simp only [diagonal_hom_equiv_symm_apply, Function.comp_apply, Fin.succ_succAbove_zero,
@@ -490,7 +491,7 @@ variable (k G) [Monoid G]
def d (G : Type u) (n : ℕ) : ((Fin (n + 1) → G) →₀ k) →ₗ[k] (Fin n → G) →₀ k :=
Finsupp.lift ((Fin n → G) →₀ k) k (Fin (n + 1) → G) fun g =>
(@Finset.univ (Fin (n + 1)) _).Sum fun p =>
- Finsupp.single (g ∘ p.succAbove) ((-1 : k) ^ (p : ℕ))
+ Finsupp.single (g ∘ p.succAboveEmb) ((-1 : k) ^ (p : ℕ))
#align group_cohomology.resolution.d GroupCohomology.Resolution.d
-/
@@ -501,7 +502,7 @@ variable {k G}
theorem d_of {G : Type u} {n : ℕ} (c : Fin (n + 1) → G) :
d k G n (Finsupp.single c 1) =
Finset.univ.Sum fun p : Fin (n + 1) =>
- Finsupp.single (c ∘ p.succAbove) ((-1 : k) ^ (p : ℕ)) :=
+ Finsupp.single (c ∘ p.succAboveEmb) ((-1 : k) ^ (p : ℕ)) :=
by simp [d]
#align group_cohomology.resolution.d_of GroupCohomology.Resolution.d_of
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5dc6092d09e5e489106865241986f7f2ad28d4c8
@@ -124,7 +124,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
tensor_hom, Equiv.piFinSuccAboveEquiv_symm_apply, tensor_apply, types_id_apply, tensor_rho,
MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
- · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
+ · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSuccEmb_fin_succ]
#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
-! leanprover-community/mathlib commit cec81510e48e579bde6acd8568c06a87af045b63
+! leanprover-community/mathlib commit 30faa0c3618ce1472bf6305ae0e3fa56affa3f95
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.RepresentationTheory.Rep
/-!
# The structure of the `k[G]`-module `k[Gⁿ]`
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file contains facts about an important `k[G]`-module structure on `k[Gⁿ]`, where `k` is a
commutative ring and `G` is a group. The module structure arises from the representation
`G →* End(k[Gⁿ])` induced by the diagonal action of `G` on `Gⁿ.`
mathlib commit https://github.com/leanprover-community/mathlib/commit/93f880918cb51905fd51b76add8273cbc27718ab
@@ -89,6 +89,7 @@ section Action
open Action
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print GroupCohomology.Resolution.actionDiagonalSucc /-
/-- An isomorphism of `G`-sets `Gⁿ⁺¹ ≅ G × Gⁿ`, where `G` acts by left multiplication on `Gⁿ⁺¹` and
`G` but trivially on `Gⁿ`. The map sends `(g₀, ..., gₙ) ↦ (g₀, (g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ))`,
and the inverse is `(g₀, (g₁, ..., gₙ)) ↦ (g₀, g₀g₁, g₀g₁g₂, ..., g₀g₁...gₙ).` -/
@@ -104,7 +105,9 @@ def actionDiagonalSucc (G : Type u) [Group G] :
tensorIso (Iso.refl _)
(mkIso (Equiv.piFinSuccAboveEquiv (fun j => G) 0).symm.toIso fun g => rfl)
#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
+-/
+#print GroupCohomology.Resolution.actionDiagonalSucc_hom_apply /-
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
(actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f i.cast_succ)⁻¹ * f i.succ) :=
by
@@ -120,7 +123,9 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
· simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
+-/
+#print GroupCohomology.Resolution.actionDiagonalSucc_inv_apply /-
theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f : Fin n → G) :
(actionDiagonalSucc G n).inv.hom (g, f) = (g • Fin.partialProd f : Fin (n + 1) → G) :=
by
@@ -140,6 +145,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
· intro i
simpa only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', mul_assoc]
#align group_cohomology.resolution.Action_diagonal_succ_inv_apply GroupCohomology.Resolution.actionDiagonalSucc_inv_apply
+-/
end Action
@@ -148,6 +154,7 @@ section Rep
open Rep
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print GroupCohomology.Resolution.diagonalSucc /-
/-- An isomorphism of `k`-linear representations of `G` from `k[Gⁿ⁺¹]` to `k[G] ⊗ₖ k[Gⁿ]` (on
which `G` acts by `ρ(g₁)(g₂ ⊗ x) = (g₁ * g₂) ⊗ x`) sending `(g₀, ..., gₙ)` to
`g₀ ⊗ (g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ)`. The inverse sends `g₀ ⊗ (g₁, ..., gₙ)` to
@@ -158,9 +165,11 @@ def diagonalSucc (n : ℕ) :
(asIso ((linearization k G).μ (Action.leftRegular G) _)).symm ≪≫
tensorIso (Iso.refl _) (linearizationTrivialIso k G (Fin n → G))
#align group_cohomology.resolution.diagonal_succ GroupCohomology.Resolution.diagonalSucc
+-/
variable {k G n}
+#print GroupCohomology.Resolution.diagonalSucc_hom_single /-
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
single (f 0) 1 ⊗ₜ single (fun i => (f i.cast_succ)⁻¹ * f i.succ) a :=
@@ -173,7 +182,9 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
LinearEquiv.trans_symm, lcongr_symm, LinearEquiv.trans_apply, lcongr_single,
TensorProduct.lid_symm_apply, finsuppTensorFinsupp_symm_single, LinearEquiv.coe_toLinearMap]
#align group_cohomology.resolution.diagonal_succ_hom_single GroupCohomology.Resolution.diagonalSucc_hom_single
+-/
+#print GroupCohomology.Resolution.diagonalSucc_inv_single_single /-
theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g a ⊗ₜ Finsupp.single f b) =
single (g • partialProd f) (a * b) :=
@@ -187,7 +198,9 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
finsuppTensorFinsupp'_single_tmul_single k (Action.leftRegular G).V,
linearization_map_hom_single (Action_diagonal_succ G n).inv (g, f) (a * b)]
#align group_cohomology.resolution.diagonal_succ_inv_single_single GroupCohomology.Resolution.diagonalSucc_inv_single_single
+-/
+#print GroupCohomology.Resolution.diagonalSucc_inv_single_left /-
theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g r ⊗ₜ f) =
Finsupp.lift (Gⁿ⁺¹ →₀ k) k Gⁿ (fun f => single (g • partialProd f) r) f :=
@@ -199,7 +212,9 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
diagonal_succ_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
MulZeroClass.zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
+-/
+#print GroupCohomology.Resolution.diagonalSucc_inv_single_right /-
theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
(diagonalSucc k G n).inv.hom (g ⊗ₜ Finsupp.single f r) =
Finsupp.lift _ k G (fun a => single (a • partialProd f) r) g :=
@@ -210,6 +225,7 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
simp only [lift_apply, smul_single', map_add, hx, diagonal_succ_inv_single_single,
TensorProduct.add_tmul, Finsupp.sum_single_index, MulZeroClass.zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
+-/
end Rep
@@ -219,6 +235,7 @@ open scoped TensorProduct
open Representation
+#print GroupCohomology.Resolution.ofMulActionBasisAux /-
/-- The `k[G]`-linear isomorphism `k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹]`, where the `k[G]`-module structure on
the lefthand side is `tensor_product.left_module`, whilst that of the righthand side comes from
`representation.as_module`. Allows us to use `basis.algebra_tensor_product` to get a `k[G]`-basis
@@ -238,7 +255,9 @@ def ofMulActionBasisAux :
rw [← of_mul_action_self_smul_eq_mul, smul_tprod_one_as_module]
· rw [smul_add, hz, hy, smul_add] }
#align group_cohomology.resolution.of_mul_action_basis_aux GroupCohomology.Resolution.ofMulActionBasisAux
+-/
+#print GroupCohomology.Resolution.ofMulActionBasis /-
/-- A `k[G]`-basis of `k[Gⁿ⁺¹]`, coming from the `k[G]`-linear isomorphism
`k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹].` -/
def ofMulActionBasis :
@@ -248,11 +267,14 @@ def ofMulActionBasis :
⟨LinearEquiv.refl k _⟩)
(ofMulActionBasisAux k G n)
#align group_cohomology.resolution.of_mul_action_basis GroupCohomology.Resolution.ofMulActionBasis
+-/
+#print GroupCohomology.Resolution.ofMulAction_free /-
theorem ofMulAction_free :
Module.Free (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
Module.Free.of_basis (ofMulActionBasis k G n)
#align group_cohomology.resolution.of_mul_action_free GroupCohomology.Resolution.ofMulAction_free
+-/
end Basis
@@ -264,6 +286,7 @@ variable (n) [Group G] (A : Rep k G)
open GroupCohomology.resolution
+#print Rep.diagonalHomEquiv /-
/-- Given a `k`-linear `G`-representation `A`, the set of representation morphisms
`Hom(k[Gⁿ⁺¹], A)` is `k`-linearly isomorphic to the set of functions `Gⁿ → A`. -/
noncomputable def diagonalHomEquiv :
@@ -274,9 +297,11 @@ noncomputable def diagonalHomEquiv :
(Rep.MonoidalClosed.linearHomEquivComm _ _ _ ≪≫ₗ Rep.leftRegularHomEquiv _) ≪≫ₗ
(Finsupp.llift A k k (Fin n → G)).symm
#align Rep.diagonal_hom_equiv Rep.diagonalHomEquiv
+-/
variable {n A}
+#print Rep.diagonalHomEquiv_apply /-
/-- Given a `k`-linear `G`-representation `A`, `diagonal_hom_equiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that this
sends a morphism of representations `f : k[Gⁿ⁺¹] ⟶ A` to the function
@@ -291,7 +316,9 @@ theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶
LinearMap.comp_apply, Representation.repOfTprodIso_inv_apply,
diagonal_succ_inv_single_single (1 : G) x, one_smul, one_mul]
#align Rep.diagonal_hom_equiv_apply Rep.diagonalHomEquiv_apply
+-/
+#print Rep.diagonalHomEquiv_symm_apply /-
/-- Given a `k`-linear `G`-representation `A`, `diagonal_hom_equiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that the
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
@@ -310,7 +337,9 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
Finsupp.lift_apply, ihom_obj_ρ_def, Rep.ihom_obj_ρ_apply, Finsupp.sum_single_index, zero_smul,
one_smul, Rep.of_ρ, Rep.Action_ρ_eq_ρ, Rep.trivial_def (x 0)⁻¹, Finsupp.llift_apply A k k]
#align Rep.diagonal_hom_equiv_symm_apply Rep.diagonalHomEquiv_symm_apply
+-/
+#print Rep.diagonalHomEquiv_symm_partialProd_succ /-
/-- Auxiliary lemma for defining group cohomology, used to show that the isomorphism
`diagonal_hom_equiv` commutes with the differentials in two complexes which compute
group cohomology. -/
@@ -326,11 +355,13 @@ theorem diagonalHomEquiv_symm_partialProd_succ (f : (Fin n → G) → A) (g : Fi
ext
rw [← Fin.partialProd_succ, Fin.inv_partialProd_mul_eq_contractNth]
#align Rep.diagonal_hom_equiv_symm_partial_prod_succ Rep.diagonalHomEquiv_symm_partialProd_succ
+-/
end Rep
variable (G)
+#print classifyingSpaceUniversalCover /-
/-- The simplicial `G`-set sending `[n]` to `Gⁿ⁺¹` equipped with the diagonal action of `G`. -/
def classifyingSpaceUniversalCover [Monoid G] : SimplicialObject (Action (Type u) <| MonCat.of G)
where
@@ -341,6 +372,7 @@ def classifyingSpaceUniversalCover [Monoid G] : SimplicialObject (Action (Type u
map_id' n := rfl
map_comp' i j k f g := rfl
#align classifying_space_universal_cover classifyingSpaceUniversalCover
+-/
namespace classifyingSpaceUniversalCover
@@ -348,6 +380,7 @@ open CategoryTheory CategoryTheory.Limits
variable [Monoid G]
+#print classifyingSpaceUniversalCover.cechNerveTerminalFromIso /-
/-- When the category is `G`-Set, `cech_nerve_terminal_from` of `G` with the left regular action is
isomorphic to `EG`, the universal cover of the classifying space of `G` as a simplicial `G`-set. -/
def cechNerveTerminalFromIso :
@@ -360,7 +393,9 @@ def cechNerveTerminalFromIso :
rw [category.assoc, limit.iso_limit_cone_hom_π, limit.lift_π, category.assoc]
exact (limit.iso_limit_cone_hom_π _ _).symm
#align classifying_space_universal_cover.cech_nerve_terminal_from_iso classifyingSpaceUniversalCover.cechNerveTerminalFromIso
+-/
+#print classifyingSpaceUniversalCover.cechNerveTerminalFromIsoCompForget /-
/-- As a simplicial set, `cech_nerve_terminal_from` of a monoid `G` is isomorphic to the universal
cover of the classifying space of `G` as a simplicial set. -/
def cechNerveTerminalFromIsoCompForget :
@@ -368,18 +403,22 @@ def cechNerveTerminalFromIsoCompForget :
NatIso.ofComponents (fun n => Types.productIso _) fun m n f =>
Matrix.ext fun i j => Types.Limit.lift_π_apply _ _ _ _
#align classifying_space_universal_cover.cech_nerve_terminal_from_iso_comp_forget classifyingSpaceUniversalCover.cechNerveTerminalFromIsoCompForget
+-/
variable (k G)
open AlgebraicTopology SimplicialObject.Augmented SimplicialObject CategoryTheory.Arrow
+#print classifyingSpaceUniversalCover.compForgetAugmented /-
/-- The universal cover of the classifying space of `G` as a simplicial set, augmented by the map
from `fin 1 → G` to the terminal object in `Type u`. -/
def compForgetAugmented : SimplicialObject.Augmented (Type u) :=
SimplicialObject.augment (classifyingSpaceUniversalCover G ⋙ forget _) (terminal _)
(terminal.from _) fun i g h => Subsingleton.elim _ _
#align classifying_space_universal_cover.comp_forget_augmented classifyingSpaceUniversalCover.compForgetAugmented
+-/
+#print classifyingSpaceUniversalCover.extraDegeneracyAugmentedCechNerve /-
/-- The augmented Čech nerve of the map from `fin 1 → G` to the terminal object in `Type u` has an
extra degeneracy. -/
def extraDegeneracyAugmentedCechNerve :
@@ -388,7 +427,9 @@ def extraDegeneracyAugmentedCechNerve :
⟨fun x => (1 : G),
@Subsingleton.elim _ (@Unique.subsingleton _ (Limits.uniqueToTerminal _)) _ _⟩
#align classifying_space_universal_cover.extra_degeneracy_augmented_cech_nerve classifyingSpaceUniversalCover.extraDegeneracyAugmentedCechNerve
+-/
+#print classifyingSpaceUniversalCover.extraDegeneracyCompForgetAugmented /-
/-- The universal cover of the classifying space of `G` as a simplicial set, augmented by the map
from `fin 1 → G` to the terminal object in `Type u`, has an extra degeneracy. -/
def extraDegeneracyCompForgetAugmented : ExtraDegeneracy (compForgetAugmented G) :=
@@ -400,14 +441,18 @@ def extraDegeneracyCompForgetAugmented : ExtraDegeneracy (compForgetAugmented G)
comma.iso_mk (cech_nerve_terminal_from.iso G ≪≫ cech_nerve_terminal_from_iso_comp_forget G)
(iso.refl _) (by ext : 2 <;> apply is_terminal.hom_ext terminal_is_terminal)
#align classifying_space_universal_cover.extra_degeneracy_comp_forget_augmented classifyingSpaceUniversalCover.extraDegeneracyCompForgetAugmented
+-/
+#print classifyingSpaceUniversalCover.compForgetAugmented.toModule /-
/-- The free functor `Type u ⥤ Module.{u} k` applied to the universal cover of the classifying
space of `G` as a simplicial set, augmented by the map from `fin 1 → G` to the terminal object
in `Type u`. -/
def compForgetAugmented.toModule : SimplicialObject.Augmented (ModuleCat.{u} k) :=
((SimplicialObject.Augmented.whiskering _ _).obj (ModuleCat.free k)).obj (compForgetAugmented G)
#align classifying_space_universal_cover.comp_forget_augmented.to_Module classifyingSpaceUniversalCover.compForgetAugmented.toModule
+-/
+#print classifyingSpaceUniversalCover.extraDegeneracyCompForgetAugmentedToModule /-
/-- If we augment the universal cover of the classifying space of `G` as a simplicial set by the
map from `fin 1 → G` to the terminal object in `Type u`, then apply the free functor
`Type u ⥤ Module.{u} k`, the resulting augmented simplicial `k`-module has an extra degeneracy. -/
@@ -415,17 +460,20 @@ def extraDegeneracyCompForgetAugmentedToModule :
ExtraDegeneracy (compForgetAugmented.toModule k G) :=
ExtraDegeneracy.map (extraDegeneracyCompForgetAugmented G) (ModuleCat.free k)
#align classifying_space_universal_cover.extra_degeneracy_comp_forget_augmented_to_Module classifyingSpaceUniversalCover.extraDegeneracyCompForgetAugmentedToModule
+-/
end classifyingSpaceUniversalCover
variable (k)
+#print GroupCohomology.resolution /-
/-- The standard resolution of `k` as a trivial representation, defined as the alternating
face map complex of a simplicial `k`-linear `G`-representation. -/
def GroupCohomology.resolution [Monoid G] :=
(AlgebraicTopology.alternatingFaceMapComplex (Rep k G)).obj
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1)
#align group_cohomology.resolution GroupCohomology.resolution
+-/
namespace GroupCohomology.resolution
@@ -433,40 +481,49 @@ open classifyingSpaceUniversalCover AlgebraicTopology CategoryTheory CategoryThe
variable (k G) [Monoid G]
+#print GroupCohomology.Resolution.d /-
/-- The `k`-linear map underlying the differential in the standard resolution of `k` as a trivial
`k`-linear `G`-representation. It sends `(g₀, ..., gₙ) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ)`. -/
def d (G : Type u) (n : ℕ) : ((Fin (n + 1) → G) →₀ k) →ₗ[k] (Fin n → G) →₀ k :=
Finsupp.lift ((Fin n → G) →₀ k) k (Fin (n + 1) → G) fun g =>
(@Finset.univ (Fin (n + 1)) _).Sum fun p =>
Finsupp.single (g ∘ p.succAbove) ((-1 : k) ^ (p : ℕ))
-#align group_cohomology.resolution.d GroupCohomology.resolution.d
+#align group_cohomology.resolution.d GroupCohomology.Resolution.d
+-/
variable {k G}
+#print GroupCohomology.Resolution.d_of /-
@[simp]
theorem d_of {G : Type u} {n : ℕ} (c : Fin (n + 1) → G) :
d k G n (Finsupp.single c 1) =
Finset.univ.Sum fun p : Fin (n + 1) =>
Finsupp.single (c ∘ p.succAbove) ((-1 : k) ^ (p : ℕ)) :=
by simp [d]
-#align group_cohomology.resolution.d_of GroupCohomology.resolution.d_of
+#align group_cohomology.resolution.d_of GroupCohomology.Resolution.d_of
+-/
variable (k G)
+#print GroupCohomology.Resolution.xIso /-
/-- The `n`th object of the standard resolution of `k` is definitionally isomorphic to `k[Gⁿ⁺¹]`
equipped with the representation induced by the diagonal action of `G`. -/
def xIso (n : ℕ) : (GroupCohomology.resolution k G).pt n ≅ Rep.ofMulAction k G (Fin (n + 1) → G) :=
Iso.refl _
-#align group_cohomology.resolution.X_iso GroupCohomology.resolution.xIso
+#align group_cohomology.resolution.X_iso GroupCohomology.Resolution.xIso
+-/
+#print GroupCohomology.Resolution.x_projective /-
theorem x_projective (G : Type u) [Group G] (n : ℕ) :
Projective ((GroupCohomology.resolution k G).pt n) :=
Rep.equivalenceModuleMonoidAlgebra.toAdjunction.projective_of_map_projective _ <|
@ModuleCat.projective_of_free.{u} _ _
(ModuleCat.of (MonoidAlgebra k G) (Representation.ofMulAction k G (Fin (n + 1) → G)).asModule)
_ (ofMulActionBasis k G n)
-#align group_cohomology.resolution.X_projective GroupCohomology.resolution.x_projective
+#align group_cohomology.resolution.X_projective GroupCohomology.Resolution.x_projective
+-/
+#print GroupCohomology.Resolution.d_eq /-
/-- Simpler expression for the differential in the standard resolution of `k` as a
`G`-representation. It sends `(g₀, ..., gₙ₊₁) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ₊₁)`. -/
theorem d_eq (n : ℕ) : ((GroupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) :=
@@ -474,16 +531,20 @@ theorem d_eq (n : ℕ) : ((GroupCohomology.resolution k G).d (n + 1) n).hom = d
ext x y
dsimp [GroupCohomology.resolution]
simpa [← @intCast_smul k, simplicial_object.δ]
-#align group_cohomology.resolution.d_eq GroupCohomology.resolution.d_eq
+#align group_cohomology.resolution.d_eq GroupCohomology.Resolution.d_eq
+-/
section Exactness
+#print GroupCohomology.Resolution.forget₂ToModuleCat /-
/-- The standard resolution of `k` as a trivial representation as a complex of `k`-modules. -/
-def forget₂ToModule :=
+def forget₂ToModuleCat :=
((forget₂ (Rep k G) (ModuleCat.{u} k)).mapHomologicalComplex _).obj
(GroupCohomology.resolution k G)
-#align group_cohomology.resolution.forget₂_to_Module GroupCohomology.resolution.forget₂ToModule
+#align group_cohomology.resolution.forget₂_to_Module GroupCohomology.Resolution.forget₂ToModuleCat
+-/
+#print GroupCohomology.Resolution.compForgetAugmentedIso /-
/-- If we apply the free functor `Type u ⥤ Module.{u} k` to the universal cover of the classifying
space of `G` as a simplicial set, then take the alternating face map complex, the result is
isomorphic to the standard resolution of the trivial `G`-representation `k` as a complex of
@@ -491,16 +552,18 @@ isomorphic to the standard resolution of the trivial `G`-representation `k` as a
def compForgetAugmentedIso :
AlternatingFaceMapComplex.obj
(SimplicialObject.Augmented.drop.obj (compForgetAugmented.toModule k G)) ≅
- GroupCohomology.resolution.forget₂ToModule k G :=
+ GroupCohomology.Resolution.forget₂ToModuleCat k G :=
eqToIso
(Functor.congr_obj (map_alternatingFaceMapComplex (forget₂ (Rep k G) (ModuleCat.{u} k))).symm
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1))
-#align group_cohomology.resolution.comp_forget_augmented_iso GroupCohomology.resolution.compForgetAugmentedIso
+#align group_cohomology.resolution.comp_forget_augmented_iso GroupCohomology.Resolution.compForgetAugmentedIso
+-/
+#print GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv /-
/-- As a complex of `k`-modules, the standard resolution of the trivial `G`-representation `k` is
homotopy equivalent to the complex which is `k` at 0 and 0 elsewhere. -/
-def forget₂ToModuleHomotopyEquiv :
- HomotopyEquiv (GroupCohomology.resolution.forget₂ToModule k G)
+def forget₂ToModuleCatHomotopyEquiv :
+ HomotopyEquiv (GroupCohomology.Resolution.forget₂ToModuleCat k G)
((ChainComplex.single₀ (ModuleCat k)).obj ((forget₂ (Rep k G) _).obj <| Rep.trivial k G k)) :=
(HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).trans <|
(SimplicialObject.Augmented.ExtraDegeneracy.homotopyEquiv
@@ -509,8 +572,10 @@ def forget₂ToModuleHomotopyEquiv :
(ChainComplex.single₀ (ModuleCat.{u} k)).mapIso
(@Finsupp.LinearEquiv.finsuppUnique k k _ _ _ (⊤_ Type u)
Types.terminalIso.toEquiv.unique).toModuleIso)
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv GroupCohomology.resolution.forget₂ToModuleHomotopyEquiv
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv
+-/
+#print GroupCohomology.Resolution.ε /-
/-- The hom of `k`-linear `G`-representations `k[G¹] → k` sending `∑ nᵢgᵢ ↦ ∑ nᵢ`. -/
def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k
where
@@ -521,13 +586,15 @@ def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k
Finsupp.total (Fin 1 → G) k k (fun f => (1 : k)) (Finsupp.mapDomain _ (Finsupp.single _ _)) =
Finsupp.total _ _ _ _ (Finsupp.single _ _)
simp only [Finsupp.mapDomain_single, Finsupp.total_single]
-#align group_cohomology.resolution.ε GroupCohomology.resolution.ε
+#align group_cohomology.resolution.ε GroupCohomology.Resolution.ε
+-/
+#print GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq /-
/-- The homotopy equivalence of complexes of `k`-modules between the standard resolution of `k` as
a trivial `G`-representation, and the complex which is `k` at 0 and 0 everywhere else, acts as
`∑ nᵢgᵢ ↦ ∑ nᵢ : k[G¹] → k` at 0. -/
-theorem forget₂ToModuleHomotopyEquiv_f_0_eq :
- (forget₂ToModuleHomotopyEquiv k G).1.f 0 = (forget₂ (Rep k G) _).map (ε k G) :=
+theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
+ (forget₂ToModuleCatHomotopyEquiv k G).1.f 0 = (forget₂ (Rep k G) _).map (ε k G) :=
by
show (HomotopyEquiv.hom _ ≫ HomotopyEquiv.hom _ ≫ HomotopyEquiv.hom _).f 0 = _
simp only [HomologicalComplex.comp_f]
@@ -549,8 +616,10 @@ theorem forget₂ToModuleHomotopyEquiv_f_0_eq :
rw [Finsupp.total_single, one_smul, @Unique.eq_default _ types.terminal_iso.to_equiv.unique a,
Finsupp.single_eq_same]
· exact @Subsingleton.elim _ (@Unique.subsingleton _ (limits.unique_to_terminal _)) _ _
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq GroupCohomology.resolution.forget₂ToModuleHomotopyEquiv_f_0_eq
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
+-/
+#print GroupCohomology.Resolution.d_comp_ε /-
theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 :=
by
ext1
@@ -560,26 +629,32 @@ theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 :=
(forget₂_to_Module_homotopy_equiv k G).1.2 1 0 rfl] <;>
exact comp_zero
exact LinearMap.ext_iff.1 this _
-#align group_cohomology.resolution.d_comp_ε GroupCohomology.resolution.d_comp_ε
+#align group_cohomology.resolution.d_comp_ε GroupCohomology.Resolution.d_comp_ε
+-/
+#print GroupCohomology.Resolution.εToSingle₀ /-
/-- The chain map from the standard resolution of `k` to `k[0]` given by `∑ nᵢgᵢ ↦ ∑ nᵢ` in
degree zero. -/
def εToSingle₀ :
GroupCohomology.resolution k G ⟶ (ChainComplex.single₀ _).obj (Rep.trivial k G k) :=
((GroupCohomology.resolution k G).toSingle₀Equiv _).symm ⟨ε k G, d_comp_ε k G⟩
-#align group_cohomology.resolution.ε_to_single₀ GroupCohomology.resolution.εToSingle₀
+#align group_cohomology.resolution.ε_to_single₀ GroupCohomology.Resolution.εToSingle₀
+-/
+#print GroupCohomology.Resolution.εToSingle₀_comp_eq /-
theorem εToSingle₀_comp_eq :
((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G) ≫
(ChainComplex.single₀MapHomologicalComplex _).hom.app _ =
- (forget₂ToModuleHomotopyEquiv k G).hom :=
+ (forget₂ToModuleCatHomotopyEquiv k G).hom :=
by
refine' ChainComplex.to_single₀_ext _ _ _
dsimp
rw [category.comp_id]
exact (forget₂_to_Module_homotopy_equiv_f_0_eq k G).symm
-#align group_cohomology.resolution.ε_to_single₀_comp_eq GroupCohomology.resolution.εToSingle₀_comp_eq
+#align group_cohomology.resolution.ε_to_single₀_comp_eq GroupCohomology.Resolution.εToSingle₀_comp_eq
+-/
+#print GroupCohomology.Resolution.quasiIsoOfForget₂εToSingle₀ /-
theorem quasiIsoOfForget₂εToSingle₀ :
QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
@@ -587,7 +662,8 @@ theorem quasiIsoOfForget₂εToSingle₀ :
rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.Resolution.quasiIsoOfForget₂εToSingle₀
+-/
instance : QuasiIso (εToSingle₀ k G) :=
(forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIsoOfForget₂εToSingle₀ k G)
@@ -600,15 +676,18 @@ open GroupCohomology.resolution
variable [Group G]
+#print GroupCohomology.projectiveResolution /-
/-- The standard projective resolution of `k` as a trivial `k`-linear `G`-representation. -/
def GroupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
(εToSingle₀ k G).toSingle₀ProjectiveResolution (x_projective k G)
#align group_cohomology.ProjectiveResolution GroupCohomology.projectiveResolution
+-/
instance : EnoughProjectives (Rep k G) :=
Rep.equivalenceModuleMonoidAlgebra.enoughProjectives_iff.2
ModuleCat.moduleCat_enoughProjectives.{u}
+#print GroupCohomology.extIso /-
/-- Given a `k`-linear `G`-representation `V`, `Extⁿ(k, V)` (where `k` is a trivial `k`-linear
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
standard resolution of `k` called `group_cohomology.resolution k G`. -/
@@ -623,4 +702,5 @@ def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
(GroupCohomology.projectiveResolution k G)).unop.symm <;>
exact this
#align group_cohomology.Ext_iso GroupCohomology.extIso
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -471,7 +471,7 @@ theorem x_projective (G : Type u) [Group G] (n : ℕ) :
`G`-representation. It sends `(g₀, ..., gₙ₊₁) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ₊₁)`. -/
theorem d_eq (n : ℕ) : ((GroupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) :=
by
- ext (x y)
+ ext x y
dsimp [GroupCohomology.resolution]
simpa [← @intCast_smul k, simplicial_object.δ]
#align group_cohomology.resolution.d_eq GroupCohomology.resolution.d_eq
mathlib commit https://github.com/leanprover-community/mathlib/commit/8efcf8022aac8e01df8d302dcebdbc25d6a886c8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
-! leanprover-community/mathlib commit cc5dd6244981976cc9da7afc4eee5682b037a013
+! leanprover-community/mathlib commit cec81510e48e579bde6acd8568c06a87af045b63
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -307,9 +307,8 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
category.comp_id, Rep.MonoidalClosed.linearHomEquivComm_symm_hom, iso.trans_hom,
ModuleCat.comp_def, LinearMap.comp_apply, Representation.repOfTprodIso_apply,
diagonal_succ_hom_single x (1 : k), TensorProduct.uncurry_apply, Rep.leftRegularHom_hom,
- Finsupp.lift_apply, Rep.ihom_obj_ρ, Representation.linHom_apply, Finsupp.sum_single_index,
- zero_smul, one_smul, Rep.of_ρ, Rep.Action_ρ_eq_ρ, Rep.trivial_def (x 0)⁻¹,
- Finsupp.llift_apply A k k]
+ Finsupp.lift_apply, ihom_obj_ρ_def, Rep.ihom_obj_ρ_apply, Finsupp.sum_single_index, zero_smul,
+ one_smul, Rep.of_ρ, Rep.Action_ρ_eq_ρ, Rep.trivial_def (x 0)⁻¹, Finsupp.llift_apply A k k]
#align Rep.diagonal_hom_equiv_symm_apply Rep.diagonalHomEquiv_symm_apply
/-- Auxiliary lemma for defining group cohomology, used to show that the isomorphism
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -70,10 +70,8 @@ variable {k G : Type u} [CommRing k] {n : ℕ}
open CategoryTheory
--- mathport name: «exprGⁿ»
local notation "Gⁿ" => Fin n → G
--- mathport name: «exprGⁿ⁺¹»
local notation "Gⁿ⁺¹" => Fin (n + 1) → G
namespace GroupCohomology.resolution
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -621,7 +621,7 @@ def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
(GroupCohomology.resolution k G)).homology
n).unop :=
by
- let this :=
+ let this.1 :=
(((linear_yoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
(GroupCohomology.projectiveResolution k G)).unop.symm <;>
exact this
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -587,7 +587,7 @@ theorem quasiIsoOfForget₂εToSingle₀ :
QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
have h : QuasiIso (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso _
- rw [← ε_to_single₀_comp_eq k G] at h
+ rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -616,7 +616,7 @@ instance : EnoughProjectives (Rep k G) :=
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
standard resolution of `k` called `group_cohomology.resolution k G`. -/
def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
- ((ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
+ ((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
(GroupCohomology.resolution k G)).homology
n).unop :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -217,7 +217,7 @@ end Rep
variable (k G n)
-open TensorProduct
+open scoped TensorProduct
open Representation
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -183,7 +183,7 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
dsimp only [diagonal_succ]
simp only [iso.trans_inv, iso.symm_inv, iso.refl_inv, tensor_iso_inv, Action.tensorHom,
Action.comp_hom, ModuleCat.comp_def, LinearMap.comp_apply, as_iso_hom, functor.map_iso_inv,
- ModuleCat.monoidalCategory.hom_apply, linearization_trivial_iso_inv_hom_apply,
+ ModuleCat.MonoidalCategory.hom_apply, linearization_trivial_iso_inv_hom_apply,
linearization_μ_hom, Action.id_hom ((linearization k G).obj _), Action_diagonal_succ_inv_apply,
ModuleCat.id_apply, LinearEquiv.coe_toLinearMap,
finsuppTensorFinsupp'_single_tmul_single k (Action.leftRegular G).V,
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -227,7 +227,7 @@ the lefthand side is `tensor_product.left_module`, whilst that of the righthand
of the righthand side. -/
def ofMulActionBasisAux :
MonoidAlgebra k G ⊗[k] ((Fin n → G) →₀ k) ≃ₗ[MonoidAlgebra k G]
- (ofMulAction k G (Fin (n + 1) → G)).AsModule :=
+ (ofMulAction k G (Fin (n + 1) → G)).asModule :=
{ (Rep.equivalenceModuleMonoidAlgebra.1.mapIso (diagonalSucc k G n).symm).toLinearEquiv with
map_smul' := fun r x =>
by
@@ -244,7 +244,7 @@ def ofMulActionBasisAux :
/-- A `k[G]`-basis of `k[Gⁿ⁺¹]`, coming from the `k[G]`-linear isomorphism
`k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹].` -/
def ofMulActionBasis :
- Basis (Fin n → G) (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).AsModule :=
+ Basis (Fin n → G) (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
@Basis.map _ (MonoidAlgebra k G) (MonoidAlgebra k G ⊗[k] ((Fin n → G) →₀ k)) _ _ _ _ _ _
(@Algebra.TensorProduct.basis k _ (MonoidAlgebra k G) _ _ ((Fin n → G) →₀ k) _ _ (Fin n → G)
⟨LinearEquiv.refl k _⟩)
@@ -252,7 +252,7 @@ def ofMulActionBasis :
#align group_cohomology.resolution.of_mul_action_basis GroupCohomology.Resolution.ofMulActionBasis
theorem ofMulAction_free :
- Module.Free (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).AsModule :=
+ Module.Free (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
Module.Free.of_basis (ofMulActionBasis k G n)
#align group_cohomology.resolution.of_mul_action_free GroupCohomology.Resolution.ofMulAction_free
@@ -466,7 +466,7 @@ theorem x_projective (G : Type u) [Group G] (n : ℕ) :
Projective ((GroupCohomology.resolution k G).pt n) :=
Rep.equivalenceModuleMonoidAlgebra.toAdjunction.projective_of_map_projective _ <|
@ModuleCat.projective_of_free.{u} _ _
- (ModuleCat.of (MonoidAlgebra k G) (Representation.ofMulAction k G (Fin (n + 1) → G)).AsModule)
+ (ModuleCat.of (MonoidAlgebra k G) (Representation.ofMulAction k G (Fin (n + 1) → G)).asModule)
_ (ofMulActionBasis k G n)
#align group_cohomology.resolution.X_projective GroupCohomology.resolution.x_projective
mathlib commit https://github.com/leanprover-community/mathlib/commit/f8c79b0a623404854a2902b836eac32156fd7712
@@ -583,17 +583,17 @@ theorem εToSingle₀_comp_eq :
exact (forget₂_to_Module_homotopy_equiv_f_0_eq k G).symm
#align group_cohomology.resolution.ε_to_single₀_comp_eq GroupCohomology.resolution.εToSingle₀_comp_eq
-theorem quasiIso_of_forget₂_εToSingle₀ :
+theorem quasiIsoOfForget₂εToSingle₀ :
QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) :=
by
- have h : QuasiIso (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.to_quasiIso _
+ have h : QuasiIso (forget₂_to_Module_homotopy_equiv k G).hom := HomotopyEquiv.toQuasiIso _
rw [← ε_to_single₀_comp_eq k G] at h
haveI := h
exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.resolution.quasiIso_of_forget₂_εToSingle₀
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
instance : QuasiIso (εToSingle₀ k G) :=
- (forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIso_of_forget₂_εToSingle₀ k G)
+ (forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIsoOfForget₂εToSingle₀ k G)
end Exactness
mathlib commit https://github.com/leanprover-community/mathlib/commit/cc5dd6244981976cc9da7afc4eee5682b037a013
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
-! leanprover-community/mathlib commit ef997baa41b5c428be3fb50089a7139bf4ee886b
+! leanprover-community/mathlib commit cc5dd6244981976cc9da7afc4eee5682b037a013
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -108,7 +108,7 @@ def actionDiagonalSucc (G : Type u) [Group G] :
#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
- (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f i)⁻¹ * f i.succ) :=
+ (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f i.cast_succ)⁻¹ * f i.succ) :=
by
induction' n with n hn
· exact Prod.ext rfl (funext fun x => Fin.elim0 x)
@@ -118,8 +118,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
simp only [iso.trans_hom, comp_hom, types_comp_apply, diagonal_succ_hom_hom,
left_regular_tensor_iso_hom_hom, tensor_iso_hom, mk_iso_hom_hom, Equiv.toIso_hom,
tensor_hom, Equiv.piFinSuccAboveEquiv_symm_apply, tensor_apply, types_id_apply, tensor_rho,
- MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.coe_eq_castSucc,
- Fin.insertNth_zero']
+ MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ, Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
· simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ]
#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
@@ -166,7 +165,7 @@ variable {k G n}
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
- single (f 0) 1 ⊗ₜ single (fun i => (f i)⁻¹ * f i.succ) a :=
+ single (f 0) 1 ⊗ₜ single (fun i => (f i.cast_succ)⁻¹ * f i.succ) a :=
by
dsimp only [diagonal_succ]
simpa only [iso.trans_hom, iso.symm_hom, Action.comp_hom, ModuleCat.comp_def,
@@ -302,7 +301,7 @@ inverse map sends a function `f : Gⁿ → A` to the representation morphism sen
to `A`. -/
theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1) → G) :
((diagonalHomEquiv n A).symm f).hom (Finsupp.single x 1) =
- A.ρ (x 0) (f fun i : Fin n => (x ↑i)⁻¹ * x i.succ) :=
+ A.ρ (x 0) (f fun i : Fin n => (x i.cast_succ)⁻¹ * x i.succ) :=
by
unfold diagonal_hom_equiv
simp only [LinearEquiv.trans_symm, LinearEquiv.symm_symm, LinearEquiv.trans_apply,
@@ -324,8 +323,8 @@ theorem diagonalHomEquiv_symm_partialProd_succ (f : (Fin n → G) → A) (g : Fi
f (Fin.contractNth a (· * ·) g) :=
by
simp only [diagonal_hom_equiv_symm_apply, Function.comp_apply, Fin.succ_succAbove_zero,
- Fin.partialProd_zero, map_one, Fin.coe_eq_castSucc, Fin.succ_succAbove_succ,
- LinearMap.one_apply, Fin.partialProd_succ]
+ Fin.partialProd_zero, map_one, Fin.succ_succAbove_succ, LinearMap.one_apply,
+ Fin.partialProd_succ]
congr
ext
rw [← Fin.partialProd_succ, Fin.inv_partialProd_mul_eq_contractNth]
mathlib commit https://github.com/leanprover-community/mathlib/commit/92c69b77c5a7dc0f7eeddb552508633305157caa
@@ -3,8 +3,8 @@ Copyright (c) 2022 Amelia Livingston. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
-! This file was ported from Lean 3 source module representation_theory.group_cohomology_resolution
-! leanprover-community/mathlib commit c04bc6e93e23aa0182aba53661a2211e80b6feac
+! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
+! leanprover-community/mathlib commit ef997baa41b5c428be3fb50089a7139bf4ee886b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -263,13 +263,13 @@ end GroupCohomology.resolution
namespace Rep
-variable (n) [Group G]
+variable (n) [Group G] (A : Rep k G)
open GroupCohomology.resolution
/-- Given a `k`-linear `G`-representation `A`, the set of representation morphisms
`Hom(k[Gⁿ⁺¹], A)` is `k`-linearly isomorphic to the set of functions `Gⁿ → A`. -/
-noncomputable def diagonalHomEquiv (A : Rep k G) :
+noncomputable def diagonalHomEquiv :
(Rep.ofMulAction k G (Fin (n + 1) → G) ⟶ A) ≃ₗ[k] (Fin n → G) → A :=
Linear.homCongr k
((diagonalSucc k G n).trans ((Representation.ofMulAction k G G).repOfTprodIso 1))
@@ -278,14 +278,14 @@ noncomputable def diagonalHomEquiv (A : Rep k G) :
(Finsupp.llift A k k (Fin n → G)).symm
#align Rep.diagonal_hom_equiv Rep.diagonalHomEquiv
-variable {n}
+variable {n A}
/-- Given a `k`-linear `G`-representation `A`, `diagonal_hom_equiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that this
sends a morphism of representations `f : k[Gⁿ⁺¹] ⟶ A` to the function
`(g₁, ..., gₙ) ↦ f(1, g₁, g₁g₂, ..., g₁g₂...gₙ).` -/
-theorem diagonalHomEquiv_apply {A : Rep k G} (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶ A)
- (x : Fin n → G) : diagonalHomEquiv n A f x = f.hom (Finsupp.single (Fin.partialProd x) 1) :=
+theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶ A) (x : Fin n → G) :
+ diagonalHomEquiv n A f x = f.hom (Finsupp.single (Fin.partialProd x) 1) :=
by
unfold diagonal_hom_equiv
simpa only [LinearEquiv.trans_apply, Rep.leftRegularHomEquiv_apply,
@@ -300,7 +300,7 @@ the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`.
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
`(g₀, ... gₙ) ↦ ρ(g₀)(f(g₀⁻¹g₁, g₁⁻¹g₂, ..., gₙ₋₁⁻¹gₙ))`, where `ρ` is the representation attached
to `A`. -/
-theorem diagonalHomEquiv_symm_apply {A : Rep k G} (f : (Fin n → G) → A) (x : Fin (n + 1) → G) :
+theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1) → G) :
((diagonalHomEquiv n A).symm f).hom (Finsupp.single x 1) =
A.ρ (x 0) (f fun i : Fin n => (x ↑i)⁻¹ * x i.succ) :=
by
@@ -315,6 +315,22 @@ theorem diagonalHomEquiv_symm_apply {A : Rep k G} (f : (Fin n → G) → A) (x :
Finsupp.llift_apply A k k]
#align Rep.diagonal_hom_equiv_symm_apply Rep.diagonalHomEquiv_symm_apply
+/-- Auxiliary lemma for defining group cohomology, used to show that the isomorphism
+`diagonal_hom_equiv` commutes with the differentials in two complexes which compute
+group cohomology. -/
+theorem diagonalHomEquiv_symm_partialProd_succ (f : (Fin n → G) → A) (g : Fin (n + 1) → G)
+ (a : Fin (n + 1)) :
+ ((diagonalHomEquiv n A).symm f).hom (Finsupp.single (Fin.partialProd g ∘ a.succ.succAbove) 1) =
+ f (Fin.contractNth a (· * ·) g) :=
+ by
+ simp only [diagonal_hom_equiv_symm_apply, Function.comp_apply, Fin.succ_succAbove_zero,
+ Fin.partialProd_zero, map_one, Fin.coe_eq_castSucc, Fin.succ_succAbove_succ,
+ LinearMap.one_apply, Fin.partialProd_succ]
+ congr
+ ext
+ rw [← Fin.partialProd_succ, Fin.inv_partialProd_mul_eq_contractNth]
+#align Rep.diagonal_hom_equiv_symm_partial_prod_succ Rep.diagonalHomEquiv_symm_partialProd_succ
+
end Rep
variable (G)
@@ -380,14 +380,14 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
erw [diagonalSucc_hom_single]
erw [TensorProduct.uncurry_apply, Finsupp.lift_apply, Finsupp.sum_single_index]
- simp only [one_smul]
- erw [Representation.linHom_apply]
- simp only [LinearMap.comp_apply, MonoidHom.one_apply, LinearMap.one_apply]
- erw [Finsupp.llift_apply]
- rw [Finsupp.lift_apply]
- erw [Finsupp.sum_single_index]
- rw [one_smul]
- · rw [zero_smul]
+ · simp only [one_smul]
+ erw [Representation.linHom_apply]
+ simp only [LinearMap.comp_apply, MonoidHom.one_apply, LinearMap.one_apply]
+ erw [Finsupp.llift_apply]
+ rw [Finsupp.lift_apply]
+ erw [Finsupp.sum_single_index]
+ · rw [one_smul]
+ · rw [zero_smul]
· rw [zero_smul]
set_option linter.uppercaseLean3 false in
#align Rep.diagonal_hom_equiv_symm_apply Rep.diagonalHomEquiv_symm_apply
Basis.tensorProduct
to heterobasic version (#11844)
In order to achieve this, finsuppTensorFinsupp
and TensorProduct.directSum
are also heterobasic now.
@@ -211,7 +211,7 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
linearization_map_hom_single (actionDiagonalSucc G n).inv (g, f) (a * b)] -/
change mapDomain (actionDiagonalSucc G n).inv.hom
(lcongr (Equiv.refl (G × (Fin n → G))) (TensorProduct.lid k k)
- (finsuppTensorFinsupp k k k G (Fin n → G) (single g a ⊗ₜ[k] single f b)))
+ (finsuppTensorFinsupp k k k k G (Fin n → G) (single g a ⊗ₜ[k] single f b)))
= single (g • partialProd f) (a * b)
rw [finsuppTensorFinsupp_single, lcongr_single, mapDomain_single, Equiv.refl_apply,
actionDiagonalSucc_inv_apply]
@@ -110,7 +110,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
induction' n with n hn
· exact Prod.ext rfl (funext fun x => Fin.elim0 x)
· refine' Prod.ext rfl (funext fun x => _)
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
· dsimp only [actionDiagonalSucc]
simp only [Iso.trans_hom, comp_hom, types_comp_apply, diagonalSucc_hom_hom,
leftRegularTensorIso_hom_hom, tensorIso_hom, mkIso_hom_hom, Equiv.toIso_hom,
@@ -134,7 +134,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
simp only [Subsingleton.elim x 0, Pi.smul_apply, Fin.partialProd_zero, smul_eq_mul, mul_one]
rfl
· intro g
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
ext
dsimp only [actionDiagonalSucc]
simp only [Iso.trans_inv, comp_hom, hn, diagonalSucc_inv_hom, types_comp_apply, tensorIso_inv,
@@ -176,7 +176,7 @@ variable {k G n}
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
single (f 0) 1 ⊗ₜ single (fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) a := by
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
dsimp only [diagonalSucc]
simpa only [Iso.trans_hom, Iso.symm_hom, Action.comp_hom, ModuleCat.comp_def,
LinearMap.comp_apply, Functor.mapIso_hom,
@@ -200,7 +200,7 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g a ⊗ₜ Finsupp.single f b) =
single (g • partialProd f) (a * b) := by
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
dsimp only [diagonalSucc]
simp only [Iso.trans_inv, Iso.symm_inv, Iso.refl_inv, tensorIso_inv, Action.tensorHom,
Action.comp_hom, ModuleCat.comp_def, LinearMap.comp_apply, asIso_hom, Functor.mapIso_inv,
@@ -222,7 +222,7 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g r ⊗ₜ f) =
Finsupp.lift (Gⁿ⁺¹ →₀ k) k Gⁿ (fun f => single (g • partialProd f) r) f := by
refine f.induction ?_ ?_
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
· simp only [TensorProduct.tmul_zero, map_zero]
· intro a b x ha hb hx
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
@@ -244,7 +244,7 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
(diagonalSucc k G n).inv.hom (g ⊗ₜ Finsupp.single f r) =
Finsupp.lift _ k G (fun a => single (a • partialProd f) r) g := by
refine g.induction ?_ ?_
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
· simp only [TensorProduct.zero_tmul, map_zero]
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonalSucc_inv_single_single,
@@ -279,7 +279,7 @@ def ofMulActionBasisAux :
-- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
erw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
congr 1
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
refine' x.induction_on _ (fun x y => _) fun y z hy hz => _
· simp only [smul_zero]
· simp only [TensorProduct.smul_tmul']
@@ -340,7 +340,7 @@ sends a morphism of representations `f : k[Gⁿ⁺¹] ⟶ A` to the function
`(g₁, ..., gₙ) ↦ f(1, g₁, g₁g₂, ..., g₁g₂...gₙ).` -/
theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶ A) (x : Fin n → G) :
diagonalHomEquiv n A f x = f.hom (Finsupp.single (Fin.partialProd x) 1) := by
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
unfold diagonalHomEquiv
simpa only [LinearEquiv.trans_apply, Rep.leftRegularHomEquiv_apply,
MonoidalClosed.linearHomEquivComm_hom, Finsupp.llift_symm_apply, TensorProduct.curry_apply,
@@ -361,7 +361,7 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
((diagonalHomEquiv n A).symm f).hom (Finsupp.single x 1) =
A.ρ (x 0) (f fun i : Fin n => (x (Fin.castSucc i))⁻¹ * x i.succ) := by
unfold diagonalHomEquiv
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
simp only [LinearEquiv.trans_symm, LinearEquiv.symm_symm, LinearEquiv.trans_apply,
Rep.leftRegularHomEquiv_symm_apply, Linear.homCongr_symm_apply, Action.comp_hom, Iso.refl_inv,
Category.comp_id, Rep.MonoidalClosed.linearHomEquivComm_symm_hom, Iso.trans_hom,
@@ -555,7 +555,7 @@ set_option linter.uppercaseLean3 false in
theorem d_eq (n : ℕ) : ((groupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) := by
refine' Finsupp.lhom_ext' fun x => LinearMap.ext_ring _
dsimp [groupCohomology.resolution]
-/- Porting note: broken proof was
+/- Porting note (#11039): broken proof was
simpa [← @intCast_smul k, simplicial_object.δ] -/
simp_rw [alternatingFaceMapComplex_obj_d, AlternatingFaceMapComplex.objD, SimplicialObject.δ,
Functor.comp_map, ← intCast_smul (k := k) ((-1) ^ _ : ℤ), Int.cast_pow, Int.cast_neg,
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -221,7 +221,7 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g r ⊗ₜ f) =
Finsupp.lift (Gⁿ⁺¹ →₀ k) k Gⁿ (fun f => single (g • partialProd f) r) f := by
- refine' f.induction _ _
+ refine f.induction ?_ ?_
/- Porting note: broken proof was
· simp only [TensorProduct.tmul_zero, map_zero]
· intro a b x ha hb hx
@@ -243,7 +243,7 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
(diagonalSucc k G n).inv.hom (g ⊗ₜ Finsupp.single f r) =
Finsupp.lift _ k G (fun a => single (a • partialProd f) r) g := by
- refine' g.induction _ _
+ refine g.induction ?_ ?_
/- Porting note: broken proof was
· simp only [TensorProduct.zero_tmul, map_zero]
· intro a b x ha hb hx
With multiple changes, it is a good time to check if existing set_option maxHeartbeats
and set_option synthInstance.maxHeartbeats
remain necessary. This brings the number of files with such down from 23 to 9. Most are straight deletions though I did change one proof.
@@ -352,7 +352,6 @@ theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶
set_option linter.uppercaseLean3 false in
#align Rep.diagonal_hom_equiv_apply Rep.diagonalHomEquiv_apply
-set_option maxHeartbeats 400000 in
/-- Given a `k`-linear `G`-representation `A`, `diagonalHomEquiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that the
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
This is needed to work with leanprover/lean4#3087
@@ -627,7 +627,7 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
simp only [HomologicalComplex.comp_f]
dsimp
convert Category.id_comp (X := (forget₂ToModuleCat k G).X 0) _
- · dsimp only [HomotopyEquiv.ofIso, compForgetAugmentedIso, map_alternatingFaceMapComplex]
+ · dsimp only [HomotopyEquiv.ofIso, compForgetAugmentedIso]
simp only [Iso.symm_hom, eqToIso.inv, HomologicalComplex.eqToHom_f, eqToHom_refl]
trans (Finsupp.total _ _ _ fun _ => (1 : k)).comp ((ModuleCat.free k).map (terminal.from _))
· dsimp
piFinSuccAboveEquiv
with piFinSuccAbove
(#9030)
Replaces Equiv.piFinSuccAboveEquiv
with .piFinSuccAbove
, and same for MeasurableEquiv.piFinSuccAboveEquiv
@@ -101,7 +101,7 @@ def actionDiagonalSucc (G : Type u) [Group G] :
tensorIso (Iso.refl _) (actionDiagonalSucc G n) ≪≫
leftRegularTensorIso _ _ ≪≫
tensorIso (Iso.refl _)
- (mkIso (Equiv.piFinSuccAboveEquiv (fun _ => G) 0).symm.toIso fun _ => rfl)
+ (mkIso (Equiv.piFinSuccAbove (fun _ => G) 0).symm.toIso fun _ => rfl)
set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.Action_diagonal_succ groupCohomology.resolution.actionDiagonalSucc
@@ -114,7 +114,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
· dsimp only [actionDiagonalSucc]
simp only [Iso.trans_hom, comp_hom, types_comp_apply, diagonalSucc_hom_hom,
leftRegularTensorIso_hom_hom, tensorIso_hom, mkIso_hom_hom, Equiv.toIso_hom,
- Action.tensorHom, Equiv.piFinSuccAboveEquiv_symm_apply, tensor_apply, types_id_apply,
+ Action.tensorHom, Equiv.piFinSuccAbove_symm_apply, tensor_apply, types_id_apply,
tensor_rho, MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ,
Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
@@ -146,7 +146,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
simpa only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', mul_assoc] -/
funext x
dsimp [actionDiagonalSucc]
- erw [hn, Equiv.piFinSuccAboveEquiv_symm_apply]
+ erw [hn, Equiv.piFinSuccAbove_symm_apply]
refine' Fin.cases _ (fun i => _) x
· simp only [Fin.insertNth_zero, Fin.cons_zero, Fin.partialProd_zero, mul_one]
· simp only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', ← mul_assoc]
@@ -149,7 +149,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
erw [hn, Equiv.piFinSuccAboveEquiv_symm_apply]
refine' Fin.cases _ (fun i => _) x
· simp only [Fin.insertNth_zero, Fin.cons_zero, Fin.partialProd_zero, mul_one]
- · simp only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', ←mul_assoc]
+ · simp only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', ← mul_assoc]
rfl
set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.Action_diagonal_succ_inv_apply groupCohomology.resolution.actionDiagonalSucc_inv_apply
@@ -290,7 +290,7 @@ def ofMulActionBasisAux :
(Rep.trivial k G ((Fin n → G) →₀ k))).ρ r _
refine' x.induction_on _ (fun x y => _) fun y z hy hz => _
· rw [smul_zero, map_zero]
- · rw [TensorProduct.smul_tmul', smul_eq_mul, ←ofMulAction_self_smul_eq_mul]
+ · rw [TensorProduct.smul_tmul', smul_eq_mul, ← ofMulAction_self_smul_eq_mul]
exact (smul_tprod_one_asModule (Representation.ofMulAction k G G) r x y).symm
· rw [smul_add, hz, hy, map_add] }
#align group_cohomology.resolution.of_mul_action_basis_aux groupCohomology.resolution.ofMulActionBasisAux
@@ -655,7 +655,7 @@ theorem d_comp_ε : (groupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 := by
have : (forget₂ToModuleCat k G).d 1 0
≫ (forget₂ (Rep k G) (ModuleCat.{u} k)).map (ε k G) = 0 := by
rw [← forget₂ToModuleCatHomotopyEquiv_f_0_eq,
- ←(forget₂ToModuleCatHomotopyEquiv k G).1.2 1 0 rfl]
+ ← (forget₂ToModuleCatHomotopyEquiv k G).1.2 1 0 rfl]
exact comp_zero
exact LinearMap.ext_iff.1 this _
#align group_cohomology.resolution.d_comp_ε groupCohomology.resolution.d_comp_ε
This PR refactors the construction of left derived functors using the new homology API: this also affects the dependencies (Ext functors, group cohomology, local cohomology). As a result, the old homology API is no longer used in any significant way in mathlib. Then, with this PR, the homology refactor is essentially complete.
The organization of the files was made more coherent: the definition of a projective resolution is in Preadditive.ProjectiveResolution
, the existence of resolutions when there are enough projectives is shown in Abelian.ProjectiveResolution
, and the left derived functor is constructed in Abelian.LeftDerived
; the dual results are in Preadditive.InjectiveResolution
, Abelian.InjectiveResolution
and Abelian.RightDerived
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -542,7 +542,7 @@ def xIso (n : ℕ) : (groupCohomology.resolution k G).X n ≅ Rep.ofMulAction k
set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.X_iso groupCohomology.resolution.xIso
-theorem x_projective (G : Type u) [Group G] (n : ℕ) :
+instance x_projective (G : Type u) [Group G] (n : ℕ) :
Projective ((groupCohomology.resolution k G).X n) :=
Rep.equivalenceModuleMonoidAlgebra.toAdjunction.projective_of_map_projective _ <|
@ModuleCat.projective_of_free.{u} _ _
@@ -677,17 +677,16 @@ theorem εToSingle₀_comp_eq :
simpa using (forget₂ToModuleCatHomotopyEquiv_f_0_eq k G).symm
#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
-theorem quasiIso'OfForget₂εToSingle₀ :
- QuasiIso' (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) := by
- have h : QuasiIso' (forget₂ToModuleCatHomotopyEquiv k G).hom := HomotopyEquiv.toQuasiIso' _
+theorem quasiIso_forget₂_εToSingle₀ :
+ QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) := by
+ have h : QuasiIso (forget₂ToModuleCatHomotopyEquiv k G).hom := inferInstance
rw [← εToSingle₀_comp_eq k G] at h
- haveI := h
- exact quasiIso'_of_comp_right _
- ((HomologicalComplex.singleMapHomologicalComplex _ _ _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀
+ exact quasiIso_of_comp_right (hφφ' := h)
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso_forget₂_εToSingle₀
-instance : QuasiIso' (εToSingle₀ k G) :=
- (forget₂ _ (ModuleCat.{u} k)).quasiIso'_of_map_quasiIso' _ (quasiIso'OfForget₂εToSingle₀ k G)
+instance : QuasiIso (εToSingle₀ k G) := by
+ rw [← HomologicalComplex.quasiIso_map_iff_of_preservesHomology _ (forget₂ _ (ModuleCat.{u} k))]
+ apply quasiIso_forget₂_εToSingle₀
end Exactness
@@ -698,8 +697,8 @@ open groupCohomology.resolution HomologicalComplex.Hom
variable [Group G]
/-- The standard projective resolution of `k` as a trivial `k`-linear `G`-representation. -/
-def groupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
- toSingle₀ProjectiveResolution (εToSingle₀ k G) (x_projective k G)
+def groupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) where
+ π := εToSingle₀ k G
set_option linter.uppercaseLean3 false in
#align group_cohomology.ProjectiveResolution groupCohomology.projectiveResolution
@@ -712,9 +711,7 @@ instance : EnoughProjectives (Rep k G) :=
standard resolution of `k` called `groupCohomology.resolution k G`. -/
def groupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
- (((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
- (groupCohomology.resolution k G)).homology'
- n).unop := (((linearYoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
- (groupCohomology.projectiveResolution k G)).unop.symm
+ ((groupCohomology.resolution k G).linearYonedaObj k V).homology n :=
+ (groupCohomology.projectiveResolution k G).isoExt n V
set_option linter.uppercaseLean3 false in
#align group_cohomology.Ext_iso groupCohomology.extIso
Switch from the strong version of UnivLE ∀ α : Type max u v, Small.{v} α
to the weaker version ∀ α : Type u, Small.{v} α
.
Transfer Has/Preserves/Reflects(Co)limitsOfSize from a larger size (higher universe) to a smaller size.
In a few places it's now necessary to make the type explicit (for Lean to infer the Small
instance, I think).
Also prove a characterization of UnivLE and the totality of the UnivLE relation.
A pared down version of #7695.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -446,7 +446,7 @@ cover of the classifying space of `G` as a simplicial set. -/
def cechNerveTerminalFromIsoCompForget :
cechNerveTerminalFrom G ≅ classifyingSpaceUniversalCover G ⋙ forget _ :=
NatIso.ofComponents (fun _ => Types.productIso _) fun _ =>
- Matrix.ext fun _ _ => Types.Limit.lift_π_apply _ _ _ _
+ Matrix.ext fun _ _ => Types.Limit.lift_π_apply (Discrete.functor fun _ ↦ G) _ _ _
#align classifying_space_universal_cover.cech_nerve_terminal_from_iso_comp_forget classifyingSpaceUniversalCover.cechNerveTerminalFromIsoCompForget
variable (k)
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -640,7 +640,8 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
rfl
· congr
· ext x
- dsimp [HomotopyEquiv.ofIso, Finsupp.LinearEquiv.finsuppUnique]
+ dsimp (config := { unfoldPartialApp := true }) [HomotopyEquiv.ofIso,
+ Finsupp.LinearEquiv.finsuppUnique]
rw [Finsupp.total_single, one_smul, @Unique.eq_default _ Types.terminalIso.toEquiv.unique x,
ChainComplex.single₀_map_f_zero, LinearMap.coe_mk, AddHom.coe_mk, Function.comp_apply,
Finsupp.equivFunOnFinite_apply, Finsupp.single_eq_same]
This PR removes the special definitions of single₀
for chain and cochain complexes, so as to avoid duplication of code with HomologicalComplex.single
which is the functor constructing the complex that is supported by a single arbitrary degree. single₀
was supposed to have better definitional properties, but it turns out that in Lean4, it is no longer true (at least for the action of this functor on objects). The computation of the homology of these single complexes is generalized for HomologicalComplex.single
using the new homology API: this result is moved to a separate file Algebra.Homology.SingleHomology
.
@@ -642,7 +642,8 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
· ext x
dsimp [HomotopyEquiv.ofIso, Finsupp.LinearEquiv.finsuppUnique]
rw [Finsupp.total_single, one_smul, @Unique.eq_default _ Types.terminalIso.toEquiv.unique x,
- Finsupp.single_eq_same]
+ ChainComplex.single₀_map_f_zero, LinearMap.coe_mk, AddHom.coe_mk, Function.comp_apply,
+ Finsupp.equivFunOnFinite_apply, Finsupp.single_eq_same]
· exact @Subsingleton.elim _ (@Unique.instSubsingleton _ (Limits.uniqueToTerminal _)) _ _
set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
@@ -667,12 +668,12 @@ def εToSingle₀ :
theorem εToSingle₀_comp_eq :
((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G) ≫
- (ChainComplex.single₀MapHomologicalComplex _).hom.app _ =
+ (HomologicalComplex.singleMapHomologicalComplex _ _ _).hom.app _ =
(forget₂ToModuleCatHomotopyEquiv k G).hom := by
- refine' ChainComplex.to_single₀_ext _ _ _
dsimp
- rw [Category.comp_id]
- exact (forget₂ToModuleCatHomotopyEquiv_f_0_eq k G).symm
+ ext1
+ dsimp
+ simpa using (forget₂ToModuleCatHomotopyEquiv_f_0_eq k G).symm
#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
theorem quasiIso'OfForget₂εToSingle₀ :
@@ -680,7 +681,8 @@ theorem quasiIso'OfForget₂εToSingle₀ :
have h : QuasiIso' (forget₂ToModuleCatHomotopyEquiv k G).hom := HomotopyEquiv.toQuasiIso' _
rw [← εToSingle₀_comp_eq k G] at h
haveI := h
- exact quasiIso'_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
+ exact quasiIso'_of_comp_right _
+ ((HomologicalComplex.singleMapHomologicalComplex _ _ _).hom.app _)
#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀
instance : QuasiIso' (εToSingle₀ k G) :=
This PR renames definitions of the current homology API (adding a '
to homology
, cycles
, QuasiIso
) so as to create space for the development of the new homology API of homological complexes: this PR also contains the new definition of HomologicalComplex.homology
which involves the homology theory of short complexes.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -675,16 +675,16 @@ theorem εToSingle₀_comp_eq :
exact (forget₂ToModuleCatHomotopyEquiv_f_0_eq k G).symm
#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
-theorem quasiIsoOfForget₂εToSingle₀ :
- QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) := by
- have h : QuasiIso (forget₂ToModuleCatHomotopyEquiv k G).hom := HomotopyEquiv.toQuasiIso _
+theorem quasiIso'OfForget₂εToSingle₀ :
+ QuasiIso' (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) := by
+ have h : QuasiIso' (forget₂ToModuleCatHomotopyEquiv k G).hom := HomotopyEquiv.toQuasiIso' _
rw [← εToSingle₀_comp_eq k G] at h
haveI := h
- exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
+ exact quasiIso'_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIso'OfForget₂εToSingle₀
-instance : QuasiIso (εToSingle₀ k G) :=
- (forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIsoOfForget₂εToSingle₀ k G)
+instance : QuasiIso' (εToSingle₀ k G) :=
+ (forget₂ _ (ModuleCat.{u} k)).quasiIso'_of_map_quasiIso' _ (quasiIso'OfForget₂εToSingle₀ k G)
end Exactness
@@ -710,7 +710,7 @@ standard resolution of `k` called `groupCohomology.resolution k G`. -/
def groupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
- (groupCohomology.resolution k G)).homology
+ (groupCohomology.resolution k G)).homology'
n).unop := (((linearYoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
(groupCohomology.projectiveResolution k G)).unop.symm
set_option linter.uppercaseLean3 false in
@@ -33,17 +33,17 @@ We then use this isomorphism to deduce that as a complex of `k`-modules, the sta
of `k` as a trivial `G`-representation is homotopy equivalent to the complex with `k` at 0 and 0
elsewhere.
-Putting this material together allows us to define `GroupCohomology.projectiveResolution`, the
+Putting this material together allows us to define `groupCohomology.projectiveResolution`, the
standard projective resolution of `k` as a trivial `k`-linear `G`-representation.
## Main definitions
- * `GroupCohomology.Resolution.actionDiagonalSucc`
- * `GroupCohomology.Resolution.diagonalSucc`
- * `GroupCohomology.Resolution.ofMulActionBasis`
+ * `groupCohomology.resolution.actionDiagonalSucc`
+ * `groupCohomology.resolution.diagonalSucc`
+ * `groupCohomology.resolution.ofMulActionBasis`
* `classifyingSpaceUniversalCover`
- * `GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv`
- * `GroupCohomology.projectiveResolution`
+ * `groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv`
+ * `groupCohomology.projectiveResolution`
## Implementation notes
@@ -74,7 +74,7 @@ local notation "Gⁿ" => Fin n → G
set_option quotPrecheck false
local notation "Gⁿ⁺¹" => Fin (n + 1) → G
-namespace GroupCohomology.Resolution
+namespace groupCohomology.resolution
open Finsupp hiding lift
open MonoidalCategory
@@ -103,7 +103,7 @@ def actionDiagonalSucc (G : Type u) [Group G] :
tensorIso (Iso.refl _)
(mkIso (Equiv.piFinSuccAboveEquiv (fun _ => G) 0).symm.toIso fun _ => rfl)
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
+#align group_cohomology.resolution.Action_diagonal_succ groupCohomology.resolution.actionDiagonalSucc
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
(actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) := by
@@ -123,7 +123,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
erw [hn (fun (j : Fin (n + 1)) => f j.succ)]
exact Fin.cases rfl (fun i => rfl) x
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.Action_diagonal_succ_hom_apply GroupCohomology.Resolution.actionDiagonalSucc_hom_apply
+#align group_cohomology.resolution.Action_diagonal_succ_hom_apply groupCohomology.resolution.actionDiagonalSucc_hom_apply
theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f : Fin n → G) :
(actionDiagonalSucc G n).inv.hom (g, f) = (g • Fin.partialProd f : Fin (n + 1) → G) := by
@@ -152,7 +152,7 @@ theorem actionDiagonalSucc_inv_apply {G : Type u} [Group G] {n : ℕ} (g : G) (f
· simp only [Fin.cons_succ, Pi.smul_apply, smul_eq_mul, Fin.partialProd_succ', ←mul_assoc]
rfl
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.Action_diagonal_succ_inv_apply GroupCohomology.Resolution.actionDiagonalSucc_inv_apply
+#align group_cohomology.resolution.Action_diagonal_succ_inv_apply groupCohomology.resolution.actionDiagonalSucc_inv_apply
end Action
@@ -169,7 +169,7 @@ def diagonalSucc (n : ℕ) :
(linearization k G).mapIso (actionDiagonalSucc G n) ≪≫
(asIso ((linearization k G).μ (Action.leftRegular G) _)).symm ≪≫
tensorIso (Iso.refl _) (linearizationTrivialIso k G (Fin n → G))
-#align group_cohomology.resolution.diagonal_succ GroupCohomology.Resolution.diagonalSucc
+#align group_cohomology.resolution.diagonal_succ groupCohomology.resolution.diagonalSucc
variable {k G n}
@@ -195,7 +195,7 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
erw [lcongr_single]
rw [TensorProduct.lid_symm_apply, actionDiagonalSucc_hom_apply, finsuppTensorFinsupp_symm_single]
rfl
-#align group_cohomology.resolution.diagonal_succ_hom_single GroupCohomology.Resolution.diagonalSucc_hom_single
+#align group_cohomology.resolution.diagonal_succ_hom_single groupCohomology.resolution.diagonalSucc_hom_single
theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g a ⊗ₜ Finsupp.single f b) =
@@ -216,7 +216,7 @@ theorem diagonalSucc_inv_single_single (g : G) (f : Gⁿ) (a b : k) :
rw [finsuppTensorFinsupp_single, lcongr_single, mapDomain_single, Equiv.refl_apply,
actionDiagonalSucc_inv_apply]
rfl
-#align group_cohomology.resolution.diagonal_succ_inv_single_single GroupCohomology.Resolution.diagonalSucc_inv_single_single
+#align group_cohomology.resolution.diagonal_succ_inv_single_single groupCohomology.resolution.diagonalSucc_inv_single_single
theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
(diagonalSucc k G n).inv.hom (Finsupp.single g r ⊗ₜ f) =
@@ -238,7 +238,7 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
erw [diagonalSucc_inv_single_single]
rw [sum_single_index, mul_comm]
· rw [zero_mul, single_zero]
-#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
+#align group_cohomology.resolution.diagonal_succ_inv_single_left groupCohomology.resolution.diagonalSucc_inv_single_left
theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
(diagonalSucc k G n).inv.hom (g ⊗ₜ Finsupp.single f r) =
@@ -259,7 +259,7 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
erw [diagonalSucc_inv_single_single]
rw [sum_single_index]
· rw [zero_mul, single_zero]
-#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
+#align group_cohomology.resolution.diagonal_succ_inv_single_right groupCohomology.resolution.diagonalSucc_inv_single_right
end Rep
@@ -293,7 +293,7 @@ def ofMulActionBasisAux :
· rw [TensorProduct.smul_tmul', smul_eq_mul, ←ofMulAction_self_smul_eq_mul]
exact (smul_tprod_one_asModule (Representation.ofMulAction k G G) r x y).symm
· rw [smul_add, hz, hy, map_add] }
-#align group_cohomology.resolution.of_mul_action_basis_aux GroupCohomology.Resolution.ofMulActionBasisAux
+#align group_cohomology.resolution.of_mul_action_basis_aux groupCohomology.resolution.ofMulActionBasisAux
/-- A `k[G]`-basis of `k[Gⁿ⁺¹]`, coming from the `k[G]`-linear isomorphism
`k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹].` -/
@@ -303,22 +303,22 @@ def ofMulActionBasis :
(Algebra.TensorProduct.basis (MonoidAlgebra k G)
(Finsupp.basisSingleOne : Basis (Fin n → G) k ((Fin n → G) →₀ k)))
(ofMulActionBasisAux k G n)
-#align group_cohomology.resolution.of_mul_action_basis GroupCohomology.Resolution.ofMulActionBasis
+#align group_cohomology.resolution.of_mul_action_basis groupCohomology.resolution.ofMulActionBasis
theorem ofMulAction_free :
Module.Free (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
Module.Free.of_basis (ofMulActionBasis k G n)
-#align group_cohomology.resolution.of_mul_action_free GroupCohomology.Resolution.ofMulAction_free
+#align group_cohomology.resolution.of_mul_action_free groupCohomology.resolution.ofMulAction_free
end Basis
-end GroupCohomology.Resolution
+end groupCohomology.resolution
namespace Rep
variable (n) [Group G] (A : Rep k G)
-open GroupCohomology.Resolution
+open groupCohomology.resolution
/-- Given a `k`-linear `G`-representation `A`, the set of representation morphisms
`Hom(k[Gⁿ⁺¹], A)` is `k`-linearly isomorphic to the set of functions `Gⁿ → A`. -/
@@ -504,12 +504,12 @@ variable (k)
/-- The standard resolution of `k` as a trivial representation, defined as the alternating
face map complex of a simplicial `k`-linear `G`-representation. -/
-def GroupCohomology.resolution [Monoid G] :=
+def groupCohomology.resolution [Monoid G] :=
(AlgebraicTopology.alternatingFaceMapComplex (Rep k G)).obj
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1)
-#align group_cohomology.resolution GroupCohomology.resolution
+#align group_cohomology.resolution groupCohomology.resolution
-namespace GroupCohomology.Resolution
+namespace groupCohomology.resolution
open classifyingSpaceUniversalCover AlgebraicTopology CategoryTheory CategoryTheory.Limits
@@ -521,7 +521,7 @@ def d (G : Type u) (n : ℕ) : ((Fin (n + 1) → G) →₀ k) →ₗ[k] (Fin n
Finsupp.lift ((Fin n → G) →₀ k) k (Fin (n + 1) → G) fun g =>
(@Finset.univ (Fin (n + 1)) _).sum fun p =>
Finsupp.single (g ∘ p.succAbove) ((-1 : k) ^ (p : ℕ))
-#align group_cohomology.resolution.d GroupCohomology.Resolution.d
+#align group_cohomology.resolution.d groupCohomology.resolution.d
variable {k G}
@@ -531,31 +531,31 @@ theorem d_of {G : Type u} {n : ℕ} (c : Fin (n + 1) → G) :
Finset.univ.sum fun p : Fin (n + 1) =>
Finsupp.single (c ∘ p.succAbove) ((-1 : k) ^ (p : ℕ)) :=
by simp [d]
-#align group_cohomology.resolution.d_of GroupCohomology.Resolution.d_of
+#align group_cohomology.resolution.d_of groupCohomology.resolution.d_of
variable (k G)
/-- The `n`th object of the standard resolution of `k` is definitionally isomorphic to `k[Gⁿ⁺¹]`
equipped with the representation induced by the diagonal action of `G`. -/
-def xIso (n : ℕ) : (GroupCohomology.resolution k G).X n ≅ Rep.ofMulAction k G (Fin (n + 1) → G) :=
+def xIso (n : ℕ) : (groupCohomology.resolution k G).X n ≅ Rep.ofMulAction k G (Fin (n + 1) → G) :=
Iso.refl _
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.X_iso GroupCohomology.Resolution.xIso
+#align group_cohomology.resolution.X_iso groupCohomology.resolution.xIso
theorem x_projective (G : Type u) [Group G] (n : ℕ) :
- Projective ((GroupCohomology.resolution k G).X n) :=
+ Projective ((groupCohomology.resolution k G).X n) :=
Rep.equivalenceModuleMonoidAlgebra.toAdjunction.projective_of_map_projective _ <|
@ModuleCat.projective_of_free.{u} _ _
(ModuleCat.of (MonoidAlgebra k G) (Representation.ofMulAction k G (Fin (n + 1) → G)).asModule)
_ (ofMulActionBasis k G n)
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.X_projective GroupCohomology.Resolution.x_projective
+#align group_cohomology.resolution.X_projective groupCohomology.resolution.x_projective
/-- Simpler expression for the differential in the standard resolution of `k` as a
`G`-representation. It sends `(g₀, ..., gₙ₊₁) ↦ ∑ (-1)ⁱ • (g₀, ..., ĝᵢ, ..., gₙ₊₁)`. -/
-theorem d_eq (n : ℕ) : ((GroupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) := by
+theorem d_eq (n : ℕ) : ((groupCohomology.resolution k G).d (n + 1) n).hom = d k G (n + 1) := by
refine' Finsupp.lhom_ext' fun x => LinearMap.ext_ring _
- dsimp [GroupCohomology.resolution]
+ dsimp [groupCohomology.resolution]
/- Porting note: broken proof was
simpa [← @intCast_smul k, simplicial_object.δ] -/
simp_rw [alternatingFaceMapComplex_obj_d, AlternatingFaceMapComplex.objD, SimplicialObject.δ,
@@ -569,16 +569,16 @@ so using Finset.sum_congr to get rid of the binder -/
erw [LinearMap.smul_apply]
rw [Finsupp.lmapDomain_apply, Finsupp.mapDomain_single, Finsupp.smul_single', mul_one]
rfl
-#align group_cohomology.resolution.d_eq GroupCohomology.Resolution.d_eq
+#align group_cohomology.resolution.d_eq groupCohomology.resolution.d_eq
section Exactness
/-- The standard resolution of `k` as a trivial representation as a complex of `k`-modules. -/
def forget₂ToModuleCat :=
((forget₂ (Rep k G) (ModuleCat.{u} k)).mapHomologicalComplex _).obj
- (GroupCohomology.resolution k G)
+ (groupCohomology.resolution k G)
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.forget₂_to_Module GroupCohomology.Resolution.forget₂ToModuleCat
+#align group_cohomology.resolution.forget₂_to_Module groupCohomology.resolution.forget₂ToModuleCat
/-- If we apply the free functor `Type u ⥤ ModuleCat.{u} k` to the universal cover of the
classifying space of `G` as a simplicial set, then take the alternating face map complex, the result
@@ -587,16 +587,16 @@ is isomorphic to the standard resolution of the trivial `G`-representation `k` a
def compForgetAugmentedIso :
AlternatingFaceMapComplex.obj
(SimplicialObject.Augmented.drop.obj (compForgetAugmented.toModule k G)) ≅
- GroupCohomology.Resolution.forget₂ToModuleCat k G :=
+ groupCohomology.resolution.forget₂ToModuleCat k G :=
eqToIso
(Functor.congr_obj (map_alternatingFaceMapComplex (forget₂ (Rep k G) (ModuleCat.{u} k))).symm
(classifyingSpaceUniversalCover G ⋙ (Rep.linearization k G).1.1))
-#align group_cohomology.resolution.comp_forget_augmented_iso GroupCohomology.Resolution.compForgetAugmentedIso
+#align group_cohomology.resolution.comp_forget_augmented_iso groupCohomology.resolution.compForgetAugmentedIso
/-- As a complex of `k`-modules, the standard resolution of the trivial `G`-representation `k` is
homotopy equivalent to the complex which is `k` at 0 and 0 elsewhere. -/
def forget₂ToModuleCatHomotopyEquiv :
- HomotopyEquiv (GroupCohomology.Resolution.forget₂ToModuleCat k G)
+ HomotopyEquiv (groupCohomology.resolution.forget₂ToModuleCat k G)
((ChainComplex.single₀ (ModuleCat k)).obj ((forget₂ (Rep k G) _).obj <| Rep.trivial k G k)) :=
(HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).trans <|
(SimplicialObject.Augmented.ExtraDegeneracy.homotopyEquiv
@@ -606,7 +606,7 @@ def forget₂ToModuleCatHomotopyEquiv :
(@Finsupp.LinearEquiv.finsuppUnique k k _ _ _ (⊤_ Type u)
Types.terminalIso.toEquiv.unique).toModuleIso)
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv
/-- The hom of `k`-linear `G`-representations `k[G¹] → k` sending `∑ nᵢgᵢ ↦ ∑ nᵢ`. -/
def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k where
@@ -616,7 +616,7 @@ def ε : Rep.ofMulAction k G (Fin 1 → G) ⟶ Rep.trivial k G k where
Finsupp.total (Fin 1 → G) k k (fun _ => (1 : k)) (Finsupp.mapDomain _ (Finsupp.single _ _)) =
Finsupp.total (Fin 1 → G) k k (fun _ => (1 : k)) (Finsupp.single _ _)
simp only [Finsupp.mapDomain_single, Finsupp.total_single])
-#align group_cohomology.resolution.ε GroupCohomology.Resolution.ε
+#align group_cohomology.resolution.ε groupCohomology.resolution.ε
/-- The homotopy equivalence of complexes of `k`-modules between the standard resolution of `k` as
a trivial `G`-representation, and the complex which is `k` at 0 and 0 everywhere else, acts as
@@ -645,9 +645,9 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
Finsupp.single_eq_same]
· exact @Subsingleton.elim _ (@Unique.instSubsingleton _ (Limits.uniqueToTerminal _)) _ _
set_option linter.uppercaseLean3 false in
-#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq GroupCohomology.Resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
+#align group_cohomology.resolution.forget₂_to_Module_homotopy_equiv_f_0_eq groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
-theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 := by
+theorem d_comp_ε : (groupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 := by
ext : 1
refine' LinearMap.ext fun x => _
have : (forget₂ToModuleCat k G).d 1 0
@@ -656,14 +656,14 @@ theorem d_comp_ε : (GroupCohomology.resolution k G).d 1 0 ≫ ε k G = 0 := by
←(forget₂ToModuleCatHomotopyEquiv k G).1.2 1 0 rfl]
exact comp_zero
exact LinearMap.ext_iff.1 this _
-#align group_cohomology.resolution.d_comp_ε GroupCohomology.Resolution.d_comp_ε
+#align group_cohomology.resolution.d_comp_ε groupCohomology.resolution.d_comp_ε
/-- The chain map from the standard resolution of `k` to `k[0]` given by `∑ nᵢgᵢ ↦ ∑ nᵢ` in
degree zero. -/
def εToSingle₀ :
- GroupCohomology.resolution k G ⟶ (ChainComplex.single₀ _).obj (Rep.trivial k G k) :=
- ((GroupCohomology.resolution k G).toSingle₀Equiv _).symm ⟨ε k G, d_comp_ε k G⟩
-#align group_cohomology.resolution.ε_to_single₀ GroupCohomology.Resolution.εToSingle₀
+ groupCohomology.resolution k G ⟶ (ChainComplex.single₀ _).obj (Rep.trivial k G k) :=
+ ((groupCohomology.resolution k G).toSingle₀Equiv _).symm ⟨ε k G, d_comp_ε k G⟩
+#align group_cohomology.resolution.ε_to_single₀ groupCohomology.resolution.εToSingle₀
theorem εToSingle₀_comp_eq :
((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G) ≫
@@ -673,7 +673,7 @@ theorem εToSingle₀_comp_eq :
dsimp
rw [Category.comp_id]
exact (forget₂ToModuleCatHomotopyEquiv_f_0_eq k G).symm
-#align group_cohomology.resolution.ε_to_single₀_comp_eq GroupCohomology.Resolution.εToSingle₀_comp_eq
+#align group_cohomology.resolution.ε_to_single₀_comp_eq groupCohomology.resolution.εToSingle₀_comp_eq
theorem quasiIsoOfForget₂εToSingle₀ :
QuasiIso (((forget₂ _ (ModuleCat.{u} k)).mapHomologicalComplex _).map (εToSingle₀ k G)) := by
@@ -681,24 +681,24 @@ theorem quasiIsoOfForget₂εToSingle₀ :
rw [← εToSingle₀_comp_eq k G] at h
haveI := h
exact quasiIso_of_comp_right _ ((ChainComplex.single₀MapHomologicalComplex _).hom.app _)
-#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ GroupCohomology.Resolution.quasiIsoOfForget₂εToSingle₀
+#align group_cohomology.resolution.quasi_iso_of_forget₂_ε_to_single₀ groupCohomology.resolution.quasiIsoOfForget₂εToSingle₀
instance : QuasiIso (εToSingle₀ k G) :=
(forget₂ _ (ModuleCat.{u} k)).quasiIso_of_map_quasiIso _ (quasiIsoOfForget₂εToSingle₀ k G)
end Exactness
-end GroupCohomology.Resolution
+end groupCohomology.resolution
-open GroupCohomology.Resolution HomologicalComplex.Hom
+open groupCohomology.resolution HomologicalComplex.Hom
variable [Group G]
/-- The standard projective resolution of `k` as a trivial `k`-linear `G`-representation. -/
-def GroupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
+def groupCohomology.projectiveResolution : ProjectiveResolution (Rep.trivial k G k) :=
toSingle₀ProjectiveResolution (εToSingle₀ k G) (x_projective k G)
set_option linter.uppercaseLean3 false in
-#align group_cohomology.ProjectiveResolution GroupCohomology.projectiveResolution
+#align group_cohomology.ProjectiveResolution groupCohomology.projectiveResolution
instance : EnoughProjectives (Rep k G) :=
Rep.equivalenceModuleMonoidAlgebra.enoughProjectives_iff.2
@@ -706,12 +706,12 @@ instance : EnoughProjectives (Rep k G) :=
/-- Given a `k`-linear `G`-representation `V`, `Extⁿ(k, V)` (where `k` is a trivial `k`-linear
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
-standard resolution of `k` called `GroupCohomology.resolution k G`. -/
-def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
+standard resolution of `k` called `groupCohomology.resolution k G`. -/
+def groupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
- (GroupCohomology.resolution k G)).homology
+ (groupCohomology.resolution k G)).homology
n).unop := (((linearYoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
- (GroupCohomology.projectiveResolution k G)).unop.symm
+ (groupCohomology.projectiveResolution k G)).unop.symm
set_option linter.uppercaseLean3 false in
-#align group_cohomology.Ext_iso GroupCohomology.extIso
+#align group_cohomology.Ext_iso groupCohomology.extIso
Due to recent changes in core we can reduce or remove many set_option maxHeartbeats
statements.
I have tried to be careful to not leave anything too close to the line, so don't be surprised if some of these can still be reduced further.
This reduces us from 96 maxHeartbeats
statements to 44
. (There are 10 false positives in meta or testing code.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -266,7 +266,7 @@ end Rep
open scoped TensorProduct
open Representation
-set_option maxHeartbeats 500000 in
+
/-- The `k[G]`-linear isomorphism `k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹]`, where the `k[G]`-module structure on
the lefthand side is `TensorProduct.leftModule`, whilst that of the righthand side comes from
`Representation.asModule`. Allows us to use `Algebra.TensorProduct.basis` to get a `k[G]`-basis
@@ -704,7 +704,6 @@ instance : EnoughProjectives (Rep k G) :=
Rep.equivalenceModuleMonoidAlgebra.enoughProjectives_iff.2
ModuleCat.moduleCat_enoughProjectives.{u}
-set_option maxHeartbeats 1200000 in
/-- Given a `k`-linear `G`-representation `V`, `Extⁿ(k, V)` (where `k` is a trivial `k`-linear
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
standard resolution of `k` called `GroupCohomology.resolution k G`. -/
@@ -189,7 +189,8 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
((inv ((linearization k G).μ (Action.leftRegular G) { V := Fin n → G, ρ := 1 })).hom
((lmapDomain k k (actionDiagonalSucc G n).hom.hom) (single f a))) = _
simp only [CategoryTheory.Functor.map_id, linearization_μ_inv_hom]
- rw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
LinearEquiv.trans_symm, LinearEquiv.trans_apply, lcongr_symm, Equiv.refl_symm]
erw [lcongr_single]
rw [TensorProduct.lid_symm_apply, actionDiagonalSucc_hom_apply, finsuppTensorFinsupp_symm_single]
@@ -227,10 +228,14 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
diagonalSucc_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
zero_mul, single_zero] -/
- · rw [TensorProduct.tmul_zero, map_zero, map_zero]
+ · rw [TensorProduct.tmul_zero, map_zero]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.tmul_add, map_add, map_add, hx]
- simp_rw [lift_apply, smul_single, smul_eq_mul, diagonalSucc_inv_single_single]
+ rw [TensorProduct.tmul_add, map_add]; erw [map_add, hx]
+ simp_rw [lift_apply, smul_single, smul_eq_mul]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_inv_single_single]
rw [sum_single_index, mul_comm]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
@@ -244,10 +249,14 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonalSucc_inv_single_single,
TensorProduct.add_tmul, Finsupp.sum_single_index, zero_mul, single_zero] -/
- · rw [TensorProduct.zero_tmul, map_zero, map_zero]
+ · rw [TensorProduct.zero_tmul, map_zero]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.add_tmul, map_add, map_add, hx]
- simp_rw [lift_apply, smul_single', diagonalSucc_inv_single_single]
+ rw [TensorProduct.add_tmul, map_add]; erw [map_add, hx]
+ simp_rw [lift_apply, smul_single']
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_inv_single_single]
rw [sum_single_index]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
@@ -267,7 +276,8 @@ def ofMulActionBasisAux :
(ofMulAction k G (Fin (n + 1) → G)).asModule :=
{ (Rep.equivalenceModuleMonoidAlgebra.1.mapIso (diagonalSucc k G n).symm).toLinearEquiv with
map_smul' := fun r x => by
- rw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
congr 1
/- Porting note: broken proof was
refine' x.induction_on _ (fun x y => _) fun y z hy hz => _
@@ -365,9 +375,11 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
Category.comp_id, Action.comp_hom, MonoidalClosed.linearHomEquivComm_symm_hom]
-- Porting note: This is a sure sign that coercions for morphisms in `ModuleCat`
-- are still not set up properly.
- rw [ModuleCat.coe_comp]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [ModuleCat.coe_comp]
simp only [ModuleCat.coe_comp, Function.comp_apply]
- rw [diagonalSucc_hom_single]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_hom_single]
erw [TensorProduct.uncurry_apply, Finsupp.lift_apply, Finsupp.sum_single_index]
simp only [one_smul]
erw [Representation.linHom_apply]
@@ -189,8 +189,7 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
((inv ((linearization k G).μ (Action.leftRegular G) { V := Fin n → G, ρ := 1 })).hom
((lmapDomain k k (actionDiagonalSucc G n).hom.hom) (single f a))) = _
simp only [CategoryTheory.Functor.map_id, linearization_μ_inv_hom]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
+ rw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
LinearEquiv.trans_symm, LinearEquiv.trans_apply, lcongr_symm, Equiv.refl_symm]
erw [lcongr_single]
rw [TensorProduct.lid_symm_apply, actionDiagonalSucc_hom_apply, finsuppTensorFinsupp_symm_single]
@@ -228,14 +227,10 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
diagonalSucc_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
zero_mul, single_zero] -/
- · rw [TensorProduct.tmul_zero, map_zero]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [map_zero]
+ · rw [TensorProduct.tmul_zero, map_zero, map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.tmul_add, map_add]; erw [map_add, hx]
- simp_rw [lift_apply, smul_single, smul_eq_mul]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [diagonalSucc_inv_single_single]
+ rw [TensorProduct.tmul_add, map_add, map_add, hx]
+ simp_rw [lift_apply, smul_single, smul_eq_mul, diagonalSucc_inv_single_single]
rw [sum_single_index, mul_comm]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
@@ -249,14 +244,10 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonalSucc_inv_single_single,
TensorProduct.add_tmul, Finsupp.sum_single_index, zero_mul, single_zero] -/
- · rw [TensorProduct.zero_tmul, map_zero]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [map_zero]
+ · rw [TensorProduct.zero_tmul, map_zero, map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.add_tmul, map_add]; erw [map_add, hx]
- simp_rw [lift_apply, smul_single']
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [diagonalSucc_inv_single_single]
+ rw [TensorProduct.add_tmul, map_add, map_add, hx]
+ simp_rw [lift_apply, smul_single', diagonalSucc_inv_single_single]
rw [sum_single_index]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
@@ -276,8 +267,7 @@ def ofMulActionBasisAux :
(ofMulAction k G (Fin (n + 1) → G)).asModule :=
{ (Rep.equivalenceModuleMonoidAlgebra.1.mapIso (diagonalSucc k G n).symm).toLinearEquiv with
map_smul' := fun r x => by
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
+ rw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
congr 1
/- Porting note: broken proof was
refine' x.induction_on _ (fun x y => _) fun y z hy hz => _
@@ -375,11 +365,9 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
Category.comp_id, Action.comp_hom, MonoidalClosed.linearHomEquivComm_symm_hom]
-- Porting note: This is a sure sign that coercions for morphisms in `ModuleCat`
-- are still not set up properly.
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [ModuleCat.coe_comp]
+ rw [ModuleCat.coe_comp]
simp only [ModuleCat.coe_comp, Function.comp_apply]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [diagonalSucc_hom_single]
+ rw [diagonalSucc_hom_single]
erw [TensorProduct.uncurry_apply, Finsupp.lift_apply, Finsupp.sum_single_index]
simp only [one_smul]
erw [Representation.linHom_apply]
@@ -189,7 +189,8 @@ theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
((inv ((linearization k G).μ (Action.leftRegular G) { V := Fin n → G, ρ := 1 })).hom
((lmapDomain k k (actionDiagonalSucc G n).hom.hom) (single f a))) = _
simp only [CategoryTheory.Functor.map_id, linearization_μ_inv_hom]
- rw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [lmapDomain_apply, mapDomain_single, LinearEquiv.coe_toLinearMap, finsuppTensorFinsupp',
LinearEquiv.trans_symm, LinearEquiv.trans_apply, lcongr_symm, Equiv.refl_symm]
erw [lcongr_single]
rw [TensorProduct.lid_symm_apply, actionDiagonalSucc_hom_apply, finsuppTensorFinsupp_symm_single]
@@ -227,10 +228,14 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
diagonalSucc_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
zero_mul, single_zero] -/
- · rw [TensorProduct.tmul_zero, map_zero, map_zero]
+ · rw [TensorProduct.tmul_zero, map_zero]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.tmul_add, map_add, map_add, hx]
- simp_rw [lift_apply, smul_single, smul_eq_mul, diagonalSucc_inv_single_single]
+ rw [TensorProduct.tmul_add, map_add]; erw [map_add, hx]
+ simp_rw [lift_apply, smul_single, smul_eq_mul]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_inv_single_single]
rw [sum_single_index, mul_comm]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_left GroupCohomology.Resolution.diagonalSucc_inv_single_left
@@ -244,10 +249,14 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonalSucc_inv_single_single,
TensorProduct.add_tmul, Finsupp.sum_single_index, zero_mul, single_zero] -/
- · rw [TensorProduct.zero_tmul, map_zero, map_zero]
+ · rw [TensorProduct.zero_tmul, map_zero]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [map_zero]
· intro _ _ _ _ _ hx
- rw [TensorProduct.add_tmul, map_add, map_add, hx]
- simp_rw [lift_apply, smul_single', diagonalSucc_inv_single_single]
+ rw [TensorProduct.add_tmul, map_add]; erw [map_add, hx]
+ simp_rw [lift_apply, smul_single']
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_inv_single_single]
rw [sum_single_index]
· rw [zero_mul, single_zero]
#align group_cohomology.resolution.diagonal_succ_inv_single_right GroupCohomology.Resolution.diagonalSucc_inv_single_right
@@ -267,7 +276,8 @@ def ofMulActionBasisAux :
(ofMulAction k G (Fin (n + 1) → G)).asModule :=
{ (Rep.equivalenceModuleMonoidAlgebra.1.mapIso (diagonalSucc k G n).symm).toLinearEquiv with
map_smul' := fun r x => by
- rw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [RingHom.id_apply, LinearEquiv.toFun_eq_coe, ← LinearEquiv.map_smul]
congr 1
/- Porting note: broken proof was
refine' x.induction_on _ (fun x y => _) fun y z hy hz => _
@@ -365,9 +375,11 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
Category.comp_id, Action.comp_hom, MonoidalClosed.linearHomEquivComm_symm_hom]
-- Porting note: This is a sure sign that coercions for morphisms in `ModuleCat`
-- are still not set up properly.
- rw [ModuleCat.coe_comp]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [ModuleCat.coe_comp]
simp only [ModuleCat.coe_comp, Function.comp_apply]
- rw [diagonalSucc_hom_single]
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [diagonalSucc_hom_single]
erw [TensorProduct.uncurry_apply, Finsupp.lift_apply, Finsupp.sum_single_index]
simp only [one_smul]
erw [Representation.linHom_apply]
This fix has picked up a mixture of naming conventions for type names. In particular, this replaces:
A, B, B', C, D, D'
with A, B, C, D, E, F
R, A, A'
with R, S, A
k, R
with R, A
This also gives the universes explicit names because this is marginally nicer to read than u_<random number>
.
@@ -289,9 +289,9 @@ def ofMulActionBasisAux :
`k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹].` -/
def ofMulActionBasis :
Basis (Fin n → G) (MonoidAlgebra k G) (ofMulAction k G (Fin (n + 1) → G)).asModule :=
- @Basis.map _ (MonoidAlgebra k G) (MonoidAlgebra k G ⊗[k] ((Fin n → G) →₀ k)) _ _ _ _ _ _
- (@Algebra.TensorProduct.basis.{u} k _ (MonoidAlgebra k G) _ _ ((Fin n → G) →₀ k) _ _ (Fin n → G)
- ⟨LinearEquiv.refl k _⟩)
+ Basis.map
+ (Algebra.TensorProduct.basis (MonoidAlgebra k G)
+ (Finsupp.basisSingleOne : Basis (Fin n → G) k ((Fin n → G) →₀ k)))
(ofMulActionBasisAux k G n)
#align group_cohomology.resolution.of_mul_action_basis GroupCohomology.Resolution.ofMulActionBasis
@@ -257,7 +257,7 @@ end Rep
open scoped TensorProduct
open Representation
-set_option maxHeartbeats 800000 in
+set_option maxHeartbeats 500000 in
/-- The `k[G]`-linear isomorphism `k[G] ⊗ₖ k[Gⁿ] ≃ k[Gⁿ⁺¹]`, where the `k[G]`-module structure on
the lefthand side is `TensorProduct.leftModule`, whilst that of the righthand side comes from
`Representation.asModule`. Allows us to use `Algebra.TensorProduct.basis` to get a `k[G]`-basis
@@ -692,7 +692,7 @@ instance : EnoughProjectives (Rep k G) :=
Rep.equivalenceModuleMonoidAlgebra.enoughProjectives_iff.2
ModuleCat.moduleCat_enoughProjectives.{u}
-set_option maxHeartbeats 1600000 in
+set_option maxHeartbeats 1200000 in
/-- Given a `k`-linear `G`-representation `V`, `Extⁿ(k, V)` (where `k` is a trivial `k`-linear
`G`-representation) is isomorphic to the `n`th cohomology group of `Hom(P, V)`, where `P` is the
standard resolution of `k` called `GroupCohomology.resolution k G`. -/
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -226,7 +226,7 @@ theorem diagonalSucc_inv_single_left (g : G) (f : Gⁿ →₀ k) (r : k) :
· intro a b x ha hb hx
simp only [lift_apply, smul_single', mul_one, TensorProduct.tmul_add, map_add,
diagonalSucc_inv_single_single, hx, Finsupp.sum_single_index, mul_comm b,
- MulZeroClass.zero_mul, single_zero] -/
+ zero_mul, single_zero] -/
· rw [TensorProduct.tmul_zero, map_zero, map_zero]
· intro _ _ _ _ _ hx
rw [TensorProduct.tmul_add, map_add, map_add, hx]
@@ -243,7 +243,7 @@ theorem diagonalSucc_inv_single_right (g : G →₀ k) (f : Gⁿ) (r : k) :
· simp only [TensorProduct.zero_tmul, map_zero]
· intro a b x ha hb hx
simp only [lift_apply, smul_single', map_add, hx, diagonalSucc_inv_single_single,
- TensorProduct.add_tmul, Finsupp.sum_single_index, MulZeroClass.zero_mul, single_zero] -/
+ TensorProduct.add_tmul, Finsupp.sum_single_index, zero_mul, single_zero] -/
· rw [TensorProduct.zero_tmul, map_zero, map_zero]
· intro _ _ _ _ _ hx
rw [TensorProduct.add_tmul, map_add, map_add, hx]
@@ -425,7 +425,6 @@ def cechNerveTerminalFromIso :
NatIso.ofComponents (fun n => limit.isoLimitCone (Action.ofMulActionLimitCone _ _)) fun f => by
refine' IsLimit.hom_ext (Action.ofMulActionLimitCone.{u, 0} G fun _ => G).2 fun j => _
dsimp only [cechNerveTerminalFrom, Pi.lift]
- dsimp
rw [Category.assoc, limit.isoLimitCone_hom_π, limit.lift_π, Category.assoc]
exact (limit.isoLimitCone_hom_π _ _).symm
#align classifying_space_universal_cover.cech_nerve_terminal_from_iso classifyingSpaceUniversalCover.cechNerveTerminalFromIso
These declarations broke when I tweaked instances a little bit (in a separate branch that is not ready yet), and I think these declarations can use some extra robustness (usually by providing some extra information explicitly).
@@ -620,8 +620,8 @@ theorem forget₂ToModuleCatHomotopyEquiv_f_0_eq :
simp only [Iso.symm_hom, eqToIso.inv, HomologicalComplex.eqToHom_f, eqToHom_refl]
trans (Finsupp.total _ _ _ fun _ => (1 : k)).comp ((ModuleCat.free k).map (terminal.from _))
· dsimp
- erw [@Finsupp.lmapDomain_total (Fin 1 → G) k k (⊤_ Type u) k _ _ _ _ _ (fun _ => (1 : k))
- (fun _ => (1 : k))
+ erw [Finsupp.lmapDomain_total (α := Fin 1 → G) (R := k) (α' := ⊤_ Type u)
+ (v := fun _ => (1 : k)) (v' := fun _ => (1 : k))
(terminal.from
((classifyingSpaceUniversalCover G).obj (Opposite.op (SimplexCategory.mk 0))).V)
LinearMap.id fun i => rfl,
@@ -342,7 +342,7 @@ theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶
set_option linter.uppercaseLean3 false in
#align Rep.diagonal_hom_equiv_apply Rep.diagonalHomEquiv_apply
-set_option maxHeartbeats 800000 in
+set_option maxHeartbeats 400000 in
/-- Given a `k`-linear `G`-representation `A`, `diagonalHomEquiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that the
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
@@ -701,9 +701,7 @@ def GroupCohomology.extIso (V : Rep k G) (n : ℕ) :
((Ext k (Rep k G) n).obj (Opposite.op <| Rep.trivial k G k)).obj V ≅
(((((linearYoneda k (Rep k G)).obj V).rightOp.mapHomologicalComplex _).obj
(GroupCohomology.resolution k G)).homology
- n).unop := by
- let E := (((linearYoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
+ n).unop := (((linearYoneda k (Rep k G)).obj V).rightOp.leftDerivedObjIso n
(GroupCohomology.projectiveResolution k G)).unop.symm
- exact E
set_option linter.uppercaseLean3 false in
#align group_cohomology.Ext_iso GroupCohomology.extIso
maxHeartbeats
(#6206)
git ls-files '*.lean' | xargs sed -i "s=maxHeartbeats [0-9]*$=& in="
Affected files:
Mathlib/CategoryTheory/Monoidal/Braided.lean:479:set_option maxHeartbeats 400000
Mathlib/FieldTheory/Adjoin.lean:1212:set_option synthInstance.maxHeartbeats 30000
Mathlib/FieldTheory/IsAlgClosed/Basic.lean:302:set_option maxHeartbeats 800000
Mathlib/FieldTheory/IsAlgClosed/Basic.lean:303:set_option synthInstance.maxHeartbeats 400000
Mathlib/RepresentationTheory/GroupCohomology/Basic.lean:202:set_option maxHeartbeats 6400000
Mathlib/RepresentationTheory/GroupCohomology/Resolution.lean:345:set_option maxHeartbeats 800000
Mathlib/Topology/MetricSpace/GromovHausdorff.lean:415:set_option maxHeartbeats 300000
@@ -342,7 +342,7 @@ theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶
set_option linter.uppercaseLean3 false in
#align Rep.diagonal_hom_equiv_apply Rep.diagonalHomEquiv_apply
-set_option maxHeartbeats 800000
+set_option maxHeartbeats 800000 in
/-- Given a `k`-linear `G`-representation `A`, `diagonalHomEquiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that the
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
@@ -2,17 +2,14 @@
Copyright (c) 2022 Amelia Livingston. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Amelia Livingston
-
-! This file was ported from Lean 3 source module representation_theory.group_cohomology.resolution
-! leanprover-community/mathlib commit cec81510e48e579bde6acd8568c06a87af045b63
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Category.ModuleCat.Projective
import Mathlib.AlgebraicTopology.ExtraDegeneracy
import Mathlib.CategoryTheory.Abelian.Ext
import Mathlib.RepresentationTheory.Rep
+#align_import representation_theory.group_cohomology.resolution from "leanprover-community/mathlib"@"cec81510e48e579bde6acd8568c06a87af045b63"
+
/-!
# The structure of the `k[G]`-module `k[Gⁿ]`
Co-authored-by: Komyyy <pol_tta@outlook.jp> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -109,7 +109,7 @@ set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
- (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f (Fin.castSuccEmb i))⁻¹ * f i.succ) := by
+ (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) := by
induction' n with n hn
· exact Prod.ext rfl (funext fun x => Fin.elim0 x)
· refine' Prod.ext rfl (funext fun x => _)
@@ -121,7 +121,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
tensor_rho, MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ,
Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
- · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSuccEmb_fin_succ] -/
+ · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ] -/
· dsimp [actionDiagonalSucc]
erw [hn (fun (j : Fin (n + 1)) => f j.succ)]
exact Fin.cases rfl (fun i => rfl) x
@@ -178,7 +178,7 @@ variable {k G n}
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
- single (f 0) 1 ⊗ₜ single (fun i => (f (Fin.castSuccEmb i))⁻¹ * f i.succ) a := by
+ single (f 0) 1 ⊗ₜ single (fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) a := by
/- Porting note: broken proof was
dsimp only [diagonalSucc]
simpa only [Iso.trans_hom, Iso.symm_hom, Action.comp_hom, ModuleCat.comp_def,
@@ -353,7 +353,7 @@ inverse map sends a function `f : Gⁿ → A` to the representation morphism sen
to `A`. -/
theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1) → G) :
((diagonalHomEquiv n A).symm f).hom (Finsupp.single x 1) =
- A.ρ (x 0) (f fun i : Fin n => (x (Fin.castSuccEmb i))⁻¹ * x i.succ) := by
+ A.ρ (x 0) (f fun i : Fin n => (x (Fin.castSucc i))⁻¹ * x i.succ) := by
unfold diagonalHomEquiv
/- Porting note: broken proof was
simp only [LinearEquiv.trans_symm, LinearEquiv.symm_symm, LinearEquiv.trans_apply,
@@ -109,7 +109,7 @@ set_option linter.uppercaseLean3 false in
#align group_cohomology.resolution.Action_diagonal_succ GroupCohomology.Resolution.actionDiagonalSucc
theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (n + 1) → G) :
- (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) := by
+ (actionDiagonalSucc G n).hom.hom f = (f 0, fun i => (f (Fin.castSuccEmb i))⁻¹ * f i.succ) := by
induction' n with n hn
· exact Prod.ext rfl (funext fun x => Fin.elim0 x)
· refine' Prod.ext rfl (funext fun x => _)
@@ -121,7 +121,7 @@ theorem actionDiagonalSucc_hom_apply {G : Type u} [Group G] {n : ℕ} (f : Fin (
tensor_rho, MonoidHom.one_apply, End.one_def, hn fun j : Fin (n + 1) => f j.succ,
Fin.insertNth_zero']
refine' Fin.cases (Fin.cons_zero _ _) (fun i => _) x
- · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSucc_fin_succ] -/
+ · simp only [Fin.cons_succ, mul_left_inj, inv_inj, Fin.castSuccEmb_fin_succ] -/
· dsimp [actionDiagonalSucc]
erw [hn (fun (j : Fin (n + 1)) => f j.succ)]
exact Fin.cases rfl (fun i => rfl) x
@@ -178,7 +178,7 @@ variable {k G n}
theorem diagonalSucc_hom_single (f : Gⁿ⁺¹) (a : k) :
(diagonalSucc k G n).hom.hom (single f a) =
- single (f 0) 1 ⊗ₜ single (fun i => (f (Fin.castSucc i))⁻¹ * f i.succ) a := by
+ single (f 0) 1 ⊗ₜ single (fun i => (f (Fin.castSuccEmb i))⁻¹ * f i.succ) a := by
/- Porting note: broken proof was
dsimp only [diagonalSucc]
simpa only [Iso.trans_hom, Iso.symm_hom, Action.comp_hom, ModuleCat.comp_def,
@@ -353,7 +353,7 @@ inverse map sends a function `f : Gⁿ → A` to the representation morphism sen
to `A`. -/
theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1) → G) :
((diagonalHomEquiv n A).symm f).hom (Finsupp.single x 1) =
- A.ρ (x 0) (f fun i : Fin n => (x (Fin.castSucc i))⁻¹ * x i.succ) := by
+ A.ρ (x 0) (f fun i : Fin n => (x (Fin.castSuccEmb i))⁻¹ * x i.succ) := by
unfold diagonalHomEquiv
/- Porting note: broken proof was
simp only [LinearEquiv.trans_symm, LinearEquiv.symm_symm, LinearEquiv.trans_apply,
Sets new records for set_option maxHeartbeats
. :-( I spent too long struggling with this one; if anyone would like to take another look please do.
Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -345,7 +345,7 @@ theorem diagonalHomEquiv_apply (f : Rep.ofMulAction k G (Fin (n + 1) → G) ⟶
set_option linter.uppercaseLean3 false in
#align Rep.diagonal_hom_equiv_apply Rep.diagonalHomEquiv_apply
-set_option maxHeartbeats 800000 in
+set_option maxHeartbeats 800000
/-- Given a `k`-linear `G`-representation `A`, `diagonalHomEquiv` is a `k`-linear isomorphism of
the set of representation morphisms `Hom(k[Gⁿ⁺¹], A)` with `Fun(Gⁿ, A)`. This lemma says that the
inverse map sends a function `f : Gⁿ → A` to the representation morphism sending
@@ -363,10 +363,13 @@ theorem diagonalHomEquiv_symm_apply (f : (Fin n → G) → A) (x : Fin (n + 1)
diagonalSucc_hom_single x (1 : k), TensorProduct.uncurry_apply, Rep.leftRegularHom_hom,
Finsupp.lift_apply, ihom_obj_ρ_def, Rep.ihom_obj_ρ_apply, Finsupp.sum_single_index, zero_smul,
one_smul, Rep.of_ρ, Rep.Action_ρ_eq_ρ, Rep.trivial_def (x 0)⁻¹, Finsupp.llift_apply A k k] -/
- simp only [LinearEquiv.trans_symm, LinearEquiv.trans_apply,
- leftRegularHomEquiv_symm_apply, LinearEquiv.symm_symm, Linear.homCongr_symm_apply,
- Action.comp_hom, Iso.refl_inv, Category.comp_id, Rep.MonoidalClosed.linearHomEquivComm_symm_hom,
- Iso.trans_hom, ModuleCat.coe_comp, Function.comp_apply]
+ simp only [LinearEquiv.trans_symm, LinearEquiv.symm_symm, LinearEquiv.trans_apply,
+ leftRegularHomEquiv_symm_apply, Linear.homCongr_symm_apply, Iso.trans_hom, Iso.refl_inv,
+ Category.comp_id, Action.comp_hom, MonoidalClosed.linearHomEquivComm_symm_hom]
+ -- Porting note: This is a sure sign that coercions for morphisms in `ModuleCat`
+ -- are still not set up properly.
+ rw [ModuleCat.coe_comp]
+ simp only [ModuleCat.coe_comp, Function.comp_apply]
rw [diagonalSucc_hom_single]
erw [TensorProduct.uncurry_apply, Finsupp.lift_apply, Finsupp.sum_single_index]
simp only [one_smul]
The unported dependencies are
category_theory.functor.left_derived
algebra.order.module
init.core
category_theory.abelian.projective
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
category_theory.functor.inv_isos
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file