Theorem: IsPrimitiveRoot.sub_one_norm_eq_eval_cyclotomic
File: Mathlib/NumberTheory/Cyclotomic/PrimitiveRoots.lean

tactic: haveI := IsCyclotomicExtension.neZero' n K L
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: let E := AlgebraicClosure L
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: obtain ⟨z, hz⟩ := IsAlgClosed.exists_root _ (degree_cyclotomic_pos n E n.pos).ne.symm
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: apply (algebraMap K E).injective
state_before: case intro
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
⊢ (Algebra.norm K) (ζ - 1) = ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: letI := IsCyclotomicExtension.finiteDimensional {n} K L
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this : FiniteDimensional K L := finiteDimensional {n} K L
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: letI := IsCyclotomicExtension.isGalois n K L
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this : FiniteDimensional K L := finiteDimensional {n} K L
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: rw [norm_eq_prod_embeddings]
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ (algebraMap K E) ((Algebra.norm K) (ζ - 1)) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ σ : L →ₐ[K] E, σ (ζ - 1) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: conv_lhs =>
  congr
  rfl
  ext
  rw [← neg_sub, AlgHom.map_neg, AlgHom.map_sub, AlgHom.map_one, neg_eq_neg_one_mul]
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ σ : L →ₐ[K] E, σ (ζ - 1) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ x : L →ₐ[K] E, -1 * (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: rw [prod_mul_distrib, prod_const, card_univ, AlgHom.card, IsCyclotomicExtension.finrank L hirr,
  (totient_even h).neg_one_pow, one_mul]
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ x : L →ₐ[K] E, -1 * (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: have Hprod : (Finset.univ.prod fun σ : L →ₐ[K] E => 1 - σ ζ) = eval 1 (cyclotomic' n E) := by
  rw [cyclotomic', eval_prod, ← @Finset.prod_attach E E, ← univ_eq_attach]
  refine Fintype.prod_equiv (hζ.embeddingsEquivPrimitiveRoots E hirr) _ _ fun σ => ?_
  simp
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
Hprod : ∏ σ : L →ₐ[K] E, (1 - σ ζ) = eval 1 (cyclotomic' (↑n) E)
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: haveI : NeZero ((n : ℕ) : E) := NeZero.of_noZeroSMulDivisors K _ (n : ℕ)
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
Hprod : ∏ σ : L →ₐ[K] E, (1 - σ ζ) = eval 1 (cyclotomic' (↑n) E)
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝² : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝¹ : FiniteDimensional K L := finiteDimensional {n} K L
this✝ : IsGalois K L := isGalois n K L
Hprod : ∏ σ : L →ₐ[K] E, (1 - σ ζ) = eval 1 (cyclotomic' (↑n) E)
this : NeZero ↑↑n
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))

tactic: rw [Hprod, cyclotomic', ← cyclotomic_eq_prod_X_sub_primitiveRoots (isRoot_cyclotomic_iff.1 hz),
  ← map_cyclotomic_int, _root_.map_intCast, ← Int.cast_one, eval_intCast_map, eq_intCast,
  Int.cast_id]
state_before: case intro.a
p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝² : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝¹ : FiniteDimensional K L := finiteDimensional {n} K L
this✝ : IsGalois K L := isGalois n K L
Hprod : ∏ σ : L →ₐ[K] E, (1 - σ ζ) = eval 1 (cyclotomic' (↑n) E)
this : NeZero ↑↑n
⊢ ∏ x : L →ₐ[K] E, (1 - x ζ) = (algebraMap K E) ↑(eval 1 (cyclotomic ↑n ℤ))
state_after: no goals

tactic: rw [cyclotomic', eval_prod, ← @Finset.prod_attach E E, ← univ_eq_attach]
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ σ : L →ₐ[K] E, (1 - σ ζ) = eval 1 (cyclotomic' (↑n) E)
state_after: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ σ : L →ₐ[K] E, (1 - σ ζ) = ∏ x : { x // x ∈ primitiveRoots (↑n) E }, eval 1 (X - Polynomial.C ↑x)

tactic: refine Fintype.prod_equiv (hζ.embeddingsEquivPrimitiveRoots E hirr) _ _ fun σ => ?_
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
⊢ ∏ σ : L →ₐ[K] E, (1 - σ ζ) = ∏ x : { x // x ∈ primitiveRoots (↑n) E }, eval 1 (X - Polynomial.C ↑x)
state_after: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
σ : L →ₐ[K] E
⊢ 1 - σ ζ = eval 1 (X - Polynomial.C ↑((hζ.embeddingsEquivPrimitiveRoots E hirr) σ))

tactic: simp
state_before: p n : ℕ+
A : Type w
B : Type z
K : Type u
L : Type v
C : Type w
inst✝⁷ : CommRing A
inst✝⁶ : CommRing B
inst✝⁵ : Algebra A B
inst✝⁴ : IsCyclotomicExtension {n} A B
inst✝³ : Field L
ζ : L
hζ : IsPrimitiveRoot ζ ↑n
inst✝² : Field K
inst✝¹ : Algebra K L
inst✝ : IsCyclotomicExtension {n} K L
h : 2 < ↑n
hirr : Irreducible (cyclotomic (↑n) K)
this✝¹ : NeZero ↑↑n
E : Type v := AlgebraicClosure L
z : E
hz : (cyclotomic (↑n) E).IsRoot z
this✝ : FiniteDimensional K L := finiteDimensional {n} K L
this : IsGalois K L := isGalois n K L
σ : L →ₐ[K] E
⊢ 1 - σ ζ = eval 1 (X - Polynomial.C ↑((hζ.embeddingsEquivPrimitiveRoots E hirr) σ))
state_after: no goals