Theorem: IsPrimitiveRoot.exists_neg_pow_of_isOfFinOrder
File: Mathlib/NumberTheory/Cyclotomic/PrimitiveRoots.lean

Proof steps:
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
⊢ ∃ r, x = (-ζ) ^ r
tactic: obtain ⟨k, hkpos, hkn⟩ := isOfFinOrder_iff_pow_eq_one.1 hx
state_before: case intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
⊢ ∃ r, x = (-ζ) ^ r
tactic: obtain ⟨l, hl, hlroot⟩ := (isRoot_of_unity_iff hkpos _).1 hkn
state_before: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
hlzero : NeZero l
⊢ ∃ r, x = (-ζ) ^ r
tactic: have hlzero : NeZero l := ⟨fun h ↦ by simp [h] at hl⟩
state_before: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
hlzero : NeZero l
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
hlzero : NeZero l
this : NeZero ↑l
⊢ ∃ r, x = (-ζ) ^ r
tactic: have : NeZero (l : K) := ⟨NeZero.natCast_ne l K⟩
state_before: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : (cyclotomic l K).IsRoot x
hlzero : NeZero l
this : NeZero ↑l
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : IsPrimitiveRoot x l
hlzero : NeZero l
this : NeZero ↑l
⊢ ∃ r, x = (-ζ) ^ r
tactic: rw [isRoot_cyclotomic_iff] at hlroot
state_before: case intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : IsPrimitiveRoot x l
hlzero : NeZero l
this : NeZero ↑l
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : IsPrimitiveRoot x l
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
⊢ ∃ r, x = (-ζ) ^ r
tactic: obtain ⟨a, ha⟩ := hlroot.dvd_of_isCyclotomicExtension n hlzero.1
state_before: case intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlroot : IsPrimitiveRoot x l
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
hlroot : x ^ (2 * ↑n) = 1
⊢ ∃ r, x = (-ζ) ^ r
tactic: replace hlroot : x ^ (2 * (n : ℕ)) = 1 := by rw [ha, pow_mul, hlroot.pow_eq_one, one_pow]
state_before: case intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
hlroot : x ^ (2 * ↑n) = 1
⊢ ∃ r, x = (-ζ) ^ r
state_after: case intro.intro.intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
hlroot : x ^ (2 * ↑n) = 1
s : ℕ
hs : (-ζ) ^ s = x
⊢ ∃ r, x = (-ζ) ^ r
tactic: obtain ⟨s, -, hs⟩ := hnegζ.eq_pow_of_pow_eq_one hlroot (by simp)
state_before: case intro.intro.intro.intro.intro.intro.intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field K
inst✝² inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {n} ℚ K
hno : Odd ↑n
ζ x : K
hζ : IsPrimitiveRoot ζ ↑n
hx : IsOfFinOrder x
hnegζ : IsPrimitiveRoot (-ζ) (2 * ↑n)
k : ℕ
hkpos : 0 < k
hkn : x ^ k = 1
l : ℕ
hl : l ∈ k.divisors
hlzero : NeZero l
this : NeZero ↑l
a : ℕ
ha : 2 * ↑n = l * a
hlroot : x ^ (2 * ↑n) = 1
s : ℕ
hs : (-ζ) ^ s = x
⊢ ∃ r, x = (-ζ) ^ r
state_after: no goals
tactic: exact ⟨s, hs.symm⟩