Theorem: IsCyclotomicExtension.discr_prime_pow
File: Mathlib/NumberTheory/Cyclotomic/Discriminant.lean

tactic: cases' k with k k
state_before: p : ℕ+
k : ℕ
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hcycl : IsCyclotomicExtension {p ^ k} K L
hp : Fact (Nat.Prime ↑p)
hζ : IsPrimitiveRoot ζ ↑(p ^ k)
hirr : Irreducible (cyclotomic (↑(p ^ k)) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis = (-1) ^ (φ (↑p ^ k) / 2) * ↑↑p ^ (↑p ^ (k - 1) * ((↑p - 1) * k - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis = (-1) ^ (φ (↑p ^ 0) / 2) * ↑↑p ^ (↑p ^ (0 - 1) * ((↑p - 1) * 0 - 1))

case succ
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))

tactic: simp only [coe_basis, _root_.pow_zero, powerBasis_gen _ hζ, totient_one, mul_zero, mul_one,
  show 1 / 2 = 0 by rfl, discr, traceMatrix]
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis = (-1) ^ (φ (↑p ^ 0) / 2) * ↑↑p ^ (↑p ^ (0 - 1) * ((↑p - 1) * 0 - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ (Matrix.of fun i j => ((traceForm K L) (ζ ^ ↑i)) (ζ ^ ↑j)).det = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))

tactic: have hζone : ζ = 1 := by simpa using hζ
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ (Matrix.of fun i j => ((traceForm K L) (ζ ^ ↑i)) (ζ ^ ↑j)).det = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ (Matrix.of fun i j => ((traceForm K L) (ζ ^ ↑i)) (ζ ^ ↑j)).det = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))

tactic: rw [hζ.powerBasis_dim _, hζone, ← (algebraMap K L).map_one,
  minpoly.eq_X_sub_C_of_algebraMap_inj _ (algebraMap K L).injective, natDegree_X_sub_C]
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ (Matrix.of fun i j => ((traceForm K L) (ζ ^ ↑i)) (ζ ^ ↑j)).det = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ (Matrix.of fun i j => ((traceForm K L) ((algebraMap K L) 1 ^ ↑i)) ((algebraMap K L) 1 ^ ↑j)).det =
    1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))

tactic: simp only [traceMatrix, map_one, one_pow, Matrix.det_unique, traceForm_apply, mul_one]
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ (Matrix.of fun i j => ((traceForm K L) ((algebraMap K L) 1 ^ ↑i)) ((algebraMap K L) 1 ^ ↑j)).det =
    1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ Matrix.of (fun i j => (trace K L) 1) default default = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))

tactic: rw [← (algebraMap K L).map_one, trace_algebraMap, finrank _ hirr]
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ Matrix.of (fun i j => (trace K L) 1) default default = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))
state_after: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ Matrix.of (fun i j => φ ↑(p ^ 0) • 1) default default = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))

tactic: norm_num
state_before: case zero
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
hζone : ζ = 1
⊢ Matrix.of (fun i j => φ ↑(p ^ 0) • 1) default default = 1 * ↑↑p ^ (↑p ^ (0 - 1) * (0 - 1))
state_after: no goals

tactic: rfl
state_before: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ 1 / 2 = 0
state_after: no goals

tactic: simpa using hζ
state_before: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
hcycl : IsCyclotomicExtension {p ^ 0} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ 0)
hirr : Irreducible (cyclotomic (↑(p ^ 0)) K)
⊢ ζ = 1
state_after: no goals

tactic: by_cases hk : p ^ (k + 1) = 2
state_before: case succ
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))
state_after: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))

case neg
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : ¬p ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))

tactic: have coe_two : 2 = ((2 : ℕ+) : ℕ) := rfl
state_before: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))
state_after: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
coe_two : 2 = ↑2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))

tactic: have hp : p = 2 := by
  rw [← PNat.coe_inj, PNat.pow_coe, ← pow_one 2] at hk
  replace hk :=
    eq_of_prime_pow_eq (prime_iff.1 hp.out) (prime_iff.1 Nat.prime_two) (succ_pos _) hk
  rwa [coe_two, PNat.coe_inj] at hk
state_before: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
coe_two : 2 = ↑2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))
state_after: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp✝ : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
coe_two : 2 = ↑2
hp : p = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))

tactic: subst hp
state_before: case pos
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp✝ : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
coe_two : 2 = ↑2
hp : p = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : 2 ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))

tactic: rw [← PNat.coe_inj, PNat.pow_coe] at hk
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : 2 ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : ↑2 ^ (k + 1) = ↑2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))

tactic: nth_rw 2 [← pow_one 2] at hk
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : ↑2 ^ (k + 1) = ↑2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : ↑2 ^ (k + 1) = ↑(2 ^ 1)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))

tactic: replace hk := Nat.pow_right_injective rfl.le hk
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : ↑2 ^ (k + 1) = ↑(2 ^ 1)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : k + 1 = 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))

tactic: rw [add_left_eq_self] at hk
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : k + 1 = 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : k = 0
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))

tactic: subst hk
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
k : ℕ
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (k + 1))) K)
hk : k = 0
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (k + 1)) / 2) * ↑↑2 ^ (↑2 ^ (k + 1 - 1) * ((↑2 - 1) * (k + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))

tactic: rw [pow_one] at hζ hcycl
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))

tactic: have : natDegree (minpoly K ζ) = 1 := by
  rw [hζ.eq_neg_one_of_two_right, show (-1 : L) = algebraMap K L (-1) by simp,
    minpoly.eq_X_sub_C_of_algebraMap_inj _ (NoZeroSMulDivisors.algebraMap_injective K L)]
  exact natDegree_X_sub_C (-1)
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))
state_after: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))

tactic: rcases Fin.equiv_iff_eq.2 this with ⟨e⟩
state_before: case pos
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))
state_after: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))

tactic: rw [← Algebra.discr_reindex K (hζ.powerBasis K).basis e, coe_basis, powerBasis_gen]
state_before: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ✝).basis =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))
state_after: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => ζ ^ ↑i) ∘ ⇑e.symm) =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))

tactic: norm_num
state_before: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => ζ ^ ↑i) ∘ ⇑e.symm) =
    (-1) ^ (φ (↑2 ^ (0 + 1)) / 2) * ↑↑2 ^ (↑2 ^ (0 + 1 - 1) * ((↑2 - 1) * (0 + 1) - 1))
state_after: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => ζ ^ ↑i) ∘ ⇑e.symm) = 1

tactic: simp_rw [hζ.eq_neg_one_of_two_right, show (-1 : L) = algebraMap K L (-1) by simp]
state_before: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => ζ ^ ↑i) ∘ ⇑e.symm) = 1
state_after: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) = 1

tactic: convert_to (discr K fun i : Fin 1 ↦ (algebraMap K L) (-1) ^ ↑i) = _
state_before: case pos.intro
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) = 1
state_after: case h.e'_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) = discr K fun i => (algebraMap K L) (-1) ^ ↑i

case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (discr K fun i => (algebraMap K L) (-1) ^ ↑i) = 1

tactic: rw [← PNat.coe_inj, PNat.pow_coe, ← pow_one 2] at hk
state_before: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : p ^ (k + 1) = 2
coe_two : 2 = ↑2
⊢ p = 2
state_after: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : ↑p ^ (k + 1) = ↑(2 ^ 1)
coe_two : 2 = ↑2
⊢ p = 2

tactic: replace hk :=
  eq_of_prime_pow_eq (prime_iff.1 hp.out) (prime_iff.1 Nat.prime_two) (succ_pos _) hk
state_before: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : ↑p ^ (k + 1) = ↑(2 ^ 1)
coe_two : 2 = ↑2
⊢ p = 2
state_after: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
coe_two : 2 = ↑2
hk : ↑p = 2
⊢ p = 2

tactic: rwa [coe_two, PNat.coe_inj] at hk
state_before: p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
coe_two : 2 = ↑2
hk : ↑p = 2
⊢ p = 2
state_after: no goals

tactic: rw [hζ.eq_neg_one_of_two_right, show (-1 : L) = algebraMap K L (-1) by simp,
  minpoly.eq_X_sub_C_of_algebraMap_inj _ (NoZeroSMulDivisors.algebraMap_injective K L)]
state_before: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ (minpoly K ζ).natDegree = 1
state_after: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ (X - C (-1)).natDegree = 1

tactic: exact natDegree_X_sub_C (-1)
state_before: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ (X - C (-1)).natDegree = 1
state_after: no goals

tactic: simp
state_before: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
⊢ -1 = (algebraMap K L) (-1)
state_after: no goals

tactic: simp
state_before: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ -1 = (algebraMap K L) (-1)
state_after: no goals

tactic: congr
state_before: case h.e'_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ discr K ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) = discr K fun i => (algebraMap K L) (-1) ^ ↑i
state_after: case h.e'_2.e_b
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm = fun i => (algebraMap K L) (-1) ^ ↑i

tactic: ext i
state_before: case h.e'_2.e_b
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm = fun i => (algebraMap K L) (-1) ^ ↑i
state_after: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) i = (algebraMap K L) (-1) ^ ↑i

tactic: simp only [map_neg, map_one, Function.comp_apply, Fin.coe_fin_one, _root_.pow_zero]
state_before: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ((fun i => (algebraMap K L) (-1) ^ ↑i) ∘ ⇑e.symm) i = (algebraMap K L) (-1) ^ ↑i
state_after: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ (-1) ^ ↑(e.symm i) = 1

tactic: suffices (e.symm i : ℕ) = 0 by simp [this]
state_before: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ (-1) ^ ↑(e.symm i) = 1
state_after: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ↑(e.symm i) = 0

tactic: rw [← Nat.lt_one_iff]
state_before: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ↑(e.symm i) = 0
state_after: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ↑(e.symm i) < 1

tactic: convert (e.symm i).2
state_before: case h.e'_2.e_b.h
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ ↑(e.symm i) < 1
state_after: case h.e'_4
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ 1 = (minpoly K ζ).natDegree

tactic: rw [this]
state_before: case h.e'_4
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
⊢ 1 = (minpoly K ζ).natDegree
state_after: no goals

tactic: simp [this]
state_before: K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this✝ : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
i : Fin 1
this : ↑(e.symm i) = 0
⊢ (-1) ^ ↑(e.symm i) = 1
state_after: no goals

tactic: simp only [discr, traceMatrix_apply, Matrix.det_unique, Fin.default_eq_zero, Fin.val_zero,
  _root_.pow_zero, traceForm_apply, mul_one]
state_before: case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (discr K fun i => (algebraMap K L) (-1) ^ ↑i) = 1
state_after: case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (trace K L) 1 = 1

tactic: rw [← (algebraMap K L).map_one, trace_algebraMap, finrank _ hirr]
state_before: case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ (trace K L) 1 = 1
state_after: case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ φ ↑(2 ^ (0 + 1)) • 1 = 1

tactic: norm_num
state_before: case pos.intro.convert_2
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
coe_two : 2 = ↑2
hp : Fact (Nat.Prime ↑2)
hcycl✝ : IsCyclotomicExtension {2 ^ (0 + 1)} K L
hcycl : IsCyclotomicExtension {2} K L
hζ✝ : IsPrimitiveRoot ζ ↑(2 ^ (0 + 1))
hζ : IsPrimitiveRoot ζ ↑2
hirr : Irreducible (cyclotomic (↑(2 ^ (0 + 1))) K)
this : (minpoly K ζ).natDegree = 1
e : Fin (minpoly K ζ).natDegree ≃ Fin 1
⊢ φ ↑(2 ^ (0 + 1)) • 1 = 1
state_after: no goals

tactic: exact discr_prime_pow_ne_two hζ hirr hk
state_before: case neg
p : ℕ+
K : Type u
L : Type v
ζ : L
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Algebra K L
hp : Fact (Nat.Prime ↑p)
k : ℕ
hcycl : IsCyclotomicExtension {p ^ (k + 1)} K L
hζ : IsPrimitiveRoot ζ ↑(p ^ (k + 1))
hirr : Irreducible (cyclotomic (↑(p ^ (k + 1))) K)
hk : ¬p ^ (k + 1) = 2
⊢ discr K ⇑(IsPrimitiveRoot.powerBasis K hζ).basis =
    (-1) ^ (φ (↑p ^ (k + 1)) / 2) * ↑↑p ^ (↑p ^ (k + 1 - 1) * ((↑p - 1) * (k + 1) - 1))
state_after: no goals