Theorem: dvd_last_coeff_cycl_integer (FltRegular/NumberTheory/Cyclotomic/CyclRat.lean)

State before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
hf : ∃ i, f i = 0
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
obtain ⟨i, Hi⟩ := hf
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have hlast :
  (Fin.castOrderIso (succ_pred_prime hp.out)) (Fin.last (p : ℕ).pred) =
  ⟨(p : ℕ).pred, pred_lt hp.out.ne_zero⟩ := Fin.ext rfl
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have h : ∀ x, (Fin.castOrderIso (succ_pred_prime hp.out)) (Fin.castSuccEmb x) =
  ⟨x, lt_trans x.2 (pred_lt hp.out.ne_zero)⟩ := fun x => Fin.ext rfl
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
let ζ' := (ζ : L)
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have hζ' : IsPrimitiveRoot ζ' p := IsPrimitiveRoot.coe_submonoidClass_iff.2 hζ
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have hcoe : ζ = ⟨ζ', hζ'.isIntegral p.pos⟩ := by rfl
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
set b := hζ'.integralPowerBasis' with hb
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have hdim : b.dim = (p : ℕ).pred := by rw [hζ'.power_basis_int'_dim, totient_prime hp.out,
  pred_eq_sub_one]
State after:
case intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

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

case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
have hi : ↑i < (p : ℕ) - 1 := by
  by_contra! habs
  simp [le_antisymm habs (le_pred_of_lt (Fin.is_lt i))] at H
State after:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
obtain ⟨y, hy⟩ := hdiv
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy : ∑ j : Fin ↑p, f j • ζ ^ ↑j = ↑m * y
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy : ∑ j : Fin ↑p, f j • ζ ^ ↑j = ↑m * y
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
rw [← Equiv.sum_comp (Fin.castOrderIso (succ_pred_prime hp.out)).toEquiv, Fin.sum_univ_castSucc] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
Tactic:
simp only [hlast, h, RelIso.coe_fn_toEquiv, Fin.val_mk] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
Tactic:
rw [hζ.pow_sub_one_eq hp.out.one_lt, ← sum_neg_distrib, smul_sum, sum_range, ← sum_add_distrib,
  ← (Fin.castOrderIso hdim).toEquiv.sum_comp] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
Tactic:
simp only [RelIso.coe_fn_toEquiv, Fin.coe_cast, mul_neg, ← Subtype.coe_inj, Fin.coe_castSucc,
  Fin.coe_orderIso_apply] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
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]
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
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]
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
Tactic:
rw [sum_sub_distrib] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑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 ⟨(↑p).pred, ⋯⟩
Tactic:
replace hy := congr_arg (b.basis.coord ((Fin.castOrderIso hdim.symm) ⟨i, hi⟩)) hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩))
      (∑ 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 ⋯) ⟨↑i, hi⟩)) (↑m * y)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩))
      (∑ 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 ⋯) ⟨↑i, hi⟩)) (↑m * y)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
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, ← smul_eq_mul,
  ← zsmul_eq_smul_cast] at hy
State after:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
obtain ⟨n, hn⟩ := b.basis.dvd_coord_smul ((Fin.castOrderIso hdim.symm) ⟨i, hi⟩) y m
State after:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y)
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ =
    (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y)
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
rw [hn] at hy
State after:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ = m * n
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hy :
  f ((Fin.castOrderIso ⋯) ((Fin.castOrderIso hdim) ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)).castSucc) - f ⟨(↑p).pred, ⋯⟩ = m * n
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
simp only [Fin.castOrderIso_apply, Fin.cast_mk, Fin.castSucc_mk, Fin.eta, Hi, zero_sub,
  neg_eq_iff_eq_neg] at hy
State after:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
hy : f ⟨(↑p).pred, ⋯⟩ = -(m * n)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩

State before:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
hy : f ⟨(↑p).pred, ⋯⟩ = -(m * n)
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
erw [hy]
State after:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
hy : f ⟨(↑p).pred, ⋯⟩ = -(m * n)
⊢ m ∣ -(m * n)

State before:
case neg.intro.intro
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
hi : ↑i < ↑p - 1
y : 𝓞 L
n : ℤ
hn : (b.basis.coord ((Fin.castOrderIso ⋯) ⟨↑i, hi⟩)) (m • y) = m * n
hy : f ⟨(↑p).pred, ⋯⟩ = -(m * n)
⊢ m ∣ -(m * n)
Tactic:
simp [dvd_neg]
State after:
no goals

State before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
⊢ ζ = ⟨ζ', ⋯⟩
Tactic:
rfl
State after:
no goals

State before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
⊢ b.dim = (↑p).pred
Tactic:
rw [hζ'.power_basis_int'_dim, totient_prime hp.out,
pred_eq_sub_one]
State after:
no goals

State before:
case pos
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : i = ⟨↑p - 1, ⋯⟩
⊢ m ∣ f ⟨(↑p).pred, ⋯⟩
Tactic:
simp [H.symm, Hi]
State after:
no goals

State before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
⊢ ↑i < ↑p - 1
Tactic:
by_contra! habs
State after:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
habs : ↑p - 1 ≤ ↑i
⊢ False

State before:
p : ℕ+
L : Type u
inst✝² : Field L
inst✝¹ : CharZero L
inst✝ : IsCyclotomicExtension {p} ℚ L
hp : Fact (↑p).Prime
ζ : 𝓞 L
hζ : IsPrimitiveRoot ζ ↑p
f : Fin ↑p → ℤ
m : ℤ
hdiv : ↑m ∣ ∑ j : Fin ↑p, f j • ζ ^ ↑j
i : Fin ↑p
Hi : f i = 0
hlast : (Fin.castOrderIso ⋯) (Fin.last (↑p).pred) = ⟨(↑p).pred, ⋯⟩
h : ∀ (x : Fin (↑p).pred), (Fin.castOrderIso ⋯) (Fin.castSuccEmb x) = ⟨↑x, ⋯⟩
ζ' : L := ↑ζ
hζ' : IsPrimitiveRoot ζ' ↑p
hcoe : ζ = ⟨ζ', ⋯⟩
b : PowerBasis ℤ (𝓞 L) := hζ'.integralPowerBasis'
hb : b = hζ'.integralPowerBasis'
hdim : b.dim = (↑p).pred
H : ¬i = ⟨↑p - 1, ⋯⟩
habs : ↑p - 1 ≤ ↑i
⊢ False
Tactic:
simp [le_antisymm habs (le_pred_of_lt (Fin.is_lt i))] at H
State after:
no goals