/-
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.
-/
module
public import FormalConjecturesUtilCasas-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:
@[expose] public sectionnamespace 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ᵣ P⊢ HasCasasAlveroProp 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) P⊢ False] 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α:Khα:X - C α ∣ Phαi:X - C α ∣ (hasseDeriv i) P⊢ False
All goals completed! 🐙@[category API, AMS 12]
theorem HasCasasAlveroProp.map_iff {P : K[X]} :
HasCasasAlveroProp (P.map f) ↔ HasCasasAlveroProp P := K:Type u_1L:Type u_2inst✝¹:Field Kinst✝:Field Lf:K →+* LP:K[X]⊢ HasCasasAlveroProp (map f P) ↔ HasCasasAlveroProp P
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 K⊢ HasCasasAlveroProp P ↔ HasCasasAlveroPropᵣ P
K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K⊢ HasCasasAlveroProp P → HasCasasAlveroPropᵣ P
simp_rw K:Type u_1inst✝¹:Field KP:K[X]inst✝:IsAlgClosed K⊢ HasCasasAlveroProp 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.
neg 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
use α' h 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
apply map_injective _ (algebraMap K L).injective h 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)
simpa [this] using eq 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 := by K:Type u_1inst✝¹:Field Kinst✝:CharZero KP:K[X]hP:P.MonichP':HasCasasAlveroProp P⊢ ∃ α, P = (X - C α) ^ P.natDegree
sorry 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 := by 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
sorry 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 := by 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
sorry 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 := by 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
sorry All goals completed! 🐙end CasasAlvero