Theorem: IsPrimitiveRoot.neZero'
File: Mathlib/RingTheory/RootsOfUnity/Basic.lean

tactic: let p := ringChar R
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
⊢ NeZero ↑↑n
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
⊢ NeZero ↑↑n

tactic: have hfin := multiplicity.finite_nat_iff.2 ⟨CharP.char_ne_one R p, n.pos⟩
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
⊢ NeZero ↑↑n
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
⊢ NeZero ↑↑n

tactic: obtain ⟨m, hm⟩ := multiplicity.exists_eq_pow_mul_and_not_dvd hfin
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
⊢ NeZero ↑↑n
state_after: case intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
⊢ NeZero ↑↑n

tactic: by_cases hp : p ∣ n
state_before: case intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
⊢ NeZero ↑↑n
state_after: case pos
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
⊢ NeZero ↑↑n

case neg
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : ¬p ∣ ↑n
⊢ NeZero ↑↑n

tactic: obtain ⟨k, hk⟩ := Nat.exists_eq_succ_of_ne_zero (multiplicity.pos_of_dvd hfin hp).ne'
state_before: case pos
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
⊢ NeZero ↑↑n

tactic: haveI : NeZero p := NeZero.of_pos (Nat.pos_of_dvd_of_pos hp n.pos)
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this : NeZero p
⊢ NeZero ↑↑n

tactic: haveI hpri : Fact p.Prime := CharP.char_is_prime_of_pos R p
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this : NeZero p
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this : NeZero p
hpri : Fact (Nat.Prime p)
⊢ NeZero ↑↑n

tactic: have := hζ.pow_eq_one
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this : NeZero p
hpri : Fact (Nat.Prime p)
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : ζ ^ ↑n = 1
⊢ NeZero ↑↑n

tactic: rw [hm.1, hk, pow_succ', mul_assoc, pow_mul', ← frobenius_def, ← frobenius_one p] at this
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : ζ ^ ↑n = 1
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
⊢ NeZero ↑↑n

tactic: exfalso
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
⊢ NeZero ↑↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
⊢ False

tactic: have hpos : 0 < p ^ k * m := by
  refine mul_pos (pow_pos hpri.1.pos _) (Nat.pos_of_ne_zero fun h => ?_)
  have H := hm.1
  rw [h] at H
  simp at H
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
⊢ False
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ False

tactic: refine hζ.pow_ne_one_of_pos_of_lt hpos ?_ (frobenius_inj R p this)
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ False
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < ↑n

tactic: rw [hm.1, hk, pow_succ', mul_assoc, mul_comm p]
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < ↑n
state_after: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < p ^ k * m * p

tactic: exact lt_mul_of_one_lt_right hpos hpri.1.one_lt
state_before: case pos.intro
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < p ^ k * m * p
state_after: no goals

tactic: refine mul_pos (pow_pos hpri.1.pos _) (Nat.pos_of_ne_zero fun h => ?_)
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
⊢ 0 < p ^ k * m
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
⊢ False

tactic: have H := hm.1
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
⊢ False
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
H : ↑n = p ^ (multiplicity p ↑n).get hfin * m
⊢ False

tactic: rw [h] at H
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
H : ↑n = p ^ (multiplicity p ↑n).get hfin * m
⊢ False
state_after: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
H : ↑n = p ^ (multiplicity p ↑n).get hfin * 0
⊢ False

tactic: simp at H
state_before: M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k✝ l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : (multiplicity p ↑n).get hfin = k.succ
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : (frobenius R p) (ζ ^ (p ^ k * m)) = (frobenius R p) 1
h : m = 0
H : ↑n = p ^ (multiplicity p ↑n).get hfin * 0
⊢ False
state_after: no goals

tactic: exact NeZero.of_not_dvd R hp
state_before: case neg
M : Type u_1
N : Type u_2
G : Type u_3
R : Type u_4
S : Type u_5
F : Type u_6
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
p : ℕ := ringChar R
hfin : multiplicity.Finite p ↑n
m : ℕ
hm : ↑n = p ^ (multiplicity p ↑n).get hfin * m ∧ ¬p ∣ m
hp : ¬p ∣ ↑n
⊢ NeZero ↑↑n
state_after: no goals