internlm/Lean-Github huggingface dataset:
Theorem: dvd_coeff_cycl_integer
Proof state before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
⊢ ∀ (j : Fin ↑p), m ∣ f j
Tactic:
intro j
Proof state after:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
⊢ m ∣ f j
Tactic:
by_cases H : j = ⟨(p : ℕ) - 1, pred_lt hp.ne_zero⟩
Proof state after:
case pos
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : j = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f j

case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f j
Tactic:
have hj : ↑j < (p : ℕ) - 1 := by
  by_contra! habs
  simp [le_antisymm habs (le_pred_of_lt (Fin.is_lt j))] at H
Proof state after:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
⊢ m ∣ f j
Tactic:
obtain ⟨y, hy⟩ := hdiv
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy : ∑ j : Fin ↑p, f j • ζ ^ ↑j = ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy : ∑ j : Fin ↑p, f j • ζ ^ ↑j = ↑m * y
⊢ m ∣ f j
Tactic:
rw [← Equiv.sum_comp (Fin.castOrderIso (succ_pred_prime hp)).toEquiv, Fin.sum_univ_castSucc] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ i : Fin (↑p).pred, f ((Fin.castOrderIso ⋯).toEquiv i.castSucc) • ζ ^ ↑((Fin.castOrderIso ⋯).toEquiv i.castSucc) +
      f ((Fin.castOrderIso ⋯).toEquiv (Fin.last (↑p).pred)) • ζ ^ ↑((Fin.castOrderIso ⋯).toEquiv (Fin.last (↑p).pred)) =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ i : Fin (↑p).pred, f ((Fin.castOrderIso ⋯).toEquiv i.castSucc) • ζ ^ ↑((Fin.castOrderIso ⋯).toEquiv i.castSucc) +
      f ((Fin.castOrderIso ⋯).toEquiv (Fin.last (↑p).pred)) • ζ ^ ↑((Fin.castOrderIso ⋯).toEquiv (Fin.last (↑p).pred)) =
    ↑m * y
⊢ m ∣ f j
Tactic:
simp only [hlast, h, RelIso.coe_fn_toEquiv, Fin.val_mk] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin (↑p).pred, f ((Fin.castOrderIso ⋯) x.castSucc) • ζ ^ ↑((Fin.castOrderIso ⋯) x.castSucc) +
      f ⟨(↑p).pred, ⋯⟩ • ζ ^ (↑p).pred =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin (↑p).pred, f ((Fin.castOrderIso ⋯) x.castSucc) • ζ ^ ↑((Fin.castOrderIso ⋯) x.castSucc) +
      f ⟨(↑p).pred, ⋯⟩ • ζ ^ (↑p).pred =
    ↑m * y
⊢ m ∣ f j
Tactic:
rw [hζ.pow_sub_one_eq hp.one_lt, ← sum_neg_distrib, smul_sum, sum_range, ← sum_add_distrib,
  ← (Fin.castOrderIso hdim).toEquiv.sum_comp] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ i : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim).toEquiv i).castSucc) •
          ζ ^ ↑((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim).toEquiv i).castSucc) +
        f ⟨(↑p).pred, ⋯⟩ • -ζ ^ ↑((Fin.castOrderIso hdim).toEquiv i)) =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ i : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim).toEquiv i).castSucc) •
          ζ ^ ↑((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim).toEquiv i).castSucc) +
        f ⟨(↑p).pred, ⋯⟩ • -ζ ^ ↑((Fin.castOrderIso hdim).toEquiv i)) =
    ↑m * y
⊢ m ∣ f j
Tactic:
simp only [RelIso.coe_fn_toEquiv, Fin.coe_cast, mul_neg, ← Subtype.coe_inj, Fin.coe_castSucc,
  Fin.coe_orderIso_apply] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • ζ ^ ↑x + f ⟨(↑p).pred, ⋯⟩ • -ζ ^ ↑x) =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • ζ ^ ↑x + f ⟨(↑p).pred, ⋯⟩ • -ζ ^ ↑x) =
    ↑m * y
⊢ m ∣ f j
Tactic:
conv_lhs at hy =>
  congr; rfl; ext x
  rw [smul_neg]
  congr; congr; rfl; congr
  rw [hcoe, ← IsPrimitiveRoot.toInteger, ← hζ'.integralPowerBasis'_gen, ← hb]
  rfl; rfl; congr; congr; rfl; congr
  rw [hcoe, ← IsPrimitiveRoot.toInteger, ← hζ'.integralPowerBasis'_gen, ← hb]
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.gen ^ ↑x + -(f ⟨(↑p).pred, ⋯⟩ • b.gen ^ ↑x)) =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.gen ^ ↑x + -(f ⟨(↑p).pred, ⋯⟩ • b.gen ^ ↑x)) =
    ↑m * y
⊢ m ∣ f j
Tactic:
conv_lhs at hy =>
  congr; rfl; ext x
  rw [← show ∀ y, _ = _ from fun y => congr_fun b.coe_basis y, ← sub_eq_add_neg]
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x - f ⟨(↑p).pred, ⋯⟩ • b.basis x) =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim,
      (f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x - f ⟨(↑p).pred, ⋯⟩ • b.basis x) =
    ↑m * y
⊢ m ∣ f j
Tactic:
rw [sum_sub_distrib] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim, f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x -
      ∑ x : Fin b.dim, f ⟨(↑p).pred, ⋯⟩ • b.basis x =
    ↑m * y
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  ∑ x : Fin b.dim, f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x -
      ∑ x : Fin b.dim, f ⟨(↑p).pred, ⋯⟩ • b.basis x =
    ↑m * y
⊢ m ∣ f j
Tactic:
replace hy := congr_arg (b.basis.coord ((Fin.castOrderIso hdim.symm) ⟨j, hj⟩)) hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩))
      (∑ x : Fin b.dim, f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x -
        ∑ x : Fin b.dim, f ⟨(↑p).pred, ⋯⟩ • b.basis x) =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩)) (↑m * y)
⊢ m ∣ f j
Theorem: dvd_coeff_cycl_integer
Proof state before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩))
      (∑ x : Fin b.dim, f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) x).castSucc) • b.basis x -
        ∑ x : Fin b.dim, f ⟨(↑p).pred, ⋯⟩ • b.basis x) =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩)) (↑m * y)
⊢ m ∣ f j
Tactic:
rw [← b.basis.equivFun_symm_apply, ← b.basis.equivFun_symm_apply, LinearMap.map_sub,
  b.basis.coord_equivFun_symm, b.basis.coord_equivFun_symm] at hy
Proof state after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
ζ' : L := ↑ζ
this : Fact (↑p).Prime
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
last_dvd : m ∣ f ⟨(↑p).pred, ⋯⟩
j : Fin ↑p
H : ¬j = ⟨↑p - 1, ⋯⟩
hj : ↑j < ↑p - 1
y : 𝓞 L
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑j, hj⟩)) (↑m * y)
⊢ m ∣ f j