Theorem: IsCyclotomicExtension.union_left
File: Mathlib/NumberTheory/Cyclotomic/Basic.lean

tactic: refine ⟨@fun n hn => ?_, fun b => ?_⟩
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
⊢ IsCyclotomicExtension S A ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
⊢ ∃ r, IsPrimitiveRoot r ↑n

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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ b ∈ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1}

tactic: obtain ⟨b, hb⟩ := ((isCyclotomicExtension_iff _ _ _).1 h).1 (hS hn)
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
⊢ ∃ r, IsPrimitiveRoot r ↑n
state_after: case refine_1.intro
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
b : B
hb : IsPrimitiveRoot b ↑n
⊢ ∃ r, IsPrimitiveRoot r ↑n

tactic: refine ⟨⟨b, subset_adjoin ⟨n, hn, hb.pow_eq_one⟩⟩, ?_⟩
state_before: case refine_1.intro
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
b : B
hb : IsPrimitiveRoot b ↑n
⊢ ∃ r, IsPrimitiveRoot r ↑n
state_after: case refine_1.intro
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
b : B
hb : IsPrimitiveRoot b ↑n
⊢ IsPrimitiveRoot ⟨b, ⋯⟩ ↑n

tactic: rwa [← IsPrimitiveRoot.coe_submonoidClass_iff, Subtype.coe_mk]
state_before: case refine_1.intro
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
n : ℕ+
hn : n ∈ S
b : B
hb : IsPrimitiveRoot b ↑n
⊢ IsPrimitiveRoot ⟨b, ⋯⟩ ↑n
state_after: no goals

tactic: convert mem_top (R := A) (x := b)
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ b ∈ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1}
state_after: case h.e'_5
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1} = ⊤

tactic: rw [← adjoin_adjoin_coe_preimage, preimage_setOf_eq]
state_before: case h.e'_5
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1} = ⊤
state_after: case h.e'_5
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1} = adjoin A {a | ∃ a_1 ∈ S, ↑a ^ ↑a_1 = 1}

tactic: norm_cast
state_before: case h.e'_5
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
h : IsCyclotomicExtension T A B
hS : S ⊆ T
b : ↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})
⊢ adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1} = adjoin A {a | ∃ a_1 ∈ S, ↑a ^ ↑a_1 = 1}
state_after: no goals