Theorem: IsPrimitiveRoot.adjoin_isCyclotomicExtension
File: Mathlib/NumberTheory/Cyclotomic/Basic.lean

tactic: rw [Set.mem_singleton_iff] at hi
state_before: n✝¹ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
n✝ : ℕ+
hi : n✝ ∈ {n}
⊢ ∃ r, IsPrimitiveRoot r ↑n✝
state_after: n✝¹ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
n✝ : ℕ+
hi : n✝ = n
⊢ ∃ r, IsPrimitiveRoot r ↑n✝

tactic: refine ⟨⟨ζ, subset_adjoin <| Set.mem_singleton ζ⟩, ?_⟩
state_before: n✝¹ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
n✝ : ℕ+
hi : n✝ = n
⊢ ∃ r, IsPrimitiveRoot r ↑n✝
state_after: n✝¹ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
n✝ : ℕ+
hi : n✝ = n
⊢ IsPrimitiveRoot ⟨ζ, ⋯⟩ ↑n✝

tactic: rwa [← IsPrimitiveRoot.coe_submonoidClass_iff, Subtype.coe_mk, hi]
state_before: n✝¹ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
n✝ : ℕ+
hi : n✝ = n
⊢ IsPrimitiveRoot ⟨ζ, ⋯⟩ ↑n✝
state_after: no goals

tactic: refine
  adjoin_induction'
    (x := x) (fun b hb => ?_) (fun a => ?_) (fun b₁ b₂ hb₁ hb₂ => ?_)
    (fun b₁ b₂ hb₁ hb₂ => ?_)
state_before: n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
⊢ x ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb : b ∈ {ζ}
⊢ ⟨b, ⋯⟩ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

case refine_2
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
a : A
⊢ (algebraMap A ↥(adjoin A {ζ})) a ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

case refine_3
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x b₁ b₂ : ↥(adjoin A {ζ})
hb₁ : b₁ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
hb₂ : b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
⊢ b₁ + b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

case refine_4
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x b₁ b₂ : ↥(adjoin A {ζ})
hb₁ : b₁ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
hb₂ : b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
⊢ b₁ * b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

tactic: rw [Set.mem_singleton_iff] at hb
state_before: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb : b ∈ {ζ}
⊢ ⟨b, ⋯⟩ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨b, ⋯⟩ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

tactic: refine subset_adjoin ?_
state_before: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨b, ⋯⟩ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨b, ⋯⟩ ∈ {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}

tactic: simp only [mem_singleton_iff, exists_eq_left, mem_setOf_eq, hb]
state_before: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨b, ⋯⟩ ∈ {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨ζ, ⋯⟩ ^ ↑n = 1

tactic: rw [← Subalgebra.coe_eq_one, Subalgebra.coe_pow, Subtype.coe_mk]
state_before: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ⟨ζ, ⋯⟩ ^ ↑n = 1
state_after: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ζ ^ ↑n = 1

tactic: exact ((IsPrimitiveRoot.iff_def ζ n).1 h).1
state_before: case refine_1
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
b : B
hb✝ : b ∈ {ζ}
hb : b = ζ
⊢ ζ ^ ↑n = 1
state_after: no goals

tactic: exact Subalgebra.algebraMap_mem _ _
state_before: case refine_2
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x : ↥(adjoin A {ζ})
a : A
⊢ (algebraMap A ↥(adjoin A {ζ})) a ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: no goals

tactic: exact Subalgebra.add_mem _ hb₁ hb₂
state_before: case refine_3
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x b₁ b₂ : ↥(adjoin A {ζ})
hb₁ : b₁ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
hb₂ : b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
⊢ b₁ + b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: no goals

tactic: exact Subalgebra.mul_mem _ hb₁ hb₂
state_before: case refine_4
n✝ : ℕ+
S T : Set ℕ+
A : Type u
B : Type v
K : Type w
L : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
ζ : B
n : ℕ+
h : IsPrimitiveRoot ζ ↑n
x b₁ b₂ : ↥(adjoin A {ζ})
hb₁ : b₁ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
hb₂ : b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
⊢ b₁ * b₂ ∈ adjoin A {b | ∃ n_1 ∈ {n}, b ^ ↑n_1 = 1}
state_after: no goals