/- Copyright 2025 The Formal Conjectures Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -/ import FormalConjecturesUtil

Casas-Alvero Conjecture

References:

The Casas-Alvero conjecture states that if a univariate polynomial P of degree d over a field of characteristic zero shares a non-trivial factor with its Hasse derivatives up to order d-1, then P must be of the form (X - α)ᵈ for some α in the field.

The conjecture has been proven for:

    Degrees d ≤ 8

    Degrees of the form p^k where p is prime

    Degrees of the form 2p^k where p is prime

The conjecture is false in positive characteristic p for polynomials of degree p+1.

The conjecture is now claimed to be proven in this paper:

namespace CasasAlveroopen Polynomialvariable {K L : Type*} [Field K] [Field L] {f : K →+* L}

A polynomial P satisfies the Casas-Alvero property if it shares a factor with each of its Hasse derivatives up to order d-1, where d is the degree of P.

def HasCasasAlveroProp (P : K[X]) : Prop := i Finset.range P.natDegree, ¬ IsCoprime P (P.hasseDeriv i)

A stronger version of the Casas-Alvero property, which requires that the polynomial P shares a root with each of its Hasse derivatives up to order deg P - 1. The subscript r indicates "root" in the definition.

def HasCasasAlveroPropᵣ (P : K[X]) : Prop := i Finset.range P.natDegree, α : K, IsRoot P α IsRoot (P.hasseDeriv i) α@[category API, AMS 12] theorem HasCasasAlveroPropᵣ.hasCasasAlveroProp {P : K[X]} (hca : HasCasasAlveroPropᵣ P) : HasCasasAlveroProp P := K:Type u_1inst✝:Field KP:K[X]hca:HasCasasAlveroPropᵣ PHasCasasAlveroProp P K:Type u_1inst✝:Field KP:K[X]hca:HasCasasAlveroPropᵣ Pi:hi:i Finset.range P.natDegreecoprime:IsCoprime P ((hasseDeriv i) P)False simp_rw K:Type u_1inst✝:Field KP:K[X]hca:HasCasasAlveroPropᵣ Pi:hi:i Finset.range P.natDegreecoprime:IsCoprime P ((hasseDeriv i) P)FalseK:Type u_1inst✝:Field KP:K[X]hca: i Finset.range P.natDegree, α, P.IsRoot α ((hasseDeriv i) P).IsRoot αi:hi:i Finset.range P.natDegreecoprime:IsCoprime P ((hasseDeriv i) P)False K:Type u_1inst✝:Field KP:K[X]i:hi:i Finset.range P.natDegreecoprime:IsCoprime P ((hasseDeriv i) P)hca: i Finset.range P.natDegree, α, X - C α P X - C α (hasseDeriv i) PFalse] at hca K:Type u_1inst✝:Field KP:K[X]i:hi:i Finset.range P.natDegreecoprime:IsCoprime P ((hasseDeriv i) P)hca: i Finset.range P.natDegree, α, X - C α P X - C α (hasseDeriv i) Pα:K:X - C α Phαi:X - C α (hasseDeriv i) PFalse All goals completed! 🐙All goals completed! 🐙@[category API, AMS 12] theorem hasCasasAlveroProp_iffᵣ {P : K[X]} [IsAlgClosed K] : HasCasasAlveroProp P HasCasasAlveroPropᵣ P := K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed KHasCasasAlveroProp P HasCasasAlveroPropᵣ P K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed KHasCasasAlveroProp P HasCasasAlveroPropᵣ P simp_rw K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed KHasCasasAlveroProp P HasCasasAlveroPropᵣ PK:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K(∀ i Finset.range P.natDegree, ¬IsCoprime P ((hasseDeriv i) P)) HasCasasAlveroPropᵣ P K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K(∀ i Finset.range P.natDegree, ¬IsCoprime P ((hasseDeriv i) P)) i Finset.range P.natDegree, α, P.IsRoot α ((hasseDeriv i) P).IsRoot α K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K(∀ i Finset.range P.natDegree, ¬ (a : K), (aeval a) P 0 (aeval a) ((hasseDeriv i) P) 0) i Finset.range P.natDegree, α, P.IsRoot α ((hasseDeriv i) P).IsRoot α K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K(∀ i Finset.range P.natDegree, ¬ (a : K), eval a P 0 eval a ((hasseDeriv i) P) 0) i Finset.range P.natDegree, α, P.IsRoot α ((hasseDeriv i) P).IsRoot α] K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K(∀ i Finset.range P.natDegree, a, eval a P = 0 eval a ((hasseDeriv i) P) = 0) i Finset.range P.natDegree, α, P.IsRoot α ((hasseDeriv i) P).IsRoot α All goals completed! 🐙universe u in

Note that whether we use HasCasasAlveroProp or HasCasasAlveroPropᵣ to state the Casas-Alvero conjecture, we obtain the following equivalent statements.

h: {K : Type u} [inst : Field K] [CharZero K] (P : K[X]), P.Monic HasCasasAlveroPropᵣ P α, P = (X - C α) ^ P.natDegreeK:Type ux✝¹:Field Kx✝:CharZero KP:K[X]hP:P.Monichca:HasCasasAlveroProp PL:Type u := AlgebraicClosure Kα:Leq:map (algebraMap K L) P = (X - C α) ^ (map (algebraMap K L) P).natDegreeh0:¬P.natDegree = 0α':K := -P.nextCoeff / P.natDegreethis:(algebraMap K L) α' = α α, P = (X - C α) ^ P.natDegree h: {K : Type u} [inst : Field K] [CharZero K] (P : K[X]), P.Monic HasCasasAlveroPropᵣ P α, P = (X - C α) ^ P.natDegreeK:Type ux✝¹:Field Kx✝:CharZero KP:K[X]hP:P.Monichca:HasCasasAlveroProp PL:Type u := AlgebraicClosure Kα:Leq:map (algebraMap K L) P = (X - C α) ^ (map (algebraMap K L) P).natDegreeh0:¬P.natDegree = 0α':K := -P.nextCoeff / P.natDegreethis:(algebraMap K L) α' = αP = (X - C α') ^ P.natDegree h: {K : Type u} [inst : Field K] [CharZero K] (P : K[X]), P.Monic HasCasasAlveroPropᵣ P α, P = (X - C α) ^ P.natDegreeK:Type ux✝¹:Field Kx✝:CharZero KP:K[X]hP:P.Monichca:HasCasasAlveroProp PL:Type u := AlgebraicClosure Kα:Leq:map (algebraMap K L) P = (X - C α) ^ (map (algebraMap K L) P).natDegreeh0:¬P.natDegree = 0α':K := -P.nextCoeff / P.natDegreethis:(algebraMap K L) α' = αmap (algebraMap K L) P = map (algebraMap K L) ((X - C α') ^ P.natDegree) All goals completed! 🐙section conjecturevariable [CharZero K] (P : K[X]) (hP : Monic P)include hP

The Casas-Alvero conjecture states that in characteristic zero, if a monic polynomial P has the Casas-Alvero property, then P = (X - α)ᵈ for some α.

@[category research open, AMS 12] theorem casas_alvero_conjecture (hP' : HasCasasAlveroProp P) : α : K, P = (X - C α) ^ P.natDegree := K:Type u_1inst✝¹:Field Kinst✝:CharZero KP:K[X]hP:P.MonichP':HasCasasAlveroProp P α, P = (X - C α) ^ P.natDegree All goals completed! 🐙

The Casas-Alvero conjecture holds for polynomials of prime power degree. This was proved by Graf von Bothmer, Labs, Schicho, and van de Woestijne.

Reference: The Casas-Alvero conjecture for infinitely many degrees

@[category research solved, AMS 12] theorem casas_alvero.prime_power (p k : ) (hp : p.Prime) (hd : P.natDegree = p^k) (hP' : HasCasasAlveroProp P) : α : K, P = (X - C α) ^ P.natDegree := K:Type u_1inst✝¹:Field Kinst✝:CharZero KP:K[X]hP:P.Monicp:k:hp:Nat.Prime phd:P.natDegree = p ^ khP':HasCasasAlveroProp P α, P = (X - C α) ^ P.natDegree All goals completed! 🐙

The Casas-Alvero conjecture holds for polynomials of degree 2p^k where p is prime. This was proved by Graf von Bothmer, Labs, Schicho, and van de Woestijne.

Reference: The Casas-Alvero conjecture for infinitely many degrees

@[category research solved, AMS 12] theorem casas_alvero.double_prime_power (p k : ) (hp : p.Prime) (hd : P.natDegree = 2 * p^k) (hP' : HasCasasAlveroProp P) : α : K, P = (X - C α) ^ P.natDegree := K:Type u_1inst✝¹:Field Kinst✝:CharZero KP:K[X]hP:P.Monicp:k:hp:Nat.Prime phd:P.natDegree = 2 * p ^ khP':HasCasasAlveroProp P α, P = (X - C α) ^ P.natDegree All goals completed! 🐙end conjecture

The Casas-Alvero conjecture fails in positive characteristic p for polynomials of degree p + 1. This was shown by Graf von Bothmer, Labs, Schicho, and van de Woestijne.

Reference: The Casas-Alvero conjecture for infinitely many degrees

Formal proof linked here provided by AlphaProof.

@[category research solved, AMS 12, formal_proof using formal_conjectures at "https://github.com/mzhorvath1/formal-conjectures/blob/4f2343508f2c157f35abb7be4814bd550280ce81/FormalConjectures/Paper/CasasAlvero.lean#163"] theorem casas_alvero.positive_char_counterexample {p : } (hp : p.Prime) : (K : Type*) (_ : Field K) (_ : CharP K p), let P := X ^ (p + 1) - X ^ p Monic P HasCasasAlveroProp P ¬ α : K, P = (X - C α) ^ P.natDegree := p:hp:Nat.Prime p K x, (_ : CharP K p), let P := X ^ (p + 1) - X ^ p; P.Monic HasCasasAlveroProp P ¬ α, P = (X - C α) ^ P.natDegree All goals completed! 🐙end CasasAlvero