Theorem: HomotopyGroup.auxGroup_indep
File: Mathlib/Topology/Homotopy/HomotopyGroup.lean

tactic: by_cases h : i = j
state_before: N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
⊢ auxGroup i = auxGroup j
state_after: case pos
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : i = j
⊢ auxGroup i = auxGroup j

case neg
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
⊢ auxGroup i = auxGroup j

tactic: refine Group.ext (EckmannHilton.mul (isUnital_auxGroup i) (isUnital_auxGroup j) ?_)
state_before: case neg
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
⊢ auxGroup i = auxGroup j
state_after: case neg
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
⊢ ∀ (a b c d : HomotopyGroup N X x), Mul.mul (Mul.mul a b) (Mul.mul c d) = Mul.mul (Mul.mul a c) (Mul.mul b d)

tactic: rintro ⟨a⟩ ⟨b⟩ ⟨c⟩ ⟨d⟩
state_before: case neg
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
⊢ ∀ (a b c d : HomotopyGroup N X x), Mul.mul (Mul.mul a b) (Mul.mul c d) = Mul.mul (Mul.mul a c) (Mul.mul b d)
state_after: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r b)) (Mul.mul (Quot.mk Setoid.r c) (Quot.mk Setoid.r d)) =
    Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r c)) (Mul.mul (Quot.mk Setoid.r b) (Quot.mk Setoid.r d))

tactic: change Quotient.mk' _ = _
state_before: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r b)) (Mul.mul (Quot.mk Setoid.r c) (Quot.mk Setoid.r d)) =
    Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r c)) (Mul.mul (Quot.mk Setoid.r b) (Quot.mk Setoid.r d))
state_after: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ Quotient.mk'
      ((loopHomeo i).symm
        (Path.trans
          ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv d) ((loopHomeo j).toEquiv c))))
          ((loopHomeo i).toEquiv
            ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv b) ((loopHomeo j).toEquiv a)))))) =
    Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r c)) (Mul.mul (Quot.mk Setoid.r b) (Quot.mk Setoid.r d))

tactic: apply congr_arg Quotient.mk'
state_before: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ Quotient.mk'
      ((loopHomeo i).symm
        (Path.trans
          ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv d) ((loopHomeo j).toEquiv c))))
          ((loopHomeo i).toEquiv
            ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv b) ((loopHomeo j).toEquiv a)))))) =
    Mul.mul (Mul.mul (Quot.mk Setoid.r a) (Quot.mk Setoid.r c)) (Mul.mul (Quot.mk Setoid.r b) (Quot.mk Setoid.r d))
state_after: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ (loopHomeo i).symm
      (Path.trans
        ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv d) ((loopHomeo j).toEquiv c))))
        ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv b) ((loopHomeo j).toEquiv a))))) =
    (loopHomeo j).symm
      (Path.trans
        ((loopHomeo j).toEquiv ((loopHomeo i).symm (Path.trans ((loopHomeo i).toEquiv d) ((loopHomeo i).toEquiv b))))
        ((loopHomeo j).toEquiv ((loopHomeo i).symm (Path.trans ((loopHomeo i).toEquiv c) ((loopHomeo i).toEquiv a)))))

tactic: simp only [fromLoop_trans_toLoop, transAt_distrib h, coe_toEquiv, loopHomeo_apply,
  coe_symm_toEquiv, loopHomeo_symm_apply]
state_before: case neg.mk.mk.mk.mk
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : ¬i = j
a✝ : HomotopyGroup N X x
a : ↑(Ω^ N X x)
b✝ : HomotopyGroup N X x
b : ↑(Ω^ N X x)
c✝ : HomotopyGroup N X x
c : ↑(Ω^ N X x)
d✝ : HomotopyGroup N X x
d : ↑(Ω^ N X x)
⊢ (loopHomeo i).symm
      (Path.trans
        ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv d) ((loopHomeo j).toEquiv c))))
        ((loopHomeo i).toEquiv ((loopHomeo j).symm (Path.trans ((loopHomeo j).toEquiv b) ((loopHomeo j).toEquiv a))))) =
    (loopHomeo j).symm
      (Path.trans
        ((loopHomeo j).toEquiv ((loopHomeo i).symm (Path.trans ((loopHomeo i).toEquiv d) ((loopHomeo i).toEquiv b))))
        ((loopHomeo j).toEquiv ((loopHomeo i).symm (Path.trans ((loopHomeo i).toEquiv c) ((loopHomeo i).toEquiv a)))))
state_after: no goals

tactic: rw [h]
state_before: case pos
N : Type u_1
X : Type u_2
inst✝¹ : TopologicalSpace X
x : X
inst✝ : DecidableEq N
i j : N
h : i = j
⊢ auxGroup i = auxGroup j
state_after: no goals