Evaluating cyclotomic polynomials #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4. This file states some results about evaluating cyclotomic polynomials in various different ways.
Main definitions #
polynomial.eval(₂)_one_cyclotomic_prime(_pow)
:eval 1 (cyclotomic p^k R) = p
.polynomial.eval_one_cyclotomic_not_prime_pow
: Otherwise,eval 1 (cyclotomic n R) = 1
.polynomial.cyclotomic_pos
:∀ x, 0 < eval x (cyclotomic n R)
if2 < n
.
@[simp]
theorem
polynomial.eval_one_cyclotomic_prime
{R : Type u_1}
[comm_ring R]
{p : ℕ}
[hn : fact (nat.prime p)] :
polynomial.eval 1 (polynomial.cyclotomic p R) = ↑p
@[simp]
theorem
polynomial.eval₂_one_cyclotomic_prime
{R : Type u_1}
{S : Type u_2}
[comm_ring R]
[semiring S]
(f : R →+* S)
{p : ℕ}
[fact (nat.prime p)] :
polynomial.eval₂ f 1 (polynomial.cyclotomic p R) = ↑p
@[simp]
theorem
polynomial.eval_one_cyclotomic_prime_pow
{R : Type u_1}
[comm_ring R]
{p : ℕ}
(k : ℕ)
[hn : fact (nat.prime p)] :
polynomial.eval 1 (polynomial.cyclotomic (p ^ (k + 1)) R) = ↑p
theorem
polynomial.cyclotomic_pos
{n : ℕ}
(hn : 2 < n)
{R : Type u_1}
[linear_ordered_comm_ring R]
(x : R) :
0 < polynomial.eval x (polynomial.cyclotomic n R)
theorem
polynomial.cyclotomic_pos_and_nonneg
(n : ℕ)
{R : Type u_1}
[linear_ordered_comm_ring R]
(x : R) :
(1 < x → 0 < polynomial.eval x (polynomial.cyclotomic n R)) ∧ (1 ≤ x → 0 ≤ polynomial.eval x (polynomial.cyclotomic n R))
theorem
polynomial.cyclotomic_pos'
(n : ℕ)
{R : Type u_1}
[linear_ordered_comm_ring R]
{x : R}
(hx : 1 < x) :
0 < polynomial.eval x (polynomial.cyclotomic n R)
Cyclotomic polynomials are always positive on inputs larger than one.
Similar to cyclotomic_pos
but with the condition on the input rather than index of the
cyclotomic polynomial.
theorem
polynomial.cyclotomic_nonneg
(n : ℕ)
{R : Type u_1}
[linear_ordered_comm_ring R]
{x : R}
(hx : 1 ≤ x) :
0 ≤ polynomial.eval x (polynomial.cyclotomic n R)
Cyclotomic polynomials are always nonnegative on inputs one or more.
theorem
polynomial.sub_one_pow_totient_lt_cyclotomic_eval
{n : ℕ}
{q : ℝ}
(hn' : 2 ≤ n)
(hq' : 1 < q) :
(q - 1) ^ n.totient < polynomial.eval q (polynomial.cyclotomic n ℝ)
theorem
polynomial.sub_one_pow_totient_le_cyclotomic_eval
{q : ℝ}
(hq' : 1 < q)
(n : ℕ) :
(q - 1) ^ n.totient ≤ polynomial.eval q (polynomial.cyclotomic n ℝ)
theorem
polynomial.cyclotomic_eval_lt_add_one_pow_totient
{n : ℕ}
{q : ℝ}
(hn' : 3 ≤ n)
(hq' : 1 < q) :
polynomial.eval q (polynomial.cyclotomic n ℝ) < (q + 1) ^ n.totient
theorem
polynomial.cyclotomic_eval_le_add_one_pow_totient
{q : ℝ}
(hq' : 1 < q)
(n : ℕ) :
polynomial.eval q (polynomial.cyclotomic n ℝ) ≤ (q + 1) ^ n.totient
theorem
polynomial.sub_one_pow_totient_lt_nat_abs_cyclotomic_eval
{n q : ℕ}
(hn' : 1 < n)
(hq : q ≠ 1) :
(q - 1) ^ n.totient < (polynomial.eval ↑q (polynomial.cyclotomic n ℤ)).nat_abs
theorem
polynomial.sub_one_lt_nat_abs_cyclotomic_eval
{n q : ℕ}
(hn' : 1 < n)
(hq : q ≠ 1) :
q - 1 < (polynomial.eval ↑q (polynomial.cyclotomic n ℤ)).nat_abs