Theorem: IsCyclotomicExtension.Rat.cyclotomicRing_isIntegralClosure_of_prime_pow
File: Mathlib/NumberTheory/Cyclotomic/Rat.lean

tactic: have hζ := zeta_spec (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
⊢ IsIntegralClosure (CyclotomicRing (p ^ k) ℤ ℚ) ℤ (CyclotomicField (p ^ k) ℚ)
state_after: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
⊢ IsIntegralClosure (CyclotomicRing (p ^ k) ℤ ℚ) ℤ (CyclotomicField (p ^ k) ℚ)

tactic: refine ⟨IsFractionRing.injective _ _, @fun x => ⟨fun h => ⟨⟨x, ?_⟩, rfl⟩, ?_⟩⟩
state_before: p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
⊢ IsIntegralClosure (CyclotomicRing (p ^ k) ℤ ℚ) ℤ (CyclotomicField (p ^ k) ℚ)
state_after: case refine_1
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
h : IsIntegral ℤ x
⊢ x ∈ adjoin ℤ {b | b ^ ↑(p ^ k) = 1}

case refine_2
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
⊢ (∃ y, (algebraMap (CyclotomicRing (p ^ k) ℤ ℚ) (CyclotomicField (p ^ k) ℚ)) y = x) → IsIntegral ℤ x

tactic: have := isIntegralClosure_adjoin_singleton_of_prime_pow hζ
state_before: case refine_1
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
h : IsIntegral ℤ x
⊢ x ∈ adjoin ℤ {b | b ^ ↑(p ^ k) = 1}
state_after: case refine_1
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
h : IsIntegral ℤ x
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
⊢ x ∈ adjoin ℤ {b | b ^ ↑(p ^ k) = 1}

tactic: obtain ⟨y, rfl⟩ := this.isIntegral_iff.1 h
state_before: case refine_1
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
h : IsIntegral ℤ x
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
⊢ x ∈ adjoin ℤ {b | b ^ ↑(p ^ k) = 1}
state_after: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ (algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y ∈
    adjoin ℤ {b | b ^ ↑(p ^ k) = 1}

tactic: refine adjoin_mono ?_ y.2
state_before: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ (algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y ∈
    adjoin ℤ {b | b ^ ↑(p ^ k) = 1}
state_after: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)} ⊆ {b | b ^ ↑(p ^ k) = 1}

tactic: simp only [PNat.pow_coe, Set.singleton_subset_iff, Set.mem_setOf_eq]
state_before: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)} ⊆ {b | b ^ ↑(p ^ k) = 1}
state_after: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ) ^ ↑p ^ k = 1

tactic: exact hζ.pow_eq_one
state_before: case refine_1.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
this : IsIntegralClosure ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)}) ℤ (CyclotomicField (p ^ k) ℚ)
y : ↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})
h : IsIntegral ℤ ((algebraMap (↥(adjoin ℤ {zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)})) (CyclotomicField (p ^ k) ℚ)) y)
⊢ zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ) ^ ↑p ^ k = 1
state_after: no goals

tactic: rintro ⟨y, rfl⟩
state_before: case refine_2
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
x : CyclotomicField (p ^ k) ℚ
⊢ (∃ y, (algebraMap (CyclotomicRing (p ^ k) ℤ ℚ) (CyclotomicField (p ^ k) ℚ)) y = x) → IsIntegral ℤ x
state_after: case refine_2.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
y : CyclotomicRing (p ^ k) ℤ ℚ
⊢ IsIntegral ℤ ((algebraMap (CyclotomicRing (p ^ k) ℤ ℚ) (CyclotomicField (p ^ k) ℚ)) y)

tactic: exact IsIntegral.algebraMap ((IsCyclotomicExtension.integral {p ^ k} ℤ _).isIntegral _)
state_before: case refine_2.intro
p : ℕ+
k : ℕ
K : Type u
inst✝¹ : Field K
inst✝ : CharZero K
ζ : K
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot (zeta (p ^ k) ℚ (CyclotomicField (p ^ k) ℚ)) ↑(p ^ k)
y : CyclotomicRing (p ^ k) ℤ ℚ
⊢ IsIntegral ℤ ((algebraMap (CyclotomicRing (p ^ k) ℤ ℚ) (CyclotomicField (p ^ k) ℚ)) y)
state_after: no goals