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

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, λ ^ 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: 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
⊢ 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 := 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
⊢ 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: fin_cases this
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: all_goals exfalso
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: obtain ⟨n, x, hx⟩ := hcong
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
⊢ ∃ n, 3 ∣ ↑u - ↑n
state_after: case intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
n : ℤ
x : 𝓞 K
hx : ↑u - ↑n = λ ^ 2 * x
⊢ ∃ n, 3 ∣ ↑u - ↑n

tactic: exact ⟨n, -η * x, by rw [← mul_assoc, mul_neg, ← neg_mul, ← lambda_sq, hx]⟩
state_before: case intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑3
u : (𝓞 K)ˣ
n : ℤ
x : 𝓞 K
hx : ↑u - ↑n = λ ^ 2 * x
⊢ ∃ n, 3 ∣ ↑u - ↑n
state_after: no goals

tactic: 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)ˣ
n : ℤ
x : 𝓞 K
hx : ↑u - ↑n = λ ^ 2 * x
⊢ ↑u - ↑n = 3 * (-↑η * x)
state_after: no goals

tactic: left
state_before: 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
state_after: case head.h
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

tactic: rfl
state_before: case head.h
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
state_after: no goals

tactic: right
state_before: 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
state_after: case tail.head.h
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

tactic: rfl
state_before: case tail.head.h
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
state_after: no goals

tactic: exfalso
state_before: 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.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: exact hζ.not_exists_int_prime_dvd_sub_of_prime_ne_two' (by decide) hcong
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
⊢ False
state_after: no goals

tactic: decide
state_before: 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
⊢ 3 ≠ 2
state_after: no goals

tactic: apply hζ.not_exists_int_prime_dvd_sub_of_prime_ne_two' (by decide)
state_before: 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
state_after: 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
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n

tactic: obtain ⟨n, x, hx⟩ := hcong
state_before: 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
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n
state_after: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) - ↑n = 3 * x
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n

tactic: rw [sub_eq_iff_eq_add] at hx
state_before: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) - ↑n = 3 * x
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n
state_after: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) = 3 * x + ↑n
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n

tactic: refine ⟨-n, -x, sub_eq_iff_eq_add.2 ?_⟩
state_before: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) = 3 * x + ↑n
⊢ ∃ n, ↑↑3 ∣ hζ.toInteger - ↑n
state_after: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) = 3 * x + ↑n
⊢ hζ.toInteger = ↑↑3 * -x + ↑(-n)

tactic: simp only [PNat.val_ofNat, Nat.cast_ofNat, mul_neg, Int.cast_neg, ← neg_add, ← hx,
  Units.val_neg, IsUnit.unit_spec, RingOfIntegers.neg_mk, neg_neg]
state_before: case tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit) = 3 * x + ↑n
⊢ hζ.toInteger = ↑↑3 * -x + ↑(-n)
state_after: no goals

tactic: decide
state_before: 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
⊢ 3 ≠ 2
state_after: no goals

tactic: exact (hζ.pow_of_coprime 2 (by decide)).not_exists_int_prime_dvd_sub_of_prime_ne_two'
  (by decide) hcong
state_before: 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
state_after: no goals

tactic: decide
state_before: 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
⊢ Nat.Coprime 2 ↑3
state_after: no goals

tactic: decide
state_before: 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
⊢ 3 ≠ 2
state_after: no goals

tactic: apply (hζ.pow_of_coprime 2 (by decide)).not_exists_int_prime_dvd_sub_of_prime_ne_two'
  (by decide)
state_before: 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
state_after: 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
⊢ ∃ n, ↑↑3 ∣ ⋯.toInteger - ↑n

tactic: obtain ⟨n, x, hx⟩ := hcong
state_before: 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
⊢ ∃ n, ↑↑3 ∣ ⋯.toInteger - ↑n
state_after: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ∃ n, ↑↑3 ∣ ⋯.toInteger - ↑n

tactic: refine ⟨-n, -x, sub_eq_iff_eq_add.2 ?_⟩
state_before: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ∃ n, ↑↑3 ∣ ⋯.toInteger - ↑n
state_after: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ⋯.toInteger = ↑↑3 * -x + ↑(-n)

tactic: have : (hζ.pow_of_coprime 2 (by decide)).toInteger = hζ.toInteger ^ 2 := by ext; simp
state_before: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ⋯.toInteger = ↑↑3 * -x + ↑(-n)
state_after: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
this : ⋯.toInteger = hζ.toInteger ^ 2
⊢ ⋯.toInteger = ↑↑3 * -x + ↑(-n)

tactic: simp only [this, PNat.val_ofNat, Nat.cast_ofNat, mul_neg, Int.cast_neg, ← neg_add, ←
  sub_eq_iff_eq_add.1 hx, Units.val_neg, val_pow_eq_pow_val, IsUnit.unit_spec, neg_neg]
state_before: case tail.tail.tail.tail.tail.head.intro.intro
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
this : ⋯.toInteger = hζ.toInteger ^ 2
⊢ ⋯.toInteger = ↑↑3 * -x + ↑(-n)
state_after: no goals

tactic: decide
state_before: 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
⊢ Nat.Coprime 2 ↑3
state_after: no goals

tactic: decide
state_before: 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
⊢ 3 ≠ 2
state_after: no goals

tactic: decide
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ Nat.Coprime 2 ↑3
state_after: no goals

tactic: ext
state_before: K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ⋯.toInteger = hζ.toInteger ^ 2
state_after: case h
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ↑⋯.toInteger = ↑(hζ.toInteger ^ 2)

tactic: simp
state_before: case h
K : Type u_1
inst✝² : Field K
inst✝¹ : NumberField K
inst✝ : IsCyclotomicExtension {3} ℚ K
ζ : K
hζ✝ : IsPrimitiveRoot ζ ↑3
hζ : IsPrimitiveRoot (zeta 3 ℚ K) ↑3
n : ℤ
x : 𝓞 K
hx : ↑(-⋯.unit ^ 2) - ↑n = 3 * x
⊢ ↑⋯.toInteger = ↑(hζ.toInteger ^ 2)
state_after: no goals