Theorem: pow_ne_of_irreducible_X_pow_sub_C
File: Mathlib/FieldTheory/KummerExtension.lean

tactic: have hn : n ≠ 0 := fun e ↦ not_irreducible_C
  (1 - a) (by simpa only [e, pow_zero, ← C.map_one, ← map_sub] using H)
state_before: K : Type u
inst✝ : Field K
n : ℕ
a : K
H : Irreducible (X ^ n - C a)
m : ℕ
hm : m ∣ n
hm' : m ≠ 1
b : K
⊢ b ^ m ≠ a
state_after: K : Type u
inst✝ : Field K
n : ℕ
a : K
H : Irreducible (X ^ n - C a)
m : ℕ
hm : m ∣ n
hm' : m ≠ 1
b : K
hn : n ≠ 0
⊢ b ^ m ≠ a

tactic: obtain ⟨k, rfl⟩ := hm
state_before: K : Type u
inst✝ : Field K
n : ℕ
a : K
H : Irreducible (X ^ n - C a)
m : ℕ
hm : m ∣ n
hm' : m ≠ 1
b : K
hn : n ≠ 0
⊢ b ^ m ≠ a
state_after: case intro
K : Type u
inst✝ : Field K
a : K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
H : Irreducible (X ^ (m * k) - C a)
hn : m * k ≠ 0
⊢ b ^ m ≠ a

tactic: rintro rfl
state_before: case intro
K : Type u
inst✝ : Field K
a : K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
H : Irreducible (X ^ (m * k) - C a)
hn : m * k ≠ 0
⊢ b ^ m ≠ a
state_after: case intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
H : Irreducible (X ^ (m * k) - C (b ^ m))
⊢ False

tactic: obtain ⟨q, hq⟩ := sub_dvd_pow_sub_pow (X ^ k) (C b) m
state_before: case intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
H : Irreducible (X ^ (m * k) - C (b ^ m))
⊢ False
state_after: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
H : Irreducible (X ^ (m * k) - C (b ^ m))
q : K[X]
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
⊢ False

tactic: rw [mul_comm, pow_mul, map_pow, hq] at H
state_before: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
H : Irreducible (X ^ (m * k) - C (b ^ m))
q : K[X]
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
⊢ False
state_after: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
⊢ False

tactic: have : degree q = 0 := by
  simpa [isUnit_iff_degree_eq_zero, degree_X_pow_sub_C,
    Nat.pos_iff_ne_zero, (mul_ne_zero_iff.mp hn).2] using H.2 _ q rfl
state_before: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
⊢ False
state_after: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
this : q.degree = 0
⊢ False

tactic: apply_fun degree at hq
state_before: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
this : q.degree = 0
⊢ False
state_after: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
this : q.degree = 0
hq : ((X ^ k) ^ m - C b ^ m).degree = ((X ^ k - C b) * q).degree
⊢ False

tactic: simp only [this, ← pow_mul, mul_comm k m, degree_X_pow_sub_C, Nat.pos_iff_ne_zero.mpr hn,
  Nat.pos_iff_ne_zero.mpr (mul_ne_zero_iff.mp hn).2, degree_mul, ← map_pow, add_zero,
  Nat.cast_injective.eq_iff] at hq
state_before: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
this : q.degree = 0
hq : ((X ^ k) ^ m - C b ^ m).degree = ((X ^ k - C b) * q).degree
⊢ False
state_after: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
this : q.degree = 0
hq : m * k = k
⊢ False

tactic: exact hm' ((mul_eq_right₀ (mul_ne_zero_iff.mp hn).2).mp hq)
state_before: case intro.intro
K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
this : q.degree = 0
hq : m * k = k
⊢ False
state_after: no goals

tactic: simpa only [e, pow_zero, ← C.map_one, ← map_sub] using H
state_before: K : Type u
inst✝ : Field K
n : ℕ
a : K
H : Irreducible (X ^ n - C a)
m : ℕ
hm : m ∣ n
hm' : m ≠ 1
b : K
e : n = 0
⊢ Irreducible (C (1 - a))
state_after: no goals

tactic: simpa [isUnit_iff_degree_eq_zero, degree_X_pow_sub_C,
  Nat.pos_iff_ne_zero, (mul_ne_zero_iff.mp hn).2] using H.2 _ q rfl
state_before: K : Type u
inst✝ : Field K
m : ℕ
hm' : m ≠ 1
b : K
k : ℕ
hn : m * k ≠ 0
q : K[X]
H : Irreducible ((X ^ k - C b) * q)
hq : (X ^ k) ^ m - C b ^ m = (X ^ k - C b) * q
⊢ q.degree = 0
state_after: no goals