M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
inst✝⁴ : CommMonoid M
inst✝³ : CommMonoid N
inst✝² : DivisionCommMonoid G
k l : ℕ
ζ : R
inst✝¹ : CommRing R
inst✝ : IsDomain R
n : ℕ+
hζ : IsPrimitiveRoot ζ ↑n
⊢ NeZero ↑↑n
let p := ringChar R
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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
have hfin := multiplicity.finite_nat_iff.2 ⟨CharP.char_ne_one R p, n.pos⟩
case intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
⊢ NeZero ↑↑n
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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
obtain ⟨m, hm⟩ := multiplicity.exists_eq_pow_mul_and_not_dvd hfin
case pos
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
⊢ NeZero ↑↑n

case neg
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : ¬p ∣ ↑n
⊢ NeZero ↑↑n
case intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
⊢ NeZero ↑↑n
by_cases hp : p ∣ n
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
⊢ NeZero ↑↑n
case pos
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
⊢ NeZero ↑↑n
obtain ⟨k, hk⟩ := Nat.exists_eq_succ_of_ne_zero (multiplicity.pos_of_dvd hfin hp).ne'
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this : NeZero p
⊢ NeZero ↑↑n
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
⊢ NeZero ↑↑n
haveI : NeZero p := NeZero.of_pos (Nat.pos_of_dvd_of_pos hp n.pos)
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this : NeZero p
hpri : Fact (Nat.Prime p)
⊢ NeZero ↑↑n
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this : NeZero p
⊢ NeZero ↑↑n
haveI hpri : Fact p.Prime := CharP.char_is_prime_of_pos R p
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : ζ ^ ↑n = 1
⊢ NeZero ↑↑n
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this : NeZero p
hpri : Fact (Nat.Prime p)
⊢ NeZero ↑↑n
have := hζ.pow_eq_one
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
⊢ NeZero ↑↑n
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝ : NeZero p
hpri : Fact (Nat.Prime p)
this : ζ ^ ↑n = 1
⊢ NeZero ↑↑n
rw [hm.1, hk, pow_succ, mul_assoc, pow_mul', ← frobenius_def, ← frobenius_one p] at this
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
⊢ False
case pos.intro
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
⊢ NeZero ↑↑n
exfalso
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ False
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
⊢ False
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
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < ↑n
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ False
refine' hζ.pow_ne_one_of_pos_of_lt hpos _ (frobenius_inj R p this)
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
⊢ False
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
⊢ 0 < p ^ k * m
refine' mul_pos (pow_pos hpri.1.pos _) (Nat.pos_of_ne_zero fun h => _)
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
H : ↑n = p ^ Part.get (multiplicity p ↑n) hfin * m
⊢ False
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
⊢ False
have H := hm.1
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
H : ↑n = p ^ Part.get (multiplicity p ↑n) hfin * 0
⊢ False
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
H : ↑n = p ^ Part.get (multiplicity p ↑n) hfin * m
⊢ False
rw [h] at H
no goals
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
h : m = 0
H : ↑n = p ^ Part.get (multiplicity p ↑n) hfin * 0
⊢ False
simp at H
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < p ^ k * m * p
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < ↑n
rw [hm.1, hk, pow_succ, mul_assoc, mul_comm p]
no goals
case pos.intro.h
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : p ∣ ↑n
k : ℕ
hk : Part.get (multiplicity p ↑n) hfin = Nat.succ k
this✝¹ : NeZero p
hpri : Fact (Nat.Prime p)
this✝ : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = 1
this : ↑(frobenius R p) (ζ ^ (p ^ k * m)) = ↑(frobenius R p) 1
hpos : 0 < p ^ k * m
⊢ p ^ k * m < p ^ k * m * p
exact lt_mul_of_one_lt_right hpos hpri.1.one_lt
no goals
case neg
M : Type ?u.2763073
N : Type ?u.2763076
G : Type ?u.2763079
R : Type u_1
S : Type ?u.2763085
F : Type ?u.2763088
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 ^ Part.get (multiplicity p ↑n) hfin * m ∧ ¬p ∣ m
hp : ¬p ∣ ↑n
⊢ NeZero ↑↑n
exact NeZero.of_not_dvd R hp