Theorem: Equiv.Perm.fin_5_not_solvable
File: Mathlib/GroupTheory/Solvable.lean

tactic: let x : Equiv.Perm (Fin 5) := ⟨![1, 2, 0, 3, 4], ![2, 0, 1, 3, 4], by decide, by decide⟩
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
⊢ ¬IsSolvable (Perm (Fin 5))

tactic: let y : Equiv.Perm (Fin 5) := ⟨![3, 4, 2, 0, 1], ![3, 4, 2, 0, 1], by decide, by decide⟩
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
⊢ ¬IsSolvable (Perm (Fin 5))

tactic: let z : Equiv.Perm (Fin 5) := ⟨![0, 3, 2, 1, 4], ![0, 3, 2, 1, 4], by decide, by decide⟩
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
⊢ ¬IsSolvable (Perm (Fin 5))

tactic: have key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹ := by decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
⊢ ¬IsSolvable (Perm (Fin 5))

tactic: refine' not_solvable_of_mem_derivedSeries (show x ≠ 1 by decide) fun n => _
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
⊢ ¬IsSolvable (Perm (Fin 5))

tactic: induction' n with n ih
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
n : ℕ
⊢ x ∈ derivedSeries (Perm (Fin 5)) n

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
⊢ Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
⊢ Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
⊢ Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
⊢ Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
⊢ Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
⊢ Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
⊢ x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹

tactic: decide
state_before: G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
⊢ x ≠ 1

tactic: exact mem_top x
state_before: case zero
G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
⊢ x ∈ derivedSeries (Perm (Fin 5)) Nat.zero

tactic: rw [key, (derivedSeries_normal _ _).mem_comm_iff, inv_mul_cancel_left]
state_before: case succ
G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
n : ℕ
ih : x ∈ derivedSeries (Perm (Fin 5)) n
⊢ x ∈ derivedSeries (Perm (Fin 5)) (Nat.succ n)

tactic: exact commutator_mem_commutator ih ((derivedSeries_normal _ _).conj_mem _ ih _)
state_before: case succ
G : Type ?u.88563
G' : Type ?u.88566
inst✝¹ : Group G
inst✝ : Group G'
f : G →* G'
x : Perm (Fin 5) :=
  { toFun := ![1, 2, 0, 3, 4], invFun := ![2, 0, 1, 3, 4],
    left_inv := (_ : Function.LeftInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]),
    right_inv := (_ : Function.RightInverse ![2, 0, 1, 3, 4] ![1, 2, 0, 3, 4]) }
y : Perm (Fin 5) :=
  { toFun := ![3, 4, 2, 0, 1], invFun := ![3, 4, 2, 0, 1],
    left_inv := (_ : Function.LeftInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]),
    right_inv := (_ : Function.RightInverse ![3, 4, 2, 0, 1] ![3, 4, 2, 0, 1]) }
z : Perm (Fin 5) :=
  { toFun := ![0, 3, 2, 1, 4], invFun := ![0, 3, 2, 1, 4],
    left_inv := (_ : Function.LeftInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]),
    right_inv := (_ : Function.RightInverse ![0, 3, 2, 1, 4] ![0, 3, 2, 1, 4]) }
key : x = z * ⁅x, y * x * y⁻¹⁆ * z⁻¹
n : ℕ
ih : x ∈ derivedSeries (Perm (Fin 5)) n
⊢ ⁅x, y * x * y⁻¹⁆ ∈ derivedSeries (Perm (Fin 5)) (Nat.succ n)