-- Mathlib/NumberTheory/Cyclotomic/PrimitiveRoots.lean
theorem sub_one_norm_eq_eval_cyclotomic [IsCyclotomicExtension {n} K L] (h : 2 < (n : ℕ))
    (hirr : Irreducible (cyclotomic n K)) : norm K (ζ - 1) = ↑(eval 1 (cyclotomic n ℤ))

Proof state:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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, Finset.card_univ, AlgHom.card,
  IsCyclotomicExtension.finrank L hirr, (totient_even h).neg_one_pow, one_mul]

Result:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 - C ↑((hζ.embeddingsEquivPrimitiveRoots E hirr) σ))

Tactic:
simp

Result:
no goals

Proof state:
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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

Result:
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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, map_neg, map_sub, map_one, neg_eq_neg_one_mul]

Result:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
case intro
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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

Result:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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

Result:
case intro
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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_faithfulSMul K _ (n : ℕ)

Result:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))

Proof state:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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

Result:
case intro.a
n : ℕ+
K : Type u
L : Type v
inst✝³ : Field L
ζ : L
inst✝² : Field K
inst✝¹ : Algebra K L
hζ : IsPrimitiveRoot ζ ↑n
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 ℤ))