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

tactic: rcases Nat.eq_zero_or_pos p with (rfl | hppos)
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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case 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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
q : ℕ
x y : L
hy : IsPrimitiveRoot y q
hx : IsPrimitiveRoot x 0
hirr : Irreducible (cyclotomic (Nat.lcm 0 q) K)
⊢ φ (Nat.lcm 0 q) ≤ FiniteDimensional.finrank K L

case 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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: rcases Nat.eq_zero_or_pos q with (rfl | hqpos)
state_before: case 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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p : ℕ
x y : L
hx : IsPrimitiveRoot x p
hppos : p > 0
hy : IsPrimitiveRoot y 0
hirr : Irreducible (cyclotomic (p.lcm 0) K)
⊢ φ (p.lcm 0) ≤ FiniteDimensional.finrank K L

case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: let z := x ^ (p / factorizationLCMLeft p q) * y ^ (q / factorizationLCMRight p q)
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: let k := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: have : IsPrimitiveRoot z k := hx.pow_mul_pow_lcm hy hppos.ne' hqpos.ne'
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this : IsPrimitiveRoot z ↑k
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: haveI := IsPrimitiveRoot.adjoin_isCyclotomicExtension K this
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this : IsPrimitiveRoot z ↑k
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L

tactic: convert Submodule.finrank_le (Subalgebra.toSubmodule (adjoin K {z}))
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) ≤ FiniteDimensional.finrank K L
state_after: case h.e'_3
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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) = FiniteDimensional.finrank K ↥(Subalgebra.toSubmodule (adjoin K {z}))

tactic: rw [show Nat.lcm p q = (k : ℕ) from rfl] at hirr
state_before: case h.e'_3
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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hirr : Irreducible (cyclotomic (p.lcm q) K)
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) = FiniteDimensional.finrank K ↥(Subalgebra.toSubmodule (adjoin K {z}))
state_after: case h.e'_3
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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
hirr : Irreducible (cyclotomic (↑k) K)
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) = FiniteDimensional.finrank K ↥(Subalgebra.toSubmodule (adjoin K {z}))

tactic: simpa using (IsCyclotomicExtension.finrank (Algebra.adjoin K {z}) hirr).symm
state_before: case h.e'_3
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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p q : ℕ
x y : L
hx : IsPrimitiveRoot x p
hy : IsPrimitiveRoot y q
hppos : p > 0
hqpos : q > 0
z : L := x ^ (p / p.factorizationLCMLeft q) * y ^ (q / p.factorizationLCMRight q)
k : ℕ+ := PNat.lcm ⟨p, hppos⟩ ⟨q, hqpos⟩
hirr : Irreducible (cyclotomic (↑k) K)
this✝ : IsPrimitiveRoot z ↑k
this : IsCyclotomicExtension {k} K ↥(adjoin K {z})
⊢ φ (p.lcm q) = FiniteDimensional.finrank K ↥(Subalgebra.toSubmodule (adjoin K {z}))
state_after: no goals

tactic: simp
state_before: case 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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
q : ℕ
x y : L
hy : IsPrimitiveRoot y q
hx : IsPrimitiveRoot x 0
hirr : Irreducible (cyclotomic (Nat.lcm 0 q) K)
⊢ φ (Nat.lcm 0 q) ≤ FiniteDimensional.finrank K L
state_after: no goals

tactic: simp
state_before: case inr.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✝⁴ : CommRing L
inst✝³ : IsDomain L
inst✝² : Algebra K L
inst✝¹ : IsCyclotomicExtension {n} K L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝ : FiniteDimensional K L
p : ℕ
x y : L
hx : IsPrimitiveRoot x p
hppos : p > 0
hy : IsPrimitiveRoot y 0
hirr : Irreducible (cyclotomic (p.lcm 0) K)
⊢ φ (p.lcm 0) ≤ FiniteDimensional.finrank K L
state_after: no goals