Theorem: NumberField.Units.rootsOfUnity_eq_one
File: Mathlib/NumberTheory/NumberField/Units/Basic.lean

tactic: rw [mem_rootsOfUnity]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
⊢ ζ ∈ rootsOfUnity k (𝓞 K) ↔ ζ = 1
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
⊢ ζ ^ ↑k = 1 ↔ ζ = 1

tactic: refine ⟨fun h => ?_, fun h => by rw [h, one_pow]⟩
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
⊢ ζ ^ ↑k = 1 ↔ ζ = 1
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ ζ = 1

tactic: refine orderOf_eq_one_iff.mp (Nat.eq_one_of_dvd_coprimes hc ?_ ?_)
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ ζ = 1
state_after: case refine_1
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ orderOf ζ ∣ ↑k

case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ orderOf ζ ∣ ↑(torsionOrder K)

tactic: rw [h, one_pow]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ = 1
⊢ ζ ^ ↑k = 1
state_after: no goals

tactic: exact orderOf_dvd_of_pow_eq_one h
state_before: case refine_1
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ orderOf ζ ∣ ↑k
state_after: no goals

tactic: have hζ : ζ ∈ torsion K := by
  rw [torsion, CommGroup.mem_torsion, isOfFinOrder_iff_pow_eq_one]
  exact ⟨k, k.prop, h⟩
state_before: case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ orderOf ζ ∣ ↑(torsionOrder K)
state_after: case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
hζ : ζ ∈ torsion K
⊢ orderOf ζ ∣ ↑(torsionOrder K)

tactic: rw [orderOf_submonoid (⟨ζ, hζ⟩ : torsion K)]
state_before: case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
hζ : ζ ∈ torsion K
⊢ orderOf ζ ∣ ↑(torsionOrder K)
state_after: case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
hζ : ζ ∈ torsion K
⊢ orderOf ⟨ζ, hζ⟩ ∣ ↑(torsionOrder K)

tactic: exact orderOf_dvd_card
state_before: case refine_2
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
hζ : ζ ∈ torsion K
⊢ orderOf ⟨ζ, hζ⟩ ∣ ↑(torsionOrder K)
state_after: no goals

tactic: rw [torsion, CommGroup.mem_torsion, isOfFinOrder_iff_pow_eq_one]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ ζ ∈ torsion K
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ ∃ n, 0 < n ∧ ζ ^ n = 1

tactic: exact ⟨k, k.prop, h⟩
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
k : ℕ+
hc : (↑k).Coprime ↑(torsionOrder K)
ζ : (𝓞 K)ˣ
h : ζ ^ ↑k = 1
⊢ ∃ n, 0 < n ∧ ζ ^ n = 1
state_after: no goals