Theorem: IsCyclotomicExtension.Rat.Three.eq_one_or_neg_one_of_unit_of_congruent
File: Mathlib/NumberTheory/Cyclotomic/Three.lean

Proof steps:
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, λ ^ 2 ∣ ↑u - ↑n
⊢ u = 1 ∨ u = -1
state_after: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
⊢ u = 1 ∨ u = -1
tactic: replace hcong : ∃ n : ℤ, (3 : 𝓞 K) ∣ (↑u - n : 𝓞 K) := by
    obtain ⟨n, x, hx⟩ := hcong
    exact ⟨n, -η * x, by rw [← mul_assoc, mul_neg, ← neg_mul, ← lambda_sq, hx]⟩
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
⊢ u = 1 ∨ u = -1
state_after: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
⊢ u = 1 ∨ u = -1
tactic: have hζ := IsCyclotomicExtension.zeta_spec 3 ℚ K
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
⊢ u = 1 ∨ u = -1
state_after: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
this : u ∈ [1, -1, ⋯.unit, -⋯.unit, ⋯.unit ^ 2, -⋯.unit ^ 2]
⊢ u = 1 ∨ u = -1
tactic: have := Units.mem hζ u
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
hcong : ∃ n, 3 ∣ ↑u - ↑n
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
this : u ∈ [1, -1, ⋯.unit, -⋯.unit, ⋯.unit ^ 2, -⋯.unit ^ 2]
⊢ u = 1 ∨ u = -1
state_after: case head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑1 - ↑n
⊢ 1 = 1 ∨ 1 = -1

case tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-1) - ↑n
⊢ -1 = 1 ∨ -1 = -1

case tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑⋯.unit - ↑n
⊢ ⋯.unit = 1 ∨ ⋯.unit = -1

case tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit) - ↑n
⊢ -⋯.unit = 1 ∨ -⋯.unit = -1

case tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(⋯.unit ^ 2) - ↑n
⊢ ⋯.unit ^ 2 = 1 ∨ ⋯.unit ^ 2 = -1

case tail.tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit ^ 2) - ↑n
⊢ -⋯.unit ^ 2 = 1 ∨ -⋯.unit ^ 2 = -1
tactic: fin_cases this
state_before: case tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑⋯.unit - ↑n
⊢ ⋯.unit = 1 ∨ ⋯.unit = -1

case tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit) - ↑n
⊢ -⋯.unit = 1 ∨ -⋯.unit = -1

case tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(⋯.unit ^ 2) - ↑n
⊢ ⋯.unit ^ 2 = 1 ∨ ⋯.unit ^ 2 = -1

case tail.tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit ^ 2) - ↑n
⊢ -⋯.unit ^ 2 = 1 ∨ -⋯.unit ^ 2 = -1
state_after: case tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑⋯.unit - ↑n
⊢ False

case tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit) - ↑n
⊢ False

case tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(⋯.unit ^ 2) - ↑n
⊢ False

case tail.tail.tail.tail.tail.head
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
hcong : ∃ n, 3 ∣ ↑(-⋯.unit ^ 2) - ↑n
⊢ False
tactic: all_goals exfalso