Theorem: Subgroup.commutator_pi_pi_of_finite
File: Mathlib/GroupTheory/Commutator.lean

tactic: apply le_antisymm (commutator_pi_pi_le H K)
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
⊢ ⁅pi Set.univ H, pi Set.univ K⁆ = pi Set.univ fun i => ⁅H i, K i⁆
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
⊢ (pi Set.univ fun i => ⁅H i, K i⁆) ≤ ⁅pi Set.univ H, pi Set.univ K⁆

tactic: rw [pi_le_iff]
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
⊢ (pi Set.univ fun i => ⁅H i, K i⁆) ≤ ⁅pi Set.univ H, pi Set.univ K⁆
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
⊢ ∀ (i : η), map (MonoidHom.mulSingle Gs i) ⁅H i, K i⁆ ≤ ⁅pi Set.univ H, pi Set.univ K⁆

tactic: intro i hi
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
⊢ ∀ (i : η), map (MonoidHom.mulSingle Gs i) ⁅H i, K i⁆ ≤ ⁅pi Set.univ H, pi Set.univ K⁆
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ hi ∈ map (MonoidHom.mulSingle Gs i) ⁅H i, K i⁆ → hi ∈ ⁅pi Set.univ H, pi Set.univ K⁆

tactic: rw [map_commutator]
state_before: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ hi ∈ map (MonoidHom.mulSingle Gs i) ⁅H i, K i⁆ → hi ∈ ⁅pi Set.univ H, pi Set.univ K⁆
state_after: G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ hi ∈ ⁅map (MonoidHom.mulSingle Gs i) (H i), map (MonoidHom.mulSingle Gs i) (K i)⁆ →
    hi ∈ ⁅pi Set.univ H, pi Set.univ K⁆

tactic: rw [le_pi_iff]
state_before: case h₂
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ map (MonoidHom.mulSingle Gs i) (K i) ≤ pi Set.univ K
state_after: case h₂
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ ∀ i_1 ∈ Set.univ, map (Pi.evalMonoidHom Gs i_1) (map (MonoidHom.mulSingle Gs i) (K i)) ≤ K i_1

tactic: intro j _hj
state_before: case h₂
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
⊢ ∀ i_1 ∈ Set.univ, map (Pi.evalMonoidHom Gs i_1) (map (MonoidHom.mulSingle Gs i) (K i)) ≤ K i_1
state_after: case h₂
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
⊢ map (Pi.evalMonoidHom Gs j) (map (MonoidHom.mulSingle Gs i) (K i)) ≤ K j

tactic: rintro _ ⟨_, ⟨x, hx, rfl⟩, rfl⟩
state_before: case h₂
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
⊢ map (Pi.evalMonoidHom Gs j) (map (MonoidHom.mulSingle Gs i) (K i)) ≤ K j
state_after: case h₂.intro.intro.intro.intro
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j

tactic: by_cases h : j = i
state_before: case h₂.intro.intro.intro.intro
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j
state_after: case pos
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
h : j = i
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j

case neg
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
h : ¬j = i
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j

tactic: subst h
state_before: case pos
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
h : j = i
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j
state_after: case pos
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs j
hx : x ∈ ↑(K j)
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs j) x) ∈ K j

tactic: simpa using hx
state_before: case pos
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs j
hx : x ∈ ↑(K j)
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs j) x) ∈ K j
state_after: no goals

tactic: simp [h, one_mem]
state_before: case neg
G : Type u_1
G' : Type u_2
F : Type u_3
inst✝⁵ : Group G
inst✝⁴ : Group G'
inst✝³ : FunLike F G G'
inst✝² : MonoidHomClass F G G'
f : F
g₁ g₂ g₃ g : G
H₁ H₂ H₃ K₁ K₂ : Subgroup G
η : Type u_4
inst✝¹ : Finite η
Gs : η → Type u_5
inst✝ : (i : η) → Group (Gs i)
H K : (i : η) → Subgroup (Gs i)
i : η
hi : (i : η) → Gs i
j : η
_hj : j ∈ Set.univ
x : Gs i
hx : x ∈ ↑(K i)
h : ¬j = i
⊢ (Pi.evalMonoidHom Gs j) ((MonoidHom.mulSingle Gs i) x) ∈ K j
state_after: no goals