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

tactic: have hl : NeZero l := ⟨hl⟩
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl : l ≠ 0
⊢ l ∣ 2 * ↑n
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
⊢ l ∣ 2 * ↑n

tactic: have hroot := IsCyclotomicExtension.zeta_spec n ℚ K
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
⊢ l ∣ 2 * ↑n
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
⊢ l ∣ 2 * ↑n

tactic: have key := IsPrimitiveRoot.lcm_totient_le_finrank hζ hroot
  (cyclotomic.irreducible_rat <| Nat.lcm_pos (Nat.pos_of_ne_zero hl.1) n.2)
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
⊢ l ∣ 2 * ↑n
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ FiniteDimensional.finrank ℚ K
⊢ l ∣ 2 * ↑n

tactic: rw [IsCyclotomicExtension.finrank K (cyclotomic.irreducible_rat n.2)] at key
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ FiniteDimensional.finrank ℚ K
⊢ l ∣ 2 * ↑n
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
⊢ l ∣ 2 * ↑n

tactic: rcases _root_.dvd_lcm_right l n with ⟨r, hr⟩
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
⊢ l ∣ 2 * ↑n

tactic: have ineq := Nat.totient_super_multiplicative n r
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (↑n * r)
⊢ l ∣ 2 * ↑n

tactic: rw [← hr] at ineq
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (↑n * r)
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
⊢ l ∣ 2 * ↑n

tactic: replace key := (mul_le_iff_le_one_right (Nat.totient_pos.2 n.2)).mp (le_trans ineq key)
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
key : φ (l.lcm ↑n) ≤ φ ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
⊢ l ∣ 2 * ↑n

tactic: have rpos : 0 < r := by
  refine Nat.pos_of_ne_zero (fun h ↦ ?_)
  simp only [h, mul_zero, _root_.lcm_eq_zero_iff, PNat.ne_zero, or_false] at hr
  exact hl.1 hr
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
rpos : 0 < r
⊢ l ∣ 2 * ↑n

tactic: replace key := (Nat.dvd_prime Nat.prime_two).1 (Nat.dvd_two_of_totient_le_one rpos key)
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
rpos : 0 < r
⊢ l ∣ 2 * ↑n
state_after: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1 ∨ r = 2
⊢ l ∣ 2 * ↑n

tactic: rcases key with (key | key)
state_before: case 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1 ∨ r = 2
⊢ l ∣ 2 * ↑n
state_after: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * ↑n

case intro.inr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 2
⊢ l ∣ 2 * ↑n

tactic: refine Nat.pos_of_ne_zero (fun h ↦ ?_)
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
⊢ 0 < r
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
h : r = 0
⊢ False

tactic: simp only [h, mul_zero, _root_.lcm_eq_zero_iff, PNat.ne_zero, or_false] at hr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
h : r = 0
⊢ False
state_after: 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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
h : r = 0
hr : l = 0
⊢ False

tactic: exact hl.1 hr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
key : φ r ≤ 1
h : r = 0
hr : l = 0
⊢ False
state_after: no goals

tactic: rw [key, mul_one] at hr
state_before: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * ↑n
state_after: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * ↑n

tactic: rw [← hr]
state_before: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * ↑n
state_after: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * GCDMonoid.lcm l ↑n

tactic: exact dvd_mul_of_dvd_right (_root_.dvd_lcm_left l ↑n) 2
state_before: case intro.inl
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 1
⊢ l ∣ 2 * GCDMonoid.lcm l ↑n
state_after: no goals

tactic: rw [key, mul_comm] at hr
state_before: case intro.inr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = ↑n * r
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 2
⊢ l ∣ 2 * ↑n
state_after: case intro.inr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = 2 * ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 2
⊢ l ∣ 2 * ↑n

tactic: simpa [← hr] using _root_.dvd_lcm_left _ _
state_before: case intro.inr
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
ζ : K
l : ℕ
hζ : IsPrimitiveRoot ζ l
hl✝ : l ≠ 0
hl : NeZero l
hroot : IsPrimitiveRoot (zeta n ℚ K) ↑n
r : ℕ
hr : GCDMonoid.lcm l ↑n = 2 * ↑n
ineq : φ ↑n * φ r ≤ φ (GCDMonoid.lcm l ↑n)
rpos : 0 < r
key : r = 2
⊢ l ∣ 2 * ↑n
state_after: no goals