Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔬 Puiseux Series Solutions of Algebraic ODEs via $x^a = t^b$

Python License Status CRIStAL

A complete, mathematically rigorous method for detecting and computing Puiseux series solutions (fractional exponent power series) of algebraic ordinary differential equations (AODEs). Developed during a research internship at CRIStAL (Centre de Recherche en Informatique, Signal et Automatique de Lille) under the supervision of François Boulier.

Report: report/main.pdf — Full 15-page paper with proofs, algorithms, and examples.

Preprint: The theoretical results are being prepared for submission.


📖 Overview

The Problem

Given a polynomial differential equation:

$$P(x, y, y', \dots, y^{(R)}) = 0$$

Does it admit a Puiseux series solution?

$$y(x) = \sum_{n=N}^{\infty} a_n , x^{n/s}, \qquad s \in \mathbb{N}^*$$

The Denef–Lipshitz algorithm (1984/1989) decides existence of formal power series ($s = 1$) solutions, recently implemented by Boulier, Lemaire & Vu (2025) in the DifferentialAlgebra package. But when the answer is "no FPS", we need to investigate fractional-exponent series — Puiseux series.

Our Approach: $x^a = t^b$

We apply a monomial change of independent variable:

$$x^a = t^b \quad \Longleftrightarrow \quad t = x^{a/b}, \qquad \gcd(a,b) = 1$$

This transforms the original polynomial $P$ into a new differential polynomial $Q(t, z, \dot{z}, \dots)$, then we multiply by a power of $t$ to clear negative exponents, obtaining a normalized polynomial $K_{a,b}$.

The core insight:

$P$ admits a Puiseux series solution $\Longleftrightarrow$ there exists a pair $(a,b)$ such that $K_{a,b}$ admits a formal power series (FPS) solution — which is decidable by Denef–Lipshitz.

$$\boxed{P(x, y, \dot{y}, \dots) ;\xrightarrow{x^a = t^b}; Q(t, z, \dot{z}, \dots) ;\xrightarrow{\text{normalize}}; K_{a,b}(t, z, \dot{z}, \dots) ;\xrightarrow{\text{Denef–Lipshitz}}; \bar{z}(t) ;\xrightarrow{t = x^{a/b}}; \bar{y}(x)}$$


🎯 Key Results

1. Congruence Condition (fast filter)

Before calling the costly Denef–Lipshitz elimination, we derive an arithmetic necessary condition on $b$. For a monomial of the form $(z')^m / c - t^{f(b)}$, the condition is:

$$f(b) \equiv 0 \pmod{m}$$

This generalizes to multi-monomial $K$ via a generalized congruence framework that analyzes $K^{(n)}|_{t=0}$ at each differentiation order $n$.

2. $a = 1$ Always Suffices

We prove that $a = 1$ is always a valid choice (Proposition 1), so the search reduces to finding admissible $b$ coprime to $a = 1$ — i.e., all $b \geq 2$.

3. Effective Bound $b \leq \deg(P)$

Using the Newton differential polygon, we establish that $b$ need only be searched up to the total degree of $P$ (Theorem 4). This makes the decision procedure finite.

4. Completeness: Monomial Changes are Enough

Any Puiseux solution accessible via an arbitrary algebraic change of variable $t = f(x)$ is already accessible via a monomial change $x^a = t^b$. This follows from a factorization theorem: $f = \varphi \circ (x \mapsto x^{1/s})$ where $\varphi$ is analytic, and analytic reparameterizations preserve FPS existence.

5. Extension to Poles

Puiseux series with poles are handled via the transformation $y = x^{-\nu} w$, reducing to the pole-free case (see docs/poles_puiseux.tex).


🧩 Two Algorithms

Algorithm Purpose Complexity Calls Denef–Lipshitz?
fast_decision Yes/No/Maybe answer $O(N \cdot D^2)$ No
full_solver Compute all Puiseux solutions Dominated by DL Only for passing $b$

fast_decision uses the congruence filter to classify equations into:

  • YES — definitely has a Puiseux solution (polynomial in $z'$ factorizes over $\mathbb{Q}(t)$)
  • NO — definitely has no Puiseux solution (congruence condition fails for all $b$)
  • LIKELY — congruence passes but factorization fails; needs full_solver

📁 Repository Structure

puiseux-differential-algebra/
├── README.md                       # This file
├── LICENSE                         # MIT License
├── report/
│   ├── main.pdf                    # Full research paper (15 pages)
│   ├── main.tex                    # LaTeX source
│   └── chapters/*.tex              # Individual chapters
├── src/
│   ├── __init__.py
│   ├── change_of_variable.py       # x^a = t^b transformation
│   ├── compute_a.py                # Determination of admissible a values
│   ├── utils.py                    # Symbolic utilities (min exponents, etc.)
│   ├── congruence_method.py        # Simple congruence: (z')^m / c - t^{f(b)}
│   ├── multi_monomial.py           # Generalized multi-monomial congruence
│   ├── theorem_with_z.py           # Extension: K contains z (not just z')
│   ├── two_algorithms.py           # fast_decision + full_solver
│   ├── puiseux_pipeline.py         # Complete pipeline (end-to-end)
│   ├── puiseux_solver.py           # Alternative solver (with z support)
│   ├── manual_denef_lipshitz.py    # Manual DL for degenerate cases
│   └── resolve_likely.py           # Factorization-based resolution
├── tests/
│   └── test_pipeline.py            # Test suite (5 test cases)
├── docs/
│   ├── equivalence_theorem.tex     # Proof that monomial changes are complete
│   ├── congruence_generalisee.tex  # Generalized congruence theory
│   ├── changements_exotiques.tex   # Non-monomial changes do not help
│   ├── borne_b_max.tex             # Proof of b ≤ deg(P) bound
│   └── poles_puiseux.tex           # Extension to Puiseux series with poles
└── examples/
    └── basic_examples.py           # Ready-to-run examples

🚀 Quick Start

Prerequisites

  • Python 3.11+
  • SymPy — symbolic computation
  • DifferentialAlgebra — the C extension by François Boulier implementing Rosenfeld-Gröbner and Denef–Lipshitz

Installation

# 1. Clone the repository
git clone https://github.com/AlexGit31/puiseux-differential-algebra.git
cd puiseux-differential-algebra

# 2. Install Python dependencies
pip install sympy

# 3. Install DifferentialAlgebra (C extension)
#    Clone from: https://codeberg.org/francois.boulier/DifferentialAlgebra
cd DifferentialAlgebra/bmi-install-sympy-c99/packaging
python3 setup.py build
pip install -e .

⚠️ Known limitation: The C implementation of DenefLipshitz can fail (bas_Yuple.c:348) when the separant vanishes at $t = 0$ (pure power cases). A Python fallback is under development in src/manual_denef_lipshitz.py.

Basic Usage

from sympy import var
from DifferentialAlgebra import indexedbase
from src.puiseux_pipeline import find_puiseux_solutions, filter_nontrivial

xi = var("xi")
x, y = indexedbase("x,y")

# Example 1: ẏ² - x = 0  →  y = C + (2/3)x^{3/2}
P1 = y[xi]**2 - x
solutions = find_puiseux_solutions(P1)
solutions = filter_nontrivial(solutions)
for s in solutions:
    print(f"(a,b) = ({s['a']}, {s['b']}), y(x) = {s['puiseux_solution']}")

# Example 2: 8ẏ³ - 24ẏ² - 243y + 32 = 0  →  y = 2x + 3x^{3/2} (class P_{(3/2,1)})
P2 = 8*y[xi]**3 - 24*y[xi]**2 - 243*y + 32
solutions = find_puiseux_solutions(P2)

# Example 3: Fast decision (no Denef–Lipshitz)
from src.two_algorithms import fast_decision

result, reason = fast_decision(P1, verbose=True)
print(f"Decision: {result}{reason}")

See examples/basic_examples.py for more.


📊 Examples with Known Solutions

Equation Puiseux Solution $(a, b)$ Method
$\dot{y}^2 - x = 0$ $y = z_0 + \frac{2}{3}x^{3/2}$ $(1, 2)$ DL
$\dot{y}^3 - x^2 = 0$ $y = z_0 + \frac{3}{5}x^{5/3}$ $(1, 3)$ DL
$8\dot{y}^3 - 24\dot{y}^2 - 243y + 32 = 0$ $y = 2x + 3x^{3/2}$ $(1, 2)$ DL
$\ddot{y}^2 - y - x^2 - 1 = 0$ $y = -1 + z_1 x^{5/3} + \dots$ $(1, 3)$ Congruence
$81\dot{y}^4 - 216\dot{y}^3 + 162\dot{y}^2 - 256y - 27 = 0$ Multiple solutions multiple -

📚 Theoretical Background

Denef–Lipshitz Algorithm

The Denef–Lipshitz algorithm decides the existence of formal power series solutions for systems of algebraic ordinary differential equations. The key steps are:

  1. Differentiate the equations to reveal constraints on the series coefficients
  2. Rename derivatives as new variables ($z^{(i)} \to z_i$)
  3. Evaluate at $t = 0$ to obtain algebraic equations in the coefficients
  4. Solve the resulting triangular system

The practical implementation relies on differential elimination (Rosenfeld-Gröbner) as a preprocessing step.

Congruence Framework

For a normalized polynomial of the form:

$$K(t, z, \dot{z}, \dots) = \sum_{i=1}^{N} c_i \cdot \prod_r \big(z^{(r)}\big)^{m_i^{(r)}} \cdot t^{e_i(b)}$$

the $n$-th derivative evaluated at $t = 0$ gives algebraic equations for the series coefficients $z_k$. The generalized congruence condition identifies orders $n$ where a constant term (from a $t$-only monomial with $e_i = n$) coincides with a pure $z$-power term (from a monomial with $m_j > 0$ and $n - e_j \equiv 0 \pmod{m_j}$). This yields $z_k \neq 0$ for $k = (n - e_j)/m_j + 1$, providing a non-trivial FPS branch.

Completeness Theorem

Any algebraic change of variable $t = f(x)$ factors as $\varphi \circ (x \mapsto x^{1/s})$ where $\varphi$ is an invertible FPS. Since analytic reparameterizations preserve the existence of FPS solutions, the search over $(a,b) \in \mathbb{N}^2$ with $\gcd(a,b) = 1$ is complete — no more exotic changes are needed.


🔗 References

  • Denef & Lipshitz (1984) — Power Series Solutions of Algebraic Differential Equations, Math. Ann.
  • Denef & Lipshitz (1989) — Decision Problems for Differential Equations, J. Symbolic Logic
  • Boulier, Lemaire, Vu (2025) — The Denef–Lipshitz Algorithm in Differential Algebra, HAL-05294349
  • Grigoriev & Singer (1991) — Solving ODEs in Terms of Series with Real Exponents, Trans. AMS
  • Cano, Falkensteiner, Sendra (2019) — Puiseux Series Solutions for Autonomous First-Order ODEs, arXiv:1908.09196
  • Ayad (2007) — Complexity of Solving ODEs in Terms of Puiseux Series, arXiv:0705.2127
  • Falkensteiner, Zhang, Vo (2018) — Formal Power Series Solutions of AODEs, arXiv:1803.09646

The DifferentialAlgebra package: codeberg.org/francois.boulier/DifferentialAlgebra


👤 Author

Alexis Evaristo
Research intern, CRIStAL (UMR 9189), Université de Lille
Polytech Lille
📧 alexis.evaristo@polytech-lille.fr

Supervisor: François Boulier, Professor, Université de Lille


📄 License

This project is licensed under the MIT License — see LICENSE for details.

The DifferentialAlgebra package is developed by François Boulier and collaborators (see its own license).


If you use this code in your research, please cite the report and/or the forthcoming preprint.

About

Detecting Puiseux series solutions of algebraic ODEs via the change of variable x^a = t^b. Research conducted at CRIStAL (UMR 9189) under supervision of François Boulier.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages