Theorem: ComplexShape.instTotalComplexShapeSymmetryIntUp_σ
File: Mathlib/Algebra/Homology/ComplexShapeSigns.lean

Proof steps:
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
⊢ ∀ {i₁ i₁' : ℤ},
    (up ℤ).Rel i₁ i₁' →
      ∀ (i₂ : ℤ),
        (fun p q => (p * q).negOnePow) i₁ i₂ * (up ℤ).ε₁ (up ℤ) (up ℤ) (i₁, i₂) =
          (up ℤ).ε₂ (up ℤ) (up ℤ) (i₂, i₁) * (fun p q => (p * q).negOnePow) i₁' i₂
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (fun p q => (p * q).negOnePow) p q * (up ℤ).ε₁ (up ℤ) (up ℤ) (p, q) =
    (up ℤ).ε₂ (up ℤ) (up ℤ) (q, p) * (fun p q => (p * q).negOnePow) (p + 1) q
tactic: rintro p _ rfl q
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (fun p q => (p * q).negOnePow) p q * (up ℤ).ε₁ (up ℤ) (up ℤ) (p, q) =
    (up ℤ).ε₂ (up ℤ) (up ℤ) (q, p) * (fun p q => (p * q).negOnePow) (p + 1) q
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (p * q).negOnePow * 1 = q.negOnePow * ((p + 1) * q).negOnePow
tactic: dsimp
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (p * q).negOnePow * 1 = q.negOnePow * ((p + 1) * q).negOnePow
state_after: no goals
tactic: rw [mul_one, ← Int.negOnePow_add, add_comm q, add_mul, one_mul, Int.negOnePow_add,
      Int.negOnePow_add, mul_assoc, Int.units_mul_self, mul_one]
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
⊢ ∀ (i₁ : ℤ) {i₂ i₂' : ℤ},
    (up ℤ).Rel i₂ i₂' →
      (fun p q => (p * q).negOnePow) i₁ i₂ * (up ℤ).ε₂ (up ℤ) (up ℤ) (i₁, i₂) =
        (up ℤ).ε₁ (up ℤ) (up ℤ) (i₂, i₁) * (fun p q => (p * q).negOnePow) i₁ i₂'
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (fun p q => (p * q).negOnePow) p q * (up ℤ).ε₂ (up ℤ) (up ℤ) (p, q) =
    (up ℤ).ε₁ (up ℤ) (up ℤ) (q, p) * (fun p q => (p * q).negOnePow) p (q + 1)
tactic: rintro p q _ rfl
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (fun p q => (p * q).negOnePow) p q * (up ℤ).ε₂ (up ℤ) (up ℤ) (p, q) =
    (up ℤ).ε₁ (up ℤ) (up ℤ) (q, p) * (fun p q => (p * q).negOnePow) p (q + 1)
state_after: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (p * q).negOnePow * p.negOnePow = 1 * (p * (q + 1)).negOnePow
tactic: dsimp
state_before: I₁ : Type u_1
I₂ : Type u_2
I₁₂ : Type u_3
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
c₁₂ : ComplexShape I₁₂
inst✝² : TotalComplexShape c₁ c₂ c₁₂
inst✝¹ : TotalComplexShape c₂ c₁ c₁₂
inst✝ : TotalComplexShapeSymmetry c₁ c₂ c₁₂
p q : ℤ
⊢ (p * q).negOnePow * p.negOnePow = 1 * (p * (q + 1)).negOnePow
state_after: no goals
tactic: rw [one_mul, ← Int.negOnePow_add, mul_add, mul_one]