# Zéro puissance zéro

Zéro à la puissance zéro, noté 0$^0$, est une expression mathématique qui n'a pas de valeur évidente. Il n'existe pas de consensus quant à la meilleure approche : définir l'expression (en lui donnant la valeur 1) ou la laisser non définie. Plusieurs justifications existent pour chacune des possibilités, et celles-ci sont décrites dans cet article. En algèbre et en théorie des ensembles, il est généralement convenu que la réponse est 0$^0$ = 1, alors qu'en analyse, l'expression n'est généralement pas définie. Les programmes informatiques ont également différentes méthodes pour gérer cette expression.

## Exposants entiers

De nombreuses formules impliquant des entiers naturels nécessitent de définir 0$^0$ = 1. Par exemple, si l'on voit b$^0$ comme un produit vide, il faut le définir comme étant 1, même lorsque b = 0. En combinatoire, b$^0$ est le nombre de 0-uplets dans un ensemble à b éléments ; il y en a exactement un, même si b = 0. De manière équivalente, l'interprétation de 0$^0$ dans la théorie des ensembles est le nombre de fonctions de l'ensemble vide dans l'ensemble vide ; il y a exactement une telle fonction, la fonction vide.

## Polynômes et séries entières

De façon similaire, il est souvent nécessaire de définir 0$^0$ = 1 quand on travaille avec des polynômes.
Un polynôme est une expression de la forme $a_{0}X^{0}+\cdots +a_{n}X^{n}$ où $X$ est l'indéterminée et les coefficients $a_{n}$ sont des nombres réels (ou plus généralement des éléments d'un anneau). L'ensemble de ces polynômes est noté $\mathbb {R} [X]$ et forme lui-même un anneau. Le polynôme $X^{0}$ est l'unité de cet anneau, en d'autres termes c'est l'unique élément vérifiant la propriété suivante : $X^{0}$ multiplié avec n'importe quel autre polynôme $P(X)$ donne simplement $P(X)$. Les polynômes peuvent être « évalués » en remplaçant X par n'importe quel nombre réel. Plus précisément, étant donné un nombre réel $x_{0}$, il existe un unique morphisme d'anneaux $\operatorname {ev} _{x_{0}}:\mathbb {R} [X]\to \mathbb {R}$ tel que $\operatorname {ev} _{x_{0}}(x^{1})=x_{0}$, appelé morphisme d'évaluation. Étant un morphisme d'anneaux, il satisfait alors $\operatorname {ev} _{x_{0}}(x^{0})=1$. En résumé, $x^{0}=1$ pour toutes les spécialisations de x en un nombre réel, y compris x = 0.
Cette perspective est importante pour de nombreuses identités polynomiales en combinatoire. Par exemple, la formule du binôme de Newton $(1+x)^{n}=\sum _{k=0}^{n}{\binom {n}{k}}x^{k}$ n'est valable pour x = 0 que si 0$^0$ = 1. De même, la définition des anneaux de séries entières demandent que $x^{0}=1$ pour toute valeur de x. Ainsi, les identités comme ${\frac {1}{1-x}}=\sum _{n=0}^{\infty }x^{n}$ et $e^{x}=\sum _{n=0}^{\infty }{\frac {x^{n}}{n!}}$ ne sont valables en x = 0 que si 0$^0$ = 1.

## Exposants réels

Les limites faisant appel à des opérations algébriques peuvent souvent être évaluées en remplaçant des sous-expressions par des limites. Si l'expression qui en résulte ne permet pas de déterminer la limite initiale, l'expression est appelée une forme indéterminée.
Lorsque f et g sont des fonctions à valeurs réelles qui tendent toutes deux vers 0 en un certain point t pouvant être un nombre réel ou ±∞ (avec f(t) > 0), alors la fonction f(t)$^{g(t)}$ n'a pas forcément comme limite 1. Suivant l'expression exacte de f et g, la limite de f(t)$^{g(t)}$ peut être n'importe quel nombre réel positif, ou +∞, ou diverger. Par exemple, les fonctions ci-dessous sont de la forme f(t)$^{g(t)}$ avec f(t), g(t) → 0 quand t → 0$^+$, mais les limites sont différentes :
       $\lim _{t\to 0^{+}}{t}^{t}=1,\quad \lim _{t\to 0^{+}}\left(e^{-{\frac {1}{t^{2}}}}\right)^{t}=0,\quad \lim _{t\to 0^{+}}\left(e^{-{\frac {1}{t^{2}}}}\right)^{-t}=+\infty ,\quad \lim _{t\to 0^{+}}\left(e^{-{\frac {1}{t}}}\right)^{at}=e^{-a}$.
En d'autres termes, la fonction de deux variables $(x,y)\mapsto x^{y}$, qui est continue sur l'ensemble {(x, y) : x > 0}, ne peut être prolongée en une fonction continue en (0, 0). Toutefois, sous certaines conditions, par exemple lorsque f et g sont deux fonctions analytiques et f est positive sur un intervalle ouvert ]0, b[, la limite à droite est toujours 1$^,$$^,$.

## Exposants complexes

Dans le plan complexe, la fonction z$^w$ peut être définie pour les z non nuls en choisissant une branche de log z puis en prenant z$^w$ = e$^{wlogz}$. Cela ne permet pas de définir 0$^w$ car il n'y a pas de branche de log z définie en z = 0, et encore moins dans un voisinage de 0$^,$$^,$.

## Histoire de différents points de vue

Le débat sur la définition de $0^{0}$ existe depuis au moins le XIXe siècle. À l'époque, la plupart des mathématiciens étaient d'accord avec le fait que $0^{0}=1$, jusqu'à 1821 quand Cauchy lista $0^{0}$ dans une table des formes indéterminées, au même rang que ${\frac {0}{0}}$.
Dans les années 1830, Libri$^,$ publia un argument, pour démontrer que $0^{0}=1$. Möbius prit son parti, affirmant que $\lim _{t\to 0^{+}}f(t)^{g(t)}\;=\;1$ si $\lim _{t\to 0^{+}}f(t)\;=\;\lim _{t\to 0^{+}}g(t)\;=\;0$. Un commentateur, qui signa simplement « S », fournit le contre-exemple $(e^{-1/t})^{t}$. Ce contre exemple rendant caduque l'argument de Libri ce qui calma le débat pour quelque temps.
Plus de détails historiques se trouvent dans les travaux de Donald Knuth (1992).
Aujourd'hui, les mathématiciens interprètent les arguments ci-dessus de deux manières :
* certains disent que la valeur de $0^{0}$ dépend du contexte, et donc que définir l'expression pose problème ;
* d'autres (et particulièrement Donald Knuth) pensent que $0^{0}$ devrait toujours être défini comme étant égal à 1.

## Dans les programmes informatiques
### Standard IEEE sur les nombres à virgule flottante

La norme IEEE 754 sur les nombres à virgule flottante est utilisée dans la conception de la plupart des bibliothèques qui traitent ces nombres. Elle recommande un certain nombre d'opérations pour calculer une puissance :
* pow définit 0$^0$ comme étant égal à 1. Si la puissance est un entier, le résultat est le même que pour la fonction pown, sinon le résultat est le même que pour powr (sauf certains cas exceptionnels).
* pown définit 0$^0$ comme étant égal à 1. La puissance doit nécessairement être un entier. La valeur est définie pour les bases négatives ; par exemple, pown(-3,5) est -243.
* powr traite 0$^0$ comme étant NaN (Not-a-Number – non défini). Le résultat est aussi NaN pour les cas comme powr(-3,2) où la base est négative. La valeur est définie par e$^{exposant}$$^{×log(base)}$.
La variante pow est inspirée par la fonction pow fonction de la norme C99, principalement à des fins de compatibilité. Elle est surtout utile pour les langages de programmation avec une seule fonction « puissance ». Les variantes pown et powr ont été introduites en raison de conflits d'utilisation de la fonction puissance et des différents points de vue indiqués ci-dessus.

### Dans les langages de programmation

Les bibliothèques standard du C et du C++ ne spécifient pas le résultat de 0$^0$ (une erreur de domaine peut se produire). Dans la norme C99, plus précisément son annexe normative F, le résultat est demandé être égal à 1, car cette valeur est plus utile que NaN pour les applications les plus importantes (par exemple, avec des puissances entières). Le standard Java et la méthode Système.Math.Pow du framework .NET traitent aussi 0$^0$ comme étant égal à 1.

### Logiciels mathématiques

* SageMath simplifie b$^0$ en 1, même si des contraintes sont placées sur b. Il prend 0$^0$ comme étant égal à 1, mais ne simplifie pas 0$^x$ pour d'autres valeurs de x.
* Maple fait la distinction entre les entiers 0, 1, ... et les flottants 0.0, 1.0, ... (généralement notés 0., 1., ...). Si x ne s'évalue pas en un nombre, alors les expressions x$^0$ et x$^{0.0}$ sont respectivement évaluées en 1 (entier) et 1.0 (float). D'autre part, l'expression 0$^x$ est évaluée en l'entier 0, alors que 0.0$^x$ est évalué comme 0.$^x$. Si à la fois la base et l'exposant sont égaux à zéro (ou s'évaluent en zéro), le résultat est de type Float(non défini) si l'exposant est le float 0.0 ; avec un entier comme exposant, l'évaluation de 0$^0$ donne l'entier 1, tandis que celle de 0.$^0$ donne le float 1.0.
* Macsyma simplifie également b$^0$ en 1, même si aucune contrainte n'est placée sur b, mais émet un message d'erreur pour 0$^0$. Pour x>0, il simplifie 0$^x$ en 0.
* Mathematica et WolframAlpha simplifient b$^0$ en 1, même si des contraintes sont placés sur b. Alors que Mathematica ne simplifie pas 0$^x$, WolframAlpha retourne deux résultats, 0 pour x > 0, et « indéterminé » pour un nombre réel x. Mathematica et WolframAlpha déclarent tous les deux 0$^0$ comme étant une « forme indéterminée ».
* Matlab, Python, Magma, GAP, Singular, PARI/GP et les calculatrices de Google et des iPhone évaluent 0$^0$ en 1.