internlm/Lean-Github huggingface dataset:
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ ↑((Algebra.norm ℤ) (1 + ↑p • x)) - 1 + ↑p • x
Tactic:
simp only [nsmul_eq_mul, hr, Int.cast_add, Int.cast_one, Int.cast_mul, hs, ge_iff_le, PNat.pos,
  Nat.cast_pred, Int.cast_pow, Nat.cast_mul, ne_eq, PNat.ne_zero, Int.cast_natCast,
  not_false_eq_true, isUnit_pow_iff]
Proof state after:
case intro.intro.intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ 1 + ((↑hζ.unit' - 1) * s + (↑↑p - 1) * x) * ↑↑p + ↑r * ↑↑p ^ 2 - 1 + ↑↑p * x
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ 1 + ((↑hζ.unit' - 1) * s + (↑↑p - 1) * x) * ↑↑p + ↑r * ↑↑p ^ 2 - 1 + ↑↑p * x
Tactic:
suffices (hζ.unit' - 1 : 𝓞 K) ^ (p : ℕ) ∣ (hζ.unit' - 1) * p * s + (p : 𝓞 K) ^ 2 * (r + x) by
  convert this using 1; ring
Proof state after:
case intro.intro.intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
Tactic:
apply dvd_add
Proof state after:
case intro.intro.intro.h₁
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s

case intro.intro.intro.h₂
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ ↑↑p ^ 2 * (↑r + x)
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this✝ : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
this : (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ 1 + ((↑hζ.unit' - 1) * s + (↑↑p - 1) * x) * ↑↑p + ↑r * ↑↑p ^ 2 - 1 + ↑↑p * x
Tactic:
convert this using 1
Proof state after:
case h.e'_4
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this✝ : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
this : (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
⊢ 1 + ((↑hζ.unit' - 1) * s + (↑↑p - 1) * x) * ↑↑p + ↑r * ↑↑p ^ 2 - 1 + ↑↑p * x =
    (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case h.e'_4
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this✝ : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
this : (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
⊢ 1 + ((↑hζ.unit' - 1) * s + (↑↑p - 1) * x) * ↑↑p + ↑r * ↑↑p ^ 2 - 1 + ↑↑p * x =
    (↑hζ.unit' - 1) * ↑↑p * s + ↑↑p ^ 2 * (↑r + x)
Tactic:
ring
Proof state after:
no goals
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₁
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p * s
Tactic:
apply dvd_mul_of_dvd_left
Proof state after:
case intro.intro.intro.h₁.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₁.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) * ↑↑p
Tactic:
rw [ht, ← mul_assoc, ← pow_succ', tsub_add_cancel_of_le (Nat.Prime.one_lt hpri.out).le]
Proof state after:
case intro.intro.intro.h₁.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ↑p * t
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₁.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ↑p * t
Tactic:
exact dvd_mul_right _ _
Proof state after:
no goals
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₂
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ ↑↑p ^ 2 * (↑r + x)
Tactic:
rw [ht, mul_pow, ← pow_mul, mul_assoc]
Proof state after:
case intro.intro.intro.h₂
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ((↑p - 1) * 2) * (t ^ 2 * (↑r + x))
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₂
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ((↑p - 1) * 2) * (t ^ 2 * (↑r + x))
Tactic:
apply dvd_mul_of_dvd_left
Proof state after:
case intro.intro.intro.h₂.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ((↑p - 1) * 2)
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₂.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ (↑hζ.unit' - 1) ^ ↑p ∣ (↑hζ.unit' - 1) ^ ((↑p - 1) * 2)
Tactic:
apply pow_dvd_pow
Proof state after:
case intro.intro.intro.h₂.h.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ ↑p ≤ (↑p - 1) * 2
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₂.h.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ ↑p ≤ (↑p - 1) * 2
Tactic:
zify [(Nat.Prime.one_lt hpri.out).le]
Proof state after:
case intro.intro.intro.h₂.h.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ ↑↑p ≤ (↑↑p - 1) * 2
Theorem: zeta_sub_one_pow_dvd_norm_sub_pow
Proof state before:
case intro.intro.intro.h₂.h.h
K : Type u_1
p : ℕ+
hpri : Fact p.Prime
inst✝² : Field K
inst✝¹ : CharZero K
inst✝ : IsCyclotomicExtension {p} ℚ K
ζ : K
hζ : IsPrimitiveRoot ζ ↑p
hp : p ≠ 2
x : 𝓞 K
this : NumberField K := IsCyclotomicExtension.numberField {p} ℚ K
r : ℤ
s : 𝓞 K
hs : ↑((Algebra.trace ℤ (𝓞 K)) x) = (↑hζ.unit' - 1) * s + (↑p - 1) • x
t : 𝓞 K
ht : ↑↑p = (↑hζ.unit' - 1) ^ (↑p - 1) * t
hr : (Algebra.norm ℤ) (1 + ↑↑p * x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑↑p + r * ↑↑p ^ 2
⊢ ↑↑p ≤ (↑↑p - 1) * 2
Tactic:
linarith only [Nat.Prime.two_le hpri.out]
Proof state after:
no goals
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ (Algebra.norm ℤ) (1 + p • x) = 1
Tactic:
have H : Algebra.norm ℤ (1 + (p : ℕ) • x) = 1 ∨ Algebra.norm ℤ (1 + (p : ℕ) • x) = -1 := by
  apply Int.natAbs_eq_iff.mp
  apply (Int.cast_injective (α := ℚ)).comp Nat.cast_injective
  simp only [Int.cast_abs, Function.comp_apply, Nat.cast_one, Int.cast_one, ← Int.abs_eq_natAbs,
    Algebra.coe_norm_int, ← NumberField.isUnit_iff_norm.mp hx, RingOfIntegers.coe_norm]
Proof state after:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
⊢ (Algebra.norm ℤ) (1 + p • x) = 1
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
⊢ (Algebra.norm ℤ) (1 + p • x) = 1
Tactic:
have : Algebra.norm ℤ (1 + (p : ℕ) • x) ≠ -1 := by
  intro e; apply hp
  obtain ⟨r, hr⟩ := Algebra.norm_one_add_smul (p : ℤ) x
  have : (p : ℤ) * (- Algebra.trace ℤ _ x - r * p) = 2 := by
    rw [zsmul_eq_mul, Int.cast_natCast, ← nsmul_eq_mul, e, eq_comm, ← sub_eq_zero] at hr
    rw [eq_comm, ← sub_eq_zero, ← hr]
    ring
  exact (Nat.prime_two.eq_one_or_self_of_dvd _
    (Int.natCast_dvd_natCast.mp ⟨_, this.symm⟩)).resolve_left hpri.ne_one
Proof state after:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
this : (Algebra.norm ℤ) (1 + p • x) ≠ -1
⊢ (Algebra.norm ℤ) (1 + p • x) = 1
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
this : (Algebra.norm ℤ) (1 + p • x) ≠ -1
⊢ (Algebra.norm ℤ) (1 + p • x) = 1
Tactic:
exact H.resolve_right this
Proof state after:
no goals
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
Tactic:
apply Int.natAbs_eq_iff.mp
Proof state after:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ ((Algebra.norm ℤ) (1 + p • x)).natAbs = 1
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ ((Algebra.norm ℤ) (1 + p • x)).natAbs = 1
Tactic:
apply (Int.cast_injective (α := ℚ)).comp Nat.cast_injective
Proof state after:
case a
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ (Int.cast ∘ Nat.cast) ((Algebra.norm ℤ) (1 + p • x)).natAbs = (Int.cast ∘ Nat.cast) 1
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
case a
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
⊢ (Int.cast ∘ Nat.cast) ((Algebra.norm ℤ) (1 + p • x)).natAbs = (Int.cast ∘ Nat.cast) 1
Tactic:
simp only [Int.cast_abs, Function.comp_apply, Nat.cast_one, Int.cast_one, ← Int.abs_eq_natAbs,
  Algebra.coe_norm_int, ← NumberField.isUnit_iff_norm.mp hx, RingOfIntegers.coe_norm]
Proof state after:
no goals
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
⊢ (Algebra.norm ℤ) (1 + p • x) ≠ -1
Tactic:
intro e
Proof state after:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
e : (Algebra.norm ℤ) (1 + p • x) = -1
⊢ False
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
e : (Algebra.norm ℤ) (1 + p • x) = -1
⊢ False
Tactic:
apply hp
Proof state after:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
e : (Algebra.norm ℤ) (1 + p • x) = -1
⊢ p = 2
Theorem: norm_add_one_smul_of_isUnit
Proof state before:
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
e : (Algebra.norm ℤ) (1 + p • x) = -1
⊢ p = 2
Tactic:
obtain ⟨r, hr⟩ := Algebra.norm_one_add_smul (p : ℤ) x
Proof state after:
case intro
K✝ : Type u_1
p✝ : ℕ+
hpri✝ : Fact p✝.Prime
inst✝⁴ : Field K✝
inst✝³ : CharZero K✝
inst✝² : IsCyclotomicExtension {p✝} ℚ K✝
ζ : K✝
hζ : IsPrimitiveRoot ζ ↑p✝
hp✝ : p✝ ≠ 2
K : Type u_2
inst✝¹ : Field K
inst✝ : NumberField K
p : ℕ
hpri : p.Prime
hp : p ≠ 2
x : 𝓞 K
hx : IsUnit (1 + p • x)
H : (Algebra.norm ℤ) (1 + p • x) = 1 ∨ (Algebra.norm ℤ) (1 + p • x) = -1
e : (Algebra.norm ℤ) (1 + p • x) = -1
r : ℤ
hr : (Algebra.norm ℤ) (1 + ↑p • x) = 1 + (Algebra.trace ℤ (𝓞 K)) x * ↑p + r * ↑p ^ 2
⊢ p = 2