Theorem: inhomogeneousCochains.d_eq
File: Mathlib/RepresentationTheory/GroupCohomology/Basic.lean

tactic: ext f g
state_before: k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
⊢ d n A =
    (diagonalHomEquiv n A).toModuleIso.inv ≫
      (linearYonedaObjResolution A).d n (n + 1) ≫ (diagonalHomEquiv (n + 1) A).toModuleIso.hom
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ((diagonalHomEquiv n A).toModuleIso.inv ≫
        (linearYonedaObjResolution A).d n (n + 1) ≫ (diagonalHomEquiv (n + 1) A).toModuleIso.hom)
      f g

tactic: change d n A f g = diagonalHomEquiv (n + 1) A
  ((resolution k G).d (n + 1) n ≫ (diagonalHomEquiv n A).symm f) g
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ((diagonalHomEquiv n A).toModuleIso.inv ≫
        (linearYonedaObjResolution A).d n (n + 1) ≫ (diagonalHomEquiv (n + 1) A).toModuleIso.hom)
      f g
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g = (diagonalHomEquiv (n + 1) A) ((resolution k G).d (n + 1) n ≫ (diagonalHomEquiv n A).symm f) g

tactic: erw [diagonalHomEquiv_apply, Action.comp_hom, ModuleCat.comp_def, LinearMap.comp_apply,
  resolution.d_eq]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g = (diagonalHomEquiv (n + 1) A) ((resolution k G).d (n + 1) n ≫ (diagonalHomEquiv n A).symm f) g
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g = ((diagonalHomEquiv n A).symm f).hom ((resolution.d k G (n + 1)) (Finsupp.single (Fin.partialProd g) 1))

tactic: erw [resolution.d_of (Fin.partialProd g)]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g = ((diagonalHomEquiv n A).symm f).hom ((resolution.d k G (n + 1)) (Finsupp.single (Fin.partialProd g) 1))
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ((diagonalHomEquiv n A).symm f).hom
      (∑ p : Fin (n + 1 + 1), Finsupp.single (Fin.partialProd g ∘ p.succAbove) ((-1) ^ ↑p))

tactic: simp only [map_sum, ← Finsupp.smul_single_one _ ((-1 : k) ^ _)]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ((diagonalHomEquiv n A).symm f).hom
      (∑ p : Fin (n + 1 + 1), Finsupp.single (Fin.partialProd g ∘ p.succAbove) ((-1) ^ ↑p))
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ∑ x : Fin (n + 1 + 1),
      ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑x • Finsupp.single (Fin.partialProd g ∘ x.succAbove) 1)

tactic: erw [d_apply, @Fin.sum_univ_succ _ _ (n + 1), Fin.val_zero, pow_zero, one_smul,
  Fin.succAbove_zero, diagonalHomEquiv_symm_apply f (Fin.partialProd g ∘ @Fin.succ (n + 1))]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (d n A) f g =
    ∑ x : Fin (n + 1 + 1),
      ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑x • Finsupp.single (Fin.partialProd g ∘ x.succAbove) 1)
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (A.ρ (g 0)) (f fun i => g i.succ) + ∑ j : Fin (n + 1), (-1) ^ (↑j + 1) • f (j.contractNth (fun x x_1 => x * x_1) g) =
    (A.ρ ((Fin.partialProd g ∘ Fin.succ) 0))
        (f fun i => ((Fin.partialProd g ∘ Fin.succ) i.castSucc)⁻¹ * (Fin.partialProd g ∘ Fin.succ) i.succ) +
      ∑ i : Fin (n + 1),
        ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑i.succ • Finsupp.single (Fin.partialProd g ∘ i.succ.succAbove) 1)

tactic: simp_rw [Function.comp_apply, Fin.partialProd_succ, Fin.castSucc_zero,
  Fin.partialProd_zero, one_mul]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (A.ρ (g 0)) (f fun i => g i.succ) + ∑ j : Fin (n + 1), (-1) ^ (↑j + 1) • f (j.contractNth (fun x x_1 => x * x_1) g) =
    (A.ρ ((Fin.partialProd g ∘ Fin.succ) 0))
        (f fun i => ((Fin.partialProd g ∘ Fin.succ) i.castSucc)⁻¹ * (Fin.partialProd g ∘ Fin.succ) i.succ) +
      ∑ i : Fin (n + 1),
        ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑i.succ • Finsupp.single (Fin.partialProd g ∘ i.succ.succAbove) 1)
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (A.ρ (g 0)) (f fun i => g i.succ) + ∑ j : Fin (n + 1), (-1) ^ (↑j + 1) • f (j.contractNth (fun x x_1 => x * x_1) g) =
    (A.ρ (g 0))
        (f fun i =>
          (Fin.partialProd g i.castSucc.castSucc * g i.castSucc)⁻¹ * (Fin.partialProd g i.succ.castSucc * g i.succ)) +
      ∑ i : Fin (n + 1),
        ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑i.succ • Finsupp.single (Fin.partialProd g ∘ i.succ.succAbove) 1)

tactic: rcongr x
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
⊢ (A.ρ (g 0)) (f fun i => g i.succ) + ∑ j : Fin (n + 1), (-1) ^ (↑j + 1) • f (j.contractNth (fun x x_1 => x * x_1) g) =
    (A.ρ (g 0))
        (f fun i =>
          (Fin.partialProd g i.castSucc.castSucc * g i.castSucc)⁻¹ * (Fin.partialProd g i.succ.castSucc * g i.succ)) +
      ∑ i : Fin (n + 1),
        ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑i.succ • Finsupp.single (Fin.partialProd g ∘ i.succ.succAbove) 1)
state_after: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
⊢ g x.succ = (Fin.partialProd g x.castSucc.castSucc * g x.castSucc)⁻¹ * (Fin.partialProd g x.succ.castSucc * g x.succ)

case h.h.e_a.e_f.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin (n + 1)
⊢ (-1) ^ (↑x + 1) • f (x.contractNth (fun x x_1 => x * x_1) g) =
    ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑x.succ • Finsupp.single (Fin.partialProd g ∘ x.succ.succAbove) 1)

tactic: have := Fin.partialProd_right_inv g (Fin.castSucc x)
state_before: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
⊢ g x.succ = (Fin.partialProd g x.castSucc.castSucc * g x.castSucc)⁻¹ * (Fin.partialProd g x.succ.castSucc * g x.succ)
state_after: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
this : (Fin.partialProd g x.castSucc.castSucc)⁻¹ * Fin.partialProd g x.castSucc.succ = g x.castSucc
⊢ g x.succ = (Fin.partialProd g x.castSucc.castSucc * g x.castSucc)⁻¹ * (Fin.partialProd g x.succ.castSucc * g x.succ)

tactic: simp only [mul_inv_rev, Fin.castSucc_fin_succ] at this ⊢
state_before: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
this : (Fin.partialProd g x.castSucc.castSucc)⁻¹ * Fin.partialProd g x.castSucc.succ = g x.castSucc
⊢ g x.succ = (Fin.partialProd g x.castSucc.castSucc * g x.castSucc)⁻¹ * (Fin.partialProd g x.succ.castSucc * g x.succ)
state_after: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
this : (Fin.partialProd g x.castSucc.castSucc)⁻¹ * Fin.partialProd g x.castSucc.succ = g x.castSucc
⊢ g x.succ =
    (g x.castSucc)⁻¹ * (Fin.partialProd g x.castSucc.castSucc)⁻¹ * (Fin.partialProd g x.castSucc.succ * g x.succ)

tactic: rw [mul_assoc, ← mul_assoc _ _ (g x.succ), this, inv_mul_cancel_left]
state_before: case h.h.e_a.h.e_6.h.e_a.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin n
this : (Fin.partialProd g x.castSucc.castSucc)⁻¹ * Fin.partialProd g x.castSucc.succ = g x.castSucc
⊢ g x.succ =
    (g x.castSucc)⁻¹ * (Fin.partialProd g x.castSucc.castSucc)⁻¹ * (Fin.partialProd g x.castSucc.succ * g x.succ)
state_after: no goals

tactic: erw [map_smul, diagonalHomEquiv_symm_partialProd_succ, Fin.val_succ]
state_before: case h.h.e_a.e_f.h
k G : Type u
inst✝¹ : CommRing k
n : ℕ
inst✝ : Group G
A : Rep k G
f : (Fin n → G) → CoeSort.coe A
g : Fin (n + 1) → G
x : Fin (n + 1)
⊢ (-1) ^ (↑x + 1) • f (x.contractNth (fun x x_1 => x * x_1) g) =
    ((diagonalHomEquiv n A).symm f).hom ((-1) ^ ↑x.succ • Finsupp.single (Fin.partialProd g ∘ x.succ.succAbove) 1)
state_after: no goals