-- Module: Mathlib.RepresentationTheory.Homological.GroupHomology.Functoriality
Goal:
k G : Type u
inst : CommRing k
inst_1 : Group G
A : Rep k G
S : Subgroup G
inst_2 : S.Normal
x : (↑(shortComplexH1 (A.coinvariantsShortComplex S).X₁).X₂ : Type u)
h : Membership.mem (γ := Submodule k (↑(shortComplexH1 (A.coinvariantsShortComplex S).X₁).X₂ : Type u)) ⊤ x
X : G →₀ ↥S →₀ (↑A : Type u)
hX :
  mapRange
      (⇑(ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
            ModuleCat.carrier) (chains₁ToCoinvariantsKer (res S.subtype A))) :
        (a : (↑(ModuleCat.of k (↥S →₀ (↑(res S.subtype A) : Type u))) : Type u)) →
          (↑(ModuleCat.of k ↥(Coinvariants.ker (res S.subtype A).ρ)) : Type u))
      ⋯ X =
    x
Y : ↥S →₀ (↑A : Type u) :=
  X.sum fun (g : G) (f : ↥S →₀ (↑A : Type u)) ↦
    HSub.hSub (α := ↥S →₀ (↑A : Type u))
      ((mapRange.linearMap ((A.ρ : (a : G) → (↑A : Type u) →ₗ[k] (↑A : Type u)) g⁻¹) :
            (a : ↥S →₀ (↑A : Type u)) → ↥S →₀ (↑A : Type u))
          ((lmapDomain (↑A : Type u) k fun (s : ↥S) ↦
                (((MulAut.conjNormal : (a : G) → MulAut ↥S) g⁻¹ : MulAut ↥S) : (a : ↥S) → ↥S) s :
              (a : ↥S →₀ (↑A : Type u)) → ↥S →₀ (↑A : Type u))
            f) :
        ↥S →₀ (↑A : Type u))
      f
Z : G × G →₀ (↑A : Type u) :=
  X.sum fun (g : G) (f : ↥S →₀ (↑A : Type u)) ↦
    HSub.hSub (α := G × G →₀ (↑A : Type u)) (β := G × G →₀ (↑A : Type u))
      ((lmapDomain (↑A : Type u) k fun (s : ↥S) ↦ (g, g⁻¹ * (↑s : G) * g) :
            (a : ↥S →₀ (↑A : Type u)) → G × G →₀ (↑A : Type u))
          f :
        G × G →₀ (↑A : Type u))
      ((lmapDomain (↑A : Type u) k fun (s : ↥S) ↦ ((↑s : G), g) : (a : ↥S →₀ (↑A : Type u)) → G × G →₀ (↑A : Type u))
          f :
        G × G →₀ (↑A : Type u))
⊢ (ConcreteCategory.hom (FC := fun (x1 x2 : ModuleCat k) ↦ (↑x1 : Type u) →ₗ[k] (↑x2 : Type u)) (CC :=
          ModuleCat.carrier) (d₂₁ A) :
        (a : (↑(ModuleCat.of k (G × G →₀ (↑A : Type u))) : Type u)) → (↑(ModuleCat.of k (G →₀ (↑A : Type u))) : Type u))
      Z =
    HSub.hSub (α := G →₀ (↑A : Type u)) (β := G →₀ (↑A : Type u))
      (mapRange id ⋯
        ((lmapDomain (↑A : Type u) k (Subtype.val (p := fun (x : G) ↦ x ∈ S)) :
            (a : ↥S →₀ (↑A : Type u)) → G →₀ (↑A : Type u))
          Y))
      ((mapRange.linearMap (Coinvariants.ker (MonoidHom.comp A.ρ S.subtype)).subtype :
            (a : G →₀ ↥(Coinvariants.ker (MonoidHom.comp A.ρ S.subtype))) → G →₀ (↑A : Type u))
          (mapDomain id x) :
        G →₀ (↑A : Type u))

Tactic:
simpa [map_finsuppSum, mapDomain, map_sub, ← hX, sum_single_index, curryLinearEquiv,
    curryEquiv, Finsupp.uncurry, d₂₁, Y, Z, sum_mapRange_index,
    chains₁ToCoinvariantsKer, d₁₀, single_sum, mul_assoc, sub_add_eq_add_sub,
    sum_sum_index, add_smul, sub_sub_sub_eq, lsingle, singleAddHom] using add_comm _ _

Premises used: map_sub, groupHomology.chains₁ToCoinvariantsKer, Finsupp.sum_single_index, Finsupp.mapDomain, mul_assoc, Finsupp.uncurry, add_comm, groupHomology.d₁₀, groupHomology.d₂₁, add_smul, Finsupp.singleAddHom, map_finsuppSum, Finsupp.curryEquiv, Finsupp.curryLinearEquiv, Finsupp.sum_mapRange_index, Finsupp.single_sum, sub_add_eq_add_sub, sub_sub_sub_eq, Finsupp.lsingle, Finsupp.sum_sum_index