Below degree , a polynomial with has the form
ProvedCurveSymmetry.anti_radial_formLet be an integer and let be a primitive -th root of unity. Let be a polynomial of total degree that changes sign under the substitution , that is, . Collect the coefficients of of weight and of weight into two polynomials in one variable : and .
Then
and both degrees are bounded: and .
This is the algebraic core of equation (5) of the note. In the coordinates , the substitution is the rotation ; in the proof of Theorem 1, a rotation of order larger than the degree satisfies equation (4) with sign , and the statement shows that only the weights can then occur. The refinement for irreducible polynomials with conjugate-symmetric coefficients, giving with nonconstant, is derived from it.
Formalization Note: degrees are natural numbers, with , and is computed in , where is truncated at .
import Definitions.Def_CurveSymmetry_01_RealLoci import Definitions.Def_CurveSymmetry_02_FamilyBasics import Definitions.Def_CurveSymmetry_05_FamilyFunctionField import Mathlib.Algebra.MvPolynomial.Nilpotent import Mathlib.Algebra.MvPolynomial.NoZeroDivisors import Mathlib.Algebra.Polynomial.FieldDivision import Mathlib.Algebra.Polynomial.Reverse import Mathlib.Analysis.Complex.Isometry import Mathlib.Analysis.Complex.Polynomial.Basic import Mathlib.Analysis.Normed.Affine.MazurUlam import Mathlib.Data.Complex.Basic import Mathlib.RingTheory.MvPolynomial.Homogeneous import Mathlib.RingTheory.MvPolynomial.IrreducibleQuadratic import Mathlib.RingTheory.Polynomial.Eisenstein.Criterion import Mathlib.RingTheory.Polynomial.GaussLemma import Mathlib.RingTheory.RootsOfUnity.Complex import Mathlib.RingTheory.RootsOfUnity.PrimitiveRoots import Mathlib.Tactic open CurveSymmetry set_option autoImplicit false open MvPolynomial
theorem CurveSymmetry.anti_radial_form {m : ℕ} (hm : 0 < m) {ζ : ℂ} (hζ : IsPrimitiveRoot ζ (2 * m))
{P : BPoly} (hdeg : P.totalDegree < 2 * m) (hanti : rotate ζ P = -P) :
P = (X 0 : BPoly) ^ m * Polynomial.aeval ((X 0 : BPoly) * X 1) (weightPolynomial P m) +
(X 1 : BPoly) ^ m *
Polynomial.aeval ((X 0 : BPoly) * X 1) (oppositeWeightPolynomial P m) ∧
(weightPolynomial P m).natDegree ≤ (P.totalDegree - m) / 2 ∧
(oppositeWeightPolynomial P m).natDegree ≤ (P.totalDegree - m) / 2 := by sorry