title: Lemme de Schwartz-Zippel
text: # Lemme de Schwartz-Zippel
  
  En mathématiques, le lemme de Schwartz-Zippel est un résultat important pour évaluer l'égalité entre deux polynômes multivariés. Ce lemme donne naturellement un algorithme probabiliste efficace pour résoudre la question de l'égalité entre polynômes, qui fut historiquement le premier à être prouvé correct. De fait il possède de nombreuses applications en théorie des nombres, en cryptographie, en géométrie, mais également dans les problèmes issues de la théorie des graphes et en théorie de la complexité.
  
  ## Histoire
  
  Le résultat lui-même a été redécouvert plusieurs fois de manière indépendante. En 1922 Øystein Ore publie une première version limitée aux corps finis, puis Richard DeMillo et Richard Lipton publient une version faible en 1978. Le lemme sous sa forme (forte) actuelle est due simultanément à Jack Schwartz et Richard Zippel en 1979, qui l'ont présenté indépendamment à la même conférence. En dépit de ses nombreux auteurs, et bien que n'étant pas issu d'une collaboration entre eux, le résultat est le plus souvent simplement attribué à « Schwartz-Zippel. »
  
  ## Énoncé du lemme
  
  On se place dans un corps commutatif $\mathbb {F}$ et on considère un polynôme multivarié $P\in \mathbb {F} [x_{1},\dotsc ,x_{n}]$, non identiquement nul, de degré $d\geq 0$.
  
  Soit $S$ un sous-ensemble fini non vide de $\mathbb {F}$. Si $s_{1},s_{2},\dotsc ,s_{n}$ sont des éléments tirés uniformément et indépendamment de $S$, alors
  
  $\displaystyle \Pr \left[P(s_{1},\dotsc ,s_{n})=0\right]\leq \delta (n,d,|S|)$
  
  où la fonction $\delta$ est bornée par:
  
  * $d/|S|$ dans la version forte du lemme (due à Schwartz);
  * $nd/|S|$ dans la version faible du lemme (due à DeMillo, Lipton, et Zippel).
  
  Note : dans le cas des corps finis $\mathbb {F} _{q}$, il est possible qu'un polynôme s'évalue toujours à zéro sans être nul pour autant, comme par exemple $x^{2}-x\in \mathbb {F} _{2}[x]$, rendant inopérant le résultat de Schwartz-Zippel ; cette situation est évitée en s'assurant que $d<q$.
  
  ## Preuve du lemme
  
  Nous allons démontrer la version forte, la version faible en découlant naturellement. La preuve s'obtient par récurrence sur $n$.
  
  Le cas $n=1$ correspond simplement au fait qu'un polynôme de degré $d$ possède au plus $d$ racines dans $\mathbb {F}$. Cela se montre aisément par contradiction : s'il y avait plus de $d$ racines, on pourrait écrire $P$ comme un produit d'au moins $d+1$ facteurs de la forme $(x_{1}-\alpha _{i})$ et donc $P$ serait de degré au moins $d+1$, ce qui est faux. Ainsi le cas $n=1$ du théorème est établi.
  
  On suppose alors que le résultat tient pour tous les polynômes en $m<n$ variables, et on procède ainsi : soit $P\in \mathbb {F} [x_{1},\dotsc ,x_{n}]$, on extrait la dépendance en $x_{1}$de la manière suivante :
  
  $P(x_{1},\dotsc ,x_{n})=\sum _{i=0}^{d}x_{1}^{i}P_{i}(x_{2},\dotsc ,x_{n})$
  
  en notant que cela est possible car le corps est commutatif.
  
  Tous les polynômes $P_{i}$ ne peuvent pas être nuls, car sinon $P$ serait identiquement nul, ce qui est faux. Soit alors $m$ le plus grand indice tel que $P_{m}\neq 0$. Par construction, le degré de $x^{m}P_{m}$ est au plus $d$, c'est-à-dire que le degré de $P_{m}$ est au plus $d-m$. L'hypothèse de récurrence donne alors :
  
  $\Pr[P_{m}(s_{2},\dotsc ,s_{n})=0]\leq {\frac {d-m}{|S|}}$
  
  Si $P_{m}$ ne s'annule pas sur $s_{2},\dotsc ,s_{n}$, alors $P$ est au moins de degré $m$. Appliquant encore l'hypothèse de récurrence, on a ainsi
  
  $\Pr \left[P(s_{1},\dotsc ,s_{n})=0\mid P_{m}(s_{2},\dots ,s_{n})\neq 0\right]\leq {\frac {m}{|S|}}$
  
  On conclut de la manière suivante : dénotons par $A$ l'événement correspondant à l'annulation de $P$, et par $B$ l'annulation de $P_{m}$. Les deux formules ci-dessus s'écrivent alors :
  
  $\Pr[B]\leq (d-m)/|S|$
  
  $\Pr[A\mid {\overline {B}}]\leq m/|S|$
  
  Ce qui permet d'écrire
  
  ${\begin{aligned}\Pr[A]&=\Pr[A|B]\Pr[B]+\Pr[A|{\overline {B}}]\Pr[{\overline {B}}]\\&\leq \Pr[B]+\Pr[A|{\overline {B}}]\\&\leq {\frac {d-m}{|S|}}+{\frac {m}{|S|}}\\&={\frac {d}{|S|}}\end{aligned}}$
  
  Ainsi on a montré que le théorème est vrai pour un polynôme en $n$ variables.
  
  ## Test d'identité polynomiale
  
  Le lemme de Schwartz-Zippel donne immédiatement un algorithme probabiliste pour tester la nullité d'un polynôme, ou l'égalité entre deux polynômes (on teste la nullité de leur différence). Il suffit en effet de tirer $n$ valeurs uniformément au hasard et d'évaluer le polynôme, quitte à réitérer la procédure jusqu'à atteindre le niveau de certitude souhaité.
  
  Les meilleures méthodes déterministes pour résoudre ce problème, lorsque le polynôme est fourni sous forme par exemple d'un circuit arithmétique, sont de complexité exponentielle. L'utilisation d'un aléa permet donc un gain substantiel et fait du lemme de Schwartz-Zippel un outil important. Réciproquement, trouver un algorithme déterministe aussi efficace aurait des implications profondes sur la théorie de la $complexité^,.$
  
  Si on considère une classe restreinte de polynômes (généralement exprimés comme des circuits arithmétiques contraints) alors quelques algorithmes déterministes efficaces sont connus, au moins pour la profondeur 2 et $3^,,$ ou des instances très creuses. La profondeur 4 est abordable uniquement pour des classes très réduites.
  
  Parmi les algorithmes probabilistes, celui de Schwartz-Zippel est le plus efficace connu, mais il présente le défaut de consommer beaucoup d'aléa. Il existe des variantes plus parcimonieuses, telles que l'algorithme de Chen et Kao ou Lewin et Vadhan, qui utilisent moins de bits aléatoires mais ont une complexité plus grande.
  
  ## Applications
  
  * En théorie de la complexité. Le lemme joue un rôle clé dans la preuve par Adi Shamir de IP = PSPACE, plus spécifiquement dans l'étape montrant que QSAT appartient à ABPP.
  * En théorie des nombres. Le test de primalité d'Agrawal-Biswas repose sur l'algorithme de Schwartz-Zippel pour tester l'égalité $(1+z)^{n}=1+z^{n}{\bmod {n}}$, qui vaut lorsque $n$ est premier.
  * En géométrie. En 2008, Zeev Dvir a démontré la conjecture de Kakeya dans les corps finis via une preuve remarquablement simple qui s'appuie notamment sur le lemme de Schwartz-Zippel.
  * En logique. L'identité entre diagrammes de décision binaire se ramène au problème de l'identité entre polynômes et peut donc être abordée par les mêmes outils.
  * En théorie des graphes. Via le théorème de Tutte, l'existence d'un couplage équivaut à ce que le polynôme caractéristique d'une certaine matrice soit le polynôme nul, ce que permet de vérifier (en probabilité) le lemme de Schwartz-Zippel.
  * En algorithmique. Si $A,B,C$ sont des matrices carrées de taille $n\times n$, l'identité $AB=C$ peut être vérifiée en temps $O(n^{2})$ en appliquant le lemme, plutôt que $O(n^{3})$ en effectuant le produit et en comparant.
  * En cryptographie. En 2016, Garg et coll. ont proposé une construction d'obfuscation cryptographique dont la sécurité repose notamment sur une extension du lemme de Schwartz-Zippel à des valeurs tirées des distributions générales avec assez d'entropie (à la place d'exiger la distribution uniforme) et possiblement présentant une dépendance entre elles (à la place d'exiger que les valeurs soient indépendantes).
  