Theorem: groupCohomology.dTwo_comp_eq
File: Mathlib/RepresentationTheory/GroupCohomology/LowDegree.lean

Proof steps:
state_before: k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
⊢ dTwo A ∘ₗ ↑(twoCochainsLequiv A) = ↑(threeCochainsLequiv A) ∘ₗ (inhomogeneousCochains A).d 2 3
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (dTwo A ∘ₗ ↑(twoCochainsLequiv A)) x y = (↑(threeCochainsLequiv A) ∘ₗ (inhomogeneousCochains A).d 2 3) x y
tactic: ext x y
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (dTwo A ∘ₗ ↑(twoCochainsLequiv A)) x y = (↑(threeCochainsLequiv A) ∘ₗ (inhomogeneousCochains A).d 2 3) x y
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x ((piFinTwoEquiv fun x => G).symm (y.2.1, y.2.2))) -
          x ((piFinTwoEquiv fun x => G).symm (y.1 * y.2.1, y.2.2)) +
        x ((piFinTwoEquiv fun x => G).symm (y.1, y.2.1 * y.2.2)) -
      x ((piFinTwoEquiv fun x => G).symm (y.1, y.2.1)) =
    (A.ρ (((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y 0))
        (x fun i => ((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y i.succ) +
      ∑ j : Fin (2 + 1),
        (-1) ^ (↑j + 1) •
          x
            (j.contractNth (fun x x_1 => x * x_1)
              (((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y))
tactic: show A.ρ y.1 (x _) - x _ + x _ - x _ = _ + _
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x ((piFinTwoEquiv fun x => G).symm (y.2.1, y.2.2))) -
          x ((piFinTwoEquiv fun x => G).symm (y.1 * y.2.1, y.2.2)) +
        x ((piFinTwoEquiv fun x => G).symm (y.1, y.2.1 * y.2.2)) -
      x ((piFinTwoEquiv fun x => G).symm (y.1, y.2.1)) =
    (A.ρ (((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y 0))
        (x fun i => ((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y i.succ) +
      ∑ j : Fin (2 + 1),
        (-1) ^ (↑j + 1) •
          x
            (j.contractNth (fun x x_1 => x * x_1)
              (((Equiv.piFinSucc 2 G).trans ((Equiv.refl G).prodCongr (piFinTwoEquiv fun x => G))).symm y))
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) -
          x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) -
      x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      ∑ j : Fin 3,
        (-1) ^ (↑j + 1) •
          x
            (j.contractNth (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y)))
tactic: dsimp
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) -
          x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) -
      x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      ∑ j : Fin 3,
        (-1) ^ (↑j + 1) •
          x
            (j.contractNth (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y)))
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) -
          x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) -
      x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      ((-1) ^ (↑0 + 1) •
            x
              (Fin.contractNth 0 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
          (-1) ^ (↑1 + 1) •
            x
              (Fin.contractNth 1 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
        (-1) ^ (↑2 + 1) •
          x
            (Fin.contractNth 2 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))))
tactic: rw [Fin.sum_univ_three]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) -
          x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) -
      x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      ((-1) ^ (↑0 + 1) •
            x
              (Fin.contractNth 0 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
          (-1) ^ (↑1 + 1) •
            x
              (Fin.contractNth 1 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
        (-1) ^ (↑2 + 1) •
          x
            (Fin.contractNth 2 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))))
state_after: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) +
      (-x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        (x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) + -x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)))) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      (-x
            (Fin.contractNth 0 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
        (x
            (Fin.contractNth 1 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
          -x
              (Fin.contractNth 2 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y)))))
tactic: simp only [sub_eq_add_neg, add_assoc, Fin.val_zero, zero_add, pow_one, neg_smul,
    one_smul, Fin.val_one, Fin.val_two, pow_succ' (-1 : k) 2, neg_sq, Nat.one_add, one_pow, mul_one]
state_before: case h.h
k G : Type u
inst✝¹ : CommRing k
inst✝ : Group G
A : Rep k G
x : ↑((inhomogeneousCochains A).X 2)
y : G × G × G
⊢ (A.ρ y.1) (x (Fin.cons y.2.1 (Fin.cons y.2.2 finZeroElim))) +
      (-x (Fin.cons (y.1 * y.2.1) (Fin.cons y.2.2 finZeroElim)) +
        (x (Fin.cons y.1 (Fin.cons (y.2.1 * y.2.2) finZeroElim)) + -x (Fin.cons y.1 (Fin.cons y.2.1 finZeroElim)))) =
    (A.ρ ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) 0))
        (x fun i =>
          (Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y) i.succ) +
      (-x
            (Fin.contractNth 0 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
        (x
            (Fin.contractNth 1 (fun x x_1 => x * x_1)
              ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y))) +
          -x
              (Fin.contractNth 2 (fun x x_1 => x * x_1)
                ((Equiv.piFinSucc 2 G).symm (Prod.map id (fun p => Fin.cons p.1 (Fin.cons p.2 finZeroElim)) y)))))
state_after: no goals
tactic: rcongr i <;> fin_cases i <;> rfl