Theorem: Sylow.conj_eq_normalizer_conj_of_mem_centralizer
File: Mathlib/GroupTheory/Sylow.lean

tactic: have h1 : ↑P ≤ (zpowers x).centralizer := by rwa [le_centralizer_iff, zpowers_le]
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
⊢ ∃ n, n ∈ normalizer ↑P ∧ g⁻¹ * x * g = n⁻¹ * x * n

tactic: have h2 : ↑(g • P) ≤ (zpowers x).centralizer := by
  rw [le_centralizer_iff, zpowers_le]
  rintro - ⟨z, hz, rfl⟩
  specialize hy z hz
  rwa [← mul_assoc, ← eq_mul_inv_iff_mul_eq, mul_assoc, mul_assoc, mul_assoc, ← mul_assoc,
    eq_inv_mul_iff_mul_eq, ← mul_assoc, ← mul_assoc] at hy
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
⊢ ∃ n, n ∈ normalizer ↑P ∧ g⁻¹ * x * g = n⁻¹ * x * n

tactic: obtain ⟨h, hh⟩ := exists_smul_eq (zpowers x).centralizer ((g • P).subtype h2) (P.subtype h1)
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
h2 : ↑(g • P) ≤ centralizer (zpowers x)
⊢ ∃ n, n ∈ normalizer ↑P ∧ g⁻¹ * x * g = n⁻¹ * x * n

tactic: simp_rw [Sylow.smul_subtype, Subgroup.smul_def, smul_smul] at hh
state_before: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
h2 : ↑(g • P) ≤ centralizer (zpowers x)
h : { x_1 // x_1 ∈ centralizer (zpowers x) }
hh : h • Sylow.subtype (g • P) h2 = Sylow.subtype P h1
⊢ ∃ n, n ∈ normalizer ↑P ∧ g⁻¹ * x * g = n⁻¹ * x * n

tactic: refine' ⟨h * g, Sylow.smul_eq_iff_mem_normalizer.mp (Sylow.subtype_injective hh), _⟩
state_before: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
h2 : ↑(g • P) ≤ centralizer (zpowers x)
h : { x_1 // x_1 ∈ centralizer (zpowers x) }
hh : Sylow.subtype ((↑h * g) • P) (_ : ↑((↑h * g) • P) ≤ centralizer (zpowers x)) = Sylow.subtype P h1
⊢ ∃ n, n ∈ normalizer ↑P ∧ g⁻¹ * x * g = n⁻¹ * x * n

tactic: rw [← mul_assoc, Commute.right_comm (h.prop x (mem_zpowers x)), mul_inv_rev, inv_mul_cancel_right]
state_before: case intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
h2 : ↑(g • P) ≤ centralizer (zpowers x)
h : { x_1 // x_1 ∈ centralizer (zpowers x) }
hh : Sylow.subtype ((↑h * g) • P) (_ : ↑((↑h * g) • P) ≤ centralizer (zpowers x)) = Sylow.subtype P h1
⊢ g⁻¹ * x * g = (↑h * g)⁻¹ * x * (↑h * g)

tactic: rwa [le_centralizer_iff, zpowers_le]
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
⊢ ↑P ≤ centralizer (zpowers x)

tactic: rw [le_centralizer_iff, zpowers_le]
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
⊢ ↑(g • P) ≤ centralizer (zpowers x)

tactic: rintro - ⟨z, hz, rfl⟩
state_before: p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
⊢ x ∈ centralizer ↑(g • P)

tactic: specialize hy z hz
state_before: case intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
hy : g⁻¹ * x * g ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
z : G
hz : z ∈ ↑↑P
⊢ ↑(↑(MulDistribMulAction.toMonoidEnd (MulAut G) G) (↑MulAut.conj g)) z * x =
    x * ↑(↑(MulDistribMulAction.toMonoidEnd (MulAut G) G) (↑MulAut.conj g)) z

tactic: rwa [← mul_assoc, ← eq_mul_inv_iff_mul_eq, mul_assoc, mul_assoc, mul_assoc, ← mul_assoc,
  eq_inv_mul_iff_mul_eq, ← mul_assoc, ← mul_assoc] at hy
state_before: case intro.intro
p : ℕ
G : Type u_1
inst✝² : Group G
inst✝¹ : Fact (Nat.Prime p)
inst✝ : Finite (Sylow p G)
P : Sylow p G
x g : G
hx : x ∈ centralizer ↑P
h1 : ↑P ≤ centralizer (zpowers x)
z : G
hz : z ∈ ↑↑P
hy : z * (g⁻¹ * x * g) = g⁻¹ * x * g * z
⊢ ↑(↑(MulDistribMulAction.toMonoidEnd (MulAut G) G) (↑MulAut.conj g)) z * x =
    x * ↑(↑(MulDistribMulAction.toMonoidEnd (MulAut G) G) (↑MulAut.conj g)) z