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

tactic: cases' nonempty_fintype S with h
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
inst✝ : IsDomain B
h₁ : Finite ↑S
h₂ : IsCyclotomicExtension S A B
⊢ Module.Finite A B
state_after: case 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
inst✝ : IsDomain B
h₁ : Finite ↑S
h₂ : IsCyclotomicExtension S A B
h : Fintype ↑S
⊢ Module.Finite A B

tactic: revert h₂ A B
state_before: case 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
inst✝ : IsDomain B
h₁ : Finite ↑S
h₂ : IsCyclotomicExtension S A B
h : Fintype ↑S
⊢ Module.Finite A B
state_after: case intro
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
⊢ ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B

tactic: refine Set.Finite.induction_on h₁ (fun A B => ?_) @fun n S _ _ H A B => ?_
state_before: case intro
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
⊢ ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
state_after: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
⊢ ∀ [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension ∅ A B], Module.Finite A B

case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S✝
h : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
⊢ ∀ [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension (insert n S) A B], Module.Finite A B

tactic: intro _ _ _ _ _
state_before: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
⊢ ∀ [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension ∅ A B], Module.Finite A B
state_after: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h₂✝ : IsCyclotomicExtension ∅ A B
⊢ Module.Finite A B

tactic: refine Module.finite_def.2 ⟨({1} : Finset B), ?_⟩
state_before: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h₂✝ : IsCyclotomicExtension ∅ A B
⊢ Module.Finite A B
state_after: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h₂✝ : IsCyclotomicExtension ∅ A B
⊢ Submodule.span A ↑{1} = ⊤

tactic: simp [← top_toSubmodule, ← empty, toSubmodule_bot, Submodule.one_eq_span]
state_before: case intro.refine_1
n : ℕ+
S T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S
h : Fintype ↑S
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h₂✝ : IsCyclotomicExtension ∅ A B
⊢ Submodule.span A ↑{1} = ⊤
state_after: no goals

tactic: intro _ _ _ _ h
state_before: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
h₁ : Finite ↑S✝
h : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
⊢ ∀ [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension (insert n S) A B], Module.Finite A B
state_after: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
⊢ Module.Finite A B

tactic: haveI : IsCyclotomicExtension S A (adjoin A {b : B | ∃ n : ℕ+, n ∈ S ∧ b ^ (n : ℕ) = 1}) :=
  union_left _ (insert n S) _ _ (subset_insert n S)
state_before: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
⊢ Module.Finite A B
state_after: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite A B

tactic: haveI := H A (adjoin A {b : B | ∃ n : ℕ+, n ∈ S ∧ b ^ (n : ℕ) = 1})
state_before: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite A B
state_after: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this✝ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite A B

tactic: have : Module.Finite (adjoin A {b : B | ∃ n : ℕ+, n ∈ S ∧ b ^ (n : ℕ) = 1}) B := by
  rw [← union_singleton] at h
  letI := @union_right S {n} A B _ _ _ h
  exact finite_of_singleton n _ _
state_before: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this✝ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite A B
state_after: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this✝¹ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this✝ : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B
⊢ Module.Finite A B

tactic: exact Module.Finite.trans (adjoin A {b : B | ∃ n : ℕ+, n ∈ S ∧ b ^ (n : ℕ) = 1}) _
state_before: case intro.refine_2
n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this✝¹ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this✝ : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B
⊢ Module.Finite A B
state_after: no goals

tactic: rw [← union_singleton] at h
state_before: n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (insert n S) A B
this✝ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B
state_after: n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (S ∪ {n}) A B
this✝ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B

tactic: letI := @union_right S {n} A B _ _ _ h
state_before: n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (S ∪ {n}) A B
this✝ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
⊢ Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B
state_after: n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (S ∪ {n}) A B
this✝¹ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this✝ : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : IsCyclotomicExtension {n} (↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})) B := union_right S {n} A B
⊢ Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B

tactic: exact finite_of_singleton n _ _
state_before: n✝ : ℕ+
S✝ T : Set ℕ+
K : Type w
L : Type z
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
h₁ : Finite ↑S✝
h✝ : Fintype ↑S✝
n : ℕ+
S : Set ℕ+
x✝¹ : n ∉ S
x✝ : S.Finite
H :
  ∀ (A : Type u) (B : Type v) [inst : CommRing A] [inst_1 : CommRing B] [inst_2 : Algebra A B] [inst_3 : IsDomain B]
    [h₂ : IsCyclotomicExtension S A B], Module.Finite A B
A : Type u
B : Type v
inst✝³ : CommRing A
inst✝² : CommRing B
inst✝¹ : Algebra A B
inst✝ : IsDomain B
h : IsCyclotomicExtension (S ∪ {n}) A B
this✝¹ : IsCyclotomicExtension S A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this✝ : Module.Finite A ↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})
this : IsCyclotomicExtension {n} (↥(adjoin A {b | ∃ a ∈ S, b ^ ↑a = 1})) B := union_right S {n} A B
⊢ Module.Finite (↥(adjoin A {b | ∃ n ∈ S, b ^ ↑n = 1})) B
state_after: no goals