Theorem: groupCohomology.resolution.forget₂ToModuleCatHomotopyEquiv_f_0_eq
File: Mathlib/RepresentationTheory/GroupCohomology/Resolution.lean

tactic: show (HomotopyEquiv.hom _ ≫ HomotopyEquiv.hom _ ≫ HomotopyEquiv.hom _).f 0 = _
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ToModuleCatHomotopyEquiv k G).hom.f 0 = (forget₂ (Rep k G) (ModuleCat k)).map (ε k G)
state_after: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ ((HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom ≫
          (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom ≫
            (HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom).f
      0 =
    (forget₂ (Rep k G) (ModuleCat k)).map (ε k G)

tactic: simp only [HomologicalComplex.comp_f]
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ ((HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom ≫
          (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom ≫
            (HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom).f
      0 =
    (forget₂ (Rep k G) (ModuleCat k)).map (ε k G)
state_after: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom.f 0 ≫
      (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
        (HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
          0 =
    (forget₂ (Rep k G) (ModuleCat k)).map (ε k G)

tactic: convert Category.id_comp (X := (forget₂ToModuleCat k G).X 0) _
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom.f 0 ≫
      (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
        (HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
          0 =
    (forget₂ (Rep k G) (ModuleCat k)).map (ε k G)
state_after: case h.e'_2.h.e'_6.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
e_4✝ : (compForgetAugmented.toModule k G).left.obj { unop := SimplexCategory.mk 0 } = (forget₂ToModuleCat k G).X 0
⊢ (HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom.f 0 = 𝟙 ((forget₂ToModuleCat k G).X 0)

case h.e'_3
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
      (HomotopyEquiv.ofIso
              ((ChainComplex.single₀ (ModuleCat k)).mapIso
                (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
        0

tactic: trans (Finsupp.total _ _ _ fun _ => (1 : k)).comp ((ModuleCat.free k).map (terminal.from _))
state_before: case h.e'_3
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
      (HomotopyEquiv.ofIso
              ((ChainComplex.single₀ (ModuleCat k)).mapIso
                (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
        0
state_after: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ (ModuleCat.free k).map (terminal.from (Fin 1 → G))

k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ (ModuleCat.free k).map (terminal.from (Fin 1 → G)) =
    (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
      (HomotopyEquiv.ofIso
              ((ChainComplex.single₀ (ModuleCat k)).mapIso
                (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
        0

tactic: dsimp only [HomotopyEquiv.ofIso, compForgetAugmentedIso]
state_before: case h.e'_2.h.e'_6.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
e_4✝ : (compForgetAugmented.toModule k G).left.obj { unop := SimplexCategory.mk 0 } = (forget₂ToModuleCat k G).X 0
⊢ (HomotopyEquiv.ofIso (compForgetAugmentedIso k G).symm).hom.f 0 = 𝟙 ((forget₂ToModuleCat k G).X 0)
state_after: case h.e'_2.h.e'_6.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
e_4✝ : (compForgetAugmented.toModule k G).left.obj { unop := SimplexCategory.mk 0 } = (forget₂ToModuleCat k G).X 0
⊢ (eqToIso ⋯).symm.hom.f 0 = 𝟙 ((forget₂ToModuleCat k G).X 0)

tactic: simp only [Iso.symm_hom, eqToIso.inv, HomologicalComplex.eqToHom_f, eqToHom_refl]
state_before: case h.e'_2.h.e'_6.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
e_4✝ : (compForgetAugmented.toModule k G).left.obj { unop := SimplexCategory.mk 0 } = (forget₂ToModuleCat k G).X 0
⊢ (eqToIso ⋯).symm.hom.f 0 = 𝟙 ((forget₂ToModuleCat k G).X 0)
state_after: no goals

tactic: dsimp
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ (ModuleCat.free k).map (terminal.from (Fin 1 → G))
state_after: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ Finsupp.lmapDomain k k (terminal.from (Fin 1 → G))

tactic: 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,
  LinearMap.id_comp]
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) =
    (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ Finsupp.lmapDomain k k (terminal.from (Fin 1 → G))
state_after: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) = Finsupp.total (Fin 1 → G) k k fun x => 1

tactic: rfl
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (forget₂ (Rep k G) (ModuleCat k)).map (ε k G) = Finsupp.total (Fin 1 → G) k k fun x => 1
state_after: no goals

tactic: congr
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ (ModuleCat.free k).map (terminal.from (Fin 1 → G)) =
    (extraDegeneracyCompForgetAugmentedToModule k G).homotopyEquiv.hom.f 0 ≫
      (HomotopyEquiv.ofIso
              ((ChainComplex.single₀ (ModuleCat k)).mapIso
                (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
        0
state_after: case e_f
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) =
    (HomotopyEquiv.ofIso
            ((ChainComplex.single₀ (ModuleCat k)).mapIso
              (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
      0

case e_g.e_a
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ terminal.from (Fin 1 → G) = (compForgetAugmented G).hom.app { unop := SimplexCategory.mk 0 }

tactic: ext x
state_before: case e_f
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) =
    (HomotopyEquiv.ofIso
            ((ChainComplex.single₀ (ModuleCat k)).mapIso
              (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
      0
state_after: case e_f.h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
x : ⊤_ Type u
⊢ ((Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ Finsupp.lsingle x) 1 =
    ((HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
          0 ∘ₗ
        Finsupp.lsingle x)
      1

tactic: dsimp (config := { unfoldPartialApp := true }) [HomotopyEquiv.ofIso,
  Finsupp.LinearEquiv.finsuppUnique]
state_before: case e_f.h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
x : ⊤_ Type u
⊢ ((Finsupp.total (⊤_ Type u) k k fun x => 1) ∘ₗ Finsupp.lsingle x) 1 =
    ((HomotopyEquiv.ofIso
                ((ChainComplex.single₀ (ModuleCat k)).mapIso
                  (Finsupp.LinearEquiv.finsuppUnique k k (⊤_ Type u)).toModuleIso)).hom.f
          0 ∘ₗ
        Finsupp.lsingle x)
      1
state_after: case e_f.h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
x : ⊤_ Type u
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) (Finsupp.single x 1) =
    (((ChainComplex.single₀ (ModuleCat k)).map
            { toFun := (fun f => f default) ∘ ⇑Finsupp.equivFunOnFinite, map_add' := ⋯, map_smul' := ⋯ }).f
        0)
      (Finsupp.single x 1)

tactic: 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]
state_before: case e_f.h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
x : ⊤_ Type u
⊢ (Finsupp.total (⊤_ Type u) k k fun x => 1) (Finsupp.single x 1) =
    (((ChainComplex.single₀ (ModuleCat k)).map
            { toFun := (fun f => f default) ∘ ⇑Finsupp.equivFunOnFinite, map_add' := ⋯, map_smul' := ⋯ }).f
        0)
      (Finsupp.single x 1)
state_after: no goals

tactic: exact @Subsingleton.elim _ (@Unique.instSubsingleton _ (Limits.uniqueToTerminal _)) _ _
state_before: case e_g.e_a
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Monoid G
⊢ terminal.from (Fin 1 → G) = (compForgetAugmented G).hom.app { unop := SimplexCategory.mk 0 }
state_after: no goals