{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MPI 4 - Cours 2\n",
    "\n",
    "## Un peu de calcul non commutatif : séries rationnelles et langages rationnels\n",
    "\n",
    "Considérons l'alphabet $A=\\{a,b\\}$, et intéressons nous au langage $L=(a+ba)^*$.\n",
    "\n",
    "L'ensemble $C=\\{a,ba\\}$ est ce qu'on appelle un *code préfixe*, c'est à dire que s'il contient un mot\n",
    "$w$, il ne contient aucun préfixe $u$ de $w$ (un mot tel que $w=uv$ avec $u,v\\not=\\epsilon$).\n",
    "C'est un *code*, car tout mot de $C^*$ n'a qu'une seule écriture comme concaténation d'éléments de $C$ (unicité du déchiffrage, ou encore, non-ambiguïté de la grammaire) :\n",
    "$$w=baaabaaababaaa \\rightarrow ba.a.a.ba.a.a.ba.ba.a.a$$\n",
    "Le langage $L$  est reconnu par l'automate\n",
    "![automate](automate.png)\n",
    "Soit  $u_n$ le nombre de mots de longueur $n$ dans $L$. On a \n",
    "$$L = \\{\\epsilon, a, ba, aa, baa, aba, aaa, baba,baaa,abaa,aaba,aaaa,\\cdots\\}$$\n",
    "et donc\n",
    "$$u_0=1,\\ u_1=1,\\ u_2=2,\\ u_3=3,\\ u_4=5,\\cdots$$\n",
    "Si on note $L_n$ l'ensemble des mots de longueur $n$ dans $L$, on voit que pour $n\\ge 2$,\n",
    "$$L_n=aL_{n-1}+baL_{n-2}$$\n",
    "puisqu'un mot de $L$ commence soit par $a$, soit par $ba$. Donc, $u_n=u_{n-1}+u_{n-2}$ avec $u_0=1$, $u_1=1$,\n",
    "c'est donc la suite de Fibonacci décalée de 1.\n",
    "\n",
    "Une technique classique pour étudier ce genre de problème est d'identifier les mots à des monômes en variables non commutatives, la concaténation devenant alors la multiplication et son élément neutre $\\epsilon$ le scalaire 1.\n",
    "Le code $C$ s'identifie alores au polynôme\n",
    "$$C= a+ba$$\n",
    "et le langage $L$ s'identifie à la série formelle\n",
    "$$L = C^* =\\sum_{n\\ge 0}C^n = 1+C+C^2+\\cdots = \\frac1{1-C}=\\frac1{1-a-ba}=1+a+ba+baa+aba+aaa+\\cdots.$$\n",
    "On trouve alors automatiquement la série génératrice de $u_n$ en remplaçant $a$ et $b$ par $x$ dans cette\n",
    "expression, car les mots de longueur $n$ deviennent tous $x^n$\n",
    "$$U(x)=\\frac1{1-x-x^2}=1+x+2x^2+3x^3+5x^4+8x^3+\\cdots$$\n",
    "C'est donc la suite de Fibonacci décalée $u_n=F_{n+1}.$\n",
    "\n",
    "D'une manière générale, l'expression $C^*$ se traduit par $(1-C)^{-1}$, mais on ne peut en déduire le dénombrement des mots par longueur que si l'expression est non ambiguë. Par exemple, $C=a+ab+ba$ n'est pas un code, puisque\n",
    "$w=aba$ possède deux dérivations : $w=a.ba = ab.a$.\n",
    "Dans la série non commutative\n",
    "$$(1-a-ab-ba)^{-1}=1+a+ab+ba+ 2aba+aab+baa+aaa+\\cdots$$\n",
    "le coefficient d'un mot est le nombre de ses factorisations en éléments de $C$. On peut montrer en construisant l'automate minimal de $C^*$ qu'une expression non ambigue serait\n",
    "$$((b+a(a+ba)^*bb)a)^*(\\epsilon+a((a+ba)^*(\\epsilon+b))$$\n",
    "En remplaçant $a$ et $b$ par $x$ et les $X^*$ par des $(1-X)^{-1}$, on trouve pour la série génératrice\n",
    "$$\n",
    "\\frac1{1-x-2\\,{x}^{2}+{x}^{3}}=1+x+3\\,{x}^{2}+4\\,{x}^{3}+9\\,{x}^{4}+14\\,{x}^{5}+28\\,{x}^{6}+47\\,{x}^{7}+89\\,{x}^{8}+155\\,{x}^{9}+286\\,{x}^{10}+507\\,{x}^{11}+O \\left( {x}^{12} \\right)$$\n",
    "Si on avait fait cela avec l'expression ambiguë, on aurait trouvé le résultat faux\n",
    "$$\\frac1{1-x-2x^2}=1+x+3\\,{x}^{2}+5\\,{x}^{3}+11\\,{x}^{4}+21\\,{x}^{5}+43\\,{x}^{6}+85\\,{x}^{7}+171\\,{x}^{8}+341\\,{x}^{9}+683\\,{x}^{10}+1365\\,{x}^{11}+O \\left( {x}^{12} \\right)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  La décomposition en éléments simples"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Lorsque la série génératrice d'une suite représente une fraction rationnelle, on peut la décomposer en éléments simples, pourvu que l'on connaisse les racines du dénominateur : si\n",
    "$$U(x) = \\frac{A(x)}{B(x)}$$\n",
    "avec \n",
    "$$B(x)=(x-\\beta_1)^{m_1}(x-\\beta_2)^{m_2}\\cdots(x-\\beta_n)^{m_n}$$\n",
    "alors, on peut trouver une décomposition de la forme\n",
    "$$U(x)=P(x) +\\sum_{k=1}^n\\sum_{i_k=1}^{m_k}\\frac{a_{ik}}{(x-\\beta_k)^{i_k}}$$\n",
    "où $P(x)$ est un polynôme (qui n'apparaît que si le degré de $A$ est supérieur ou égal à celui de $B$, auquel cas c'est le quotient de $A$ par $B$), et pour chaque racine $\\beta$, on a un élément simple $\\frac1{(x-\\beta)^k}$ pour $k$ de 1 jusqu'à la multiplicité $m$ de $\\beta$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAPhJREFUKJGl0i9LREEUh+FndaMfwGYxaNEvoNEVLIJFDGLQYBMEQWWFGxQWNAhGi2KTjRbFbLIYBIM2QcFkMRh2DTPgZXYuwnrKzDnze+f8makVRaFfG0j8G3SxkMRrOItnrSp4Cx3sY7AUP8IKTrFdBT/gAuNYjrFdbOIS62VxPdNKE4soMIQDXMfLOmVhmhlecYwRnOBOmMF3KszB8FHar+IrJ8rBS8KA3qO/UZGgB57DOR4xgSesYewveAptoedGLH1PGGqrF/2FJ3GFT8zgLcbbuMc8pnPwqPAUXcziJdHsxPUwhet4xnCurGi3wvesLLsv+xf8A0vhLIYSfI/nAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$\\displaystyle x$"
      ],
      "text/plain": [
       "x"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sympy import *\n",
    "init_printing()\n",
    "var('x')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\frac{2 x^{12} - x^{3} + x + 2}{\\left(1 - 2 x\\right)^{3} \\left(1 - x\\right)^{4} \\left(3 x + 1\\right)^{2}}$"
      ],
      "text/plain": [
       "         12    3              \n",
       "      2⋅x   - x  + x + 2      \n",
       "──────────────────────────────\n",
       "         3        4          2\n",
       "(1 - 2⋅x) ⋅(1 - x) ⋅(3⋅x + 1) "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exemple au hasard\n",
    "U = (2*x**12-x**3+x+2)/((1-2*x)**3*(1+3*x)**2*(1-x)**4);U"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle - \\frac{x^{3}}{36} - \\frac{29 x^{2}}{216} - \\frac{85 x}{216} - \\frac{3485}{3888} + \\frac{1054999}{3888000 \\left(3 x + 1\\right)} + \\frac{45271}{388800 \\left(3 x + 1\\right)^{2}} - \\frac{153003}{4000 \\left(2 x - 1\\right)} - \\frac{1389}{80 \\left(2 x - 1\\right)^{2}} - \\frac{973}{160 \\left(2 x - 1\\right)^{3}} + \\frac{2213}{128 \\left(x - 1\\right)} - \\frac{411}{64 \\left(x - 1\\right)^{2}} + \\frac{1}{2 \\left(x - 1\\right)^{3}} - \\frac{1}{4 \\left(x - 1\\right)^{4}}$"
      ],
      "text/plain": [
       "   3       2                                                                  \n",
       "  x    29⋅x    85⋅x   3485        1054999              45271             15300\n",
       "- ── - ───── - ──── - ──── + ───────────────── + ───────────────── - ─────────\n",
       "  36    216    216    3888   3888000⋅(3⋅x + 1)                   2   4000⋅(2⋅x\n",
       "                                                 388800⋅(3⋅x + 1)             \n",
       "\n",
       "                                                                              \n",
       "3            1389            973             2213          411           1    \n",
       "───── - ───────────── - ────────────── + ─────────── - ─────────── + ─────────\n",
       " - 1)               2                3   128⋅(x - 1)             2            \n",
       "        80⋅(2⋅x - 1)    160⋅(2⋅x - 1)                  64⋅(x - 1)    2⋅(x - 1)\n",
       "\n",
       "              \n",
       "        1     \n",
       "─ - ──────────\n",
       "3            4\n",
       "    4⋅(x - 1) "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U.apart()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notons que cette décomposition peut faire intervenir des racines complexes ou irrationnelles. Pour que `sympy` accepte de les calculer (s'il ne doit résoudre que des équations de degré au plus 4), il faut utiliser l'option `full=True` et la méthode `doit`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAhCAYAAABk391mAAAABHNCSVQICAgIfAhkiAAAAiZJREFUaIHt2T1oFEEYxvFfgpJCK786iYV9LNKJFqkULFQUbQTBTgSbVMHiEEUklVaWiXYStNAYsVBBsVGJH2CjNkoUIsRCEAQhFrOHwyV7t3u57FyxfxhuZm7n3mefm5l3b26g0WioWclg4vj7cQ/fsIxjaeX8J7Uxm/AW5xLrWMGGxPHnstJ3pJ4xfUttTA61MTnUxuRQG5ND6qy0Gbuj9i7swRK+pBDUJLUxo3gStSez12mcrlxNRGpjnmIgsYZVqfeYHGpjcmgupeWkKvqQpjF9uc5TUmYp7RQ2yw/CL+Kj6yGoXyiTlf7ivGDKDrzGQ/xeB13JKTNjvgumwCJ+YlvPFfUJ3WalUWzE1x5qqYpCp4bdGLMVN3FGsWw2hUYXccpSNE6hU8PYmOP4g+Go7xo+YnvWHsJdXMGLImpLUkTDWpnDBdxpd1FszAzeZ4NgHCdxAD+ElD6Fx7jVI5GtdNJQGXFWWsYEZvE5q49lddiLE3iHw1nfKeFGekUnDZXRmq4f4SUu4RBeRe89V2xPmshKkyHhhsejvoN4ljO+nYZexmlLqzFjGBEMWOzmA3EDt6P2VSzgetS30GZ8UQ1rjdOW2JgRYUM6iyO4LDhelqWsNPmVtT8VGFtGw1ridKRpzDAeCAdF05jHG+zT5VTsgqo0FDo1HMQW4dH+vvANETbYGSEtV0GVGkYF0+ez9mRWvxhfNFD/qb869UFVDrUxOdTG5PAP4/CDKLDwd5wAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$\\displaystyle \\frac{1}{x^{2} + x + 1}$"
      ],
      "text/plain": [
       "    1     \n",
       "──────────\n",
       " 2        \n",
       "x  + x + 1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V = 1/(1+x+x**2);V"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAhCAYAAABk391mAAAABHNCSVQICAgIfAhkiAAAAiZJREFUaIHt2T1oFEEYxvFfgpJCK786iYV9LNKJFqkULFQUbQTBTgSbVMHiEEUklVaWiXYStNAYsVBBsVGJH2CjNkoUIsRCEAQhFrOHwyV7t3u57FyxfxhuZm7n3mefm5l3b26g0WioWclg4vj7cQ/fsIxjaeX8J7Uxm/AW5xLrWMGGxPHnstJ3pJ4xfUttTA61MTnUxuRQG5ND6qy0Gbuj9i7swRK+pBDUJLUxo3gStSez12mcrlxNRGpjnmIgsYZVqfeYHGpjcmgupeWkKvqQpjF9uc5TUmYp7RQ2yw/CL+Kj6yGoXyiTlf7ivGDKDrzGQ/xeB13JKTNjvgumwCJ+YlvPFfUJ3WalUWzE1x5qqYpCp4bdGLMVN3FGsWw2hUYXccpSNE6hU8PYmOP4g+Go7xo+YnvWHsJdXMGLImpLUkTDWpnDBdxpd1FszAzeZ4NgHCdxAD+ElD6Fx7jVI5GtdNJQGXFWWsYEZvE5q49lddiLE3iHw1nfKeFGekUnDZXRmq4f4SUu4RBeRe89V2xPmshKkyHhhsejvoN4ljO+nYZexmlLqzFjGBEMWOzmA3EDt6P2VSzgetS30GZ8UQ1rjdOW2JgRYUM6iyO4LDhelqWsNPmVtT8VGFtGw1ridKRpzDAeCAdF05jHG+zT5VTsgqo0FDo1HMQW4dH+vvANETbYGSEtV0GVGkYF0+ez9mRWvxhfNFD/qb869UFVDrUxOdTG5PAP4/CDKLDwd5wAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$\\displaystyle \\frac{1}{x^{2} + x + 1}$"
      ],
      "text/plain": [
       "    1     \n",
       "──────────\n",
       " 2        \n",
       "x  + x + 1"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V.apart()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{3} i}{3 \\left(x + \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right)} - \\frac{\\sqrt{3} i}{3 \\left(x + \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right)}$"
      ],
      "text/plain": [
       "      √3⋅ⅈ               √3⋅ⅈ      \n",
       "──────────────── - ────────────────\n",
       "  ⎛    1   √3⋅ⅈ⎞     ⎛    1   √3⋅ⅈ⎞\n",
       "3⋅⎜x + ─ + ────⎟   3⋅⎜x + ─ - ────⎟\n",
       "  ⎝    2    2  ⎠     ⎝    2    2  ⎠"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "V.apart(full=True).doit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\frac{- \\frac{9}{31 \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} + \\frac{6 \\left(- \\frac{\\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3} + \\frac{1}{\\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}\\right)^{2}}{31} + \\frac{4}{31} + \\frac{3 \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{31}}{x - \\frac{1}{\\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} + \\frac{\\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3}} + \\frac{\\frac{4}{31} + \\frac{6 \\left(- \\frac{\\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3} + \\frac{1}{\\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}\\right)^{2}}{31} - \\frac{9}{31 \\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} + \\frac{3 \\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{31}}{x - \\frac{1}{\\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} + \\frac{\\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3}} + \\frac{\\frac{4}{31} + \\frac{3 \\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{31} - \\frac{9}{31 \\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} + \\frac{6 \\left(\\frac{1}{\\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}} - \\frac{\\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3}\\right)^{2}}{31}}{x + \\frac{\\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}{3} - \\frac{1}{\\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{27}{2} + \\frac{3 \\sqrt{93}}{2}}}}$"
      ],
      "text/plain": [
       "                                                                 2            \n",
       "                          ⎛      ____________                   ⎞             \n",
       "                          ⎜     ╱ 27   3⋅√93                    ⎟             \n",
       "                          ⎜  3 ╱  ── + ─────                    ⎟             \n",
       "                          ⎜  ╲╱   2      2             1        ⎟             \n",
       "                        6⋅⎜- ──────────────── + ────────────────⎟             \n",
       "                          ⎜         3               ____________⎟             \n",
       "                          ⎜                        ╱ 27   3⋅√93 ⎟             \n",
       "                          ⎜                     3 ╱  ── + ───── ⎟         3⋅3 \n",
       "           9              ⎝                     ╲╱   2      2   ⎠    4      ╲╱\n",
       "- ─────────────────── + ────────────────────────────────────────── + ── + ────\n",
       "         ____________                       31                       31       \n",
       "        ╱ 27   3⋅√93                                                          \n",
       "  31⋅3 ╱  ── + ─────                                                          \n",
       "     ╲╱   2      2                                                            \n",
       "──────────────────────────────────────────────────────────────────────────────\n",
       "                                                     ____________             \n",
       "                                                    ╱ 27   3⋅√93              \n",
       "                                                 3 ╱  ── + ─────              \n",
       "                                     1           ╲╱   2      2                \n",
       "                          x - ──────────────── + ────────────────             \n",
       "                                  ____________          3                     \n",
       "                                 ╱ 27   3⋅√93                                 \n",
       "                              3 ╱  ── + ─────                                 \n",
       "                              ╲╱   2      2                                   \n",
       "\n",
       "                                                                              \n",
       "                        ⎛                   ____________                      \n",
       "                        ⎜  ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                       \n",
       "                        ⎜  ⎜- ─ + ────⎟⋅3 ╱  ── + ─────                       \n",
       "                        ⎜  ⎝  2    2  ⎠ ╲╱   2      2                    1    \n",
       "                      6⋅⎜- ───────────────────────────── + ───────────────────\n",
       "  ____________          ⎜                3                                  __\n",
       " ╱ 27   3⋅√93           ⎜                                  ⎛  1   √3⋅ⅈ⎞    ╱ 2\n",
       "╱  ── + ─────           ⎜                                  ⎜- ─ + ────⎟⋅3 ╱  ─\n",
       "   2      2      4      ⎝                                  ⎝  2    2  ⎠ ╲╱   2\n",
       "──────────────   ── + ────────────────────────────────────────────────────────\n",
       "    31           31                                    31                     \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "────────────── + ─────────────────────────────────────────────────────────────\n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                         1    \n",
       "                                                       x - ───────────────────\n",
       "                                                                            __\n",
       "                                                           ⎛  1   √3⋅ⅈ⎞    ╱ 2\n",
       "                                                           ⎜- ─ + ────⎟⋅3 ╱  ─\n",
       "                                                           ⎝  2    2  ⎠ ╲╱   2\n",
       "\n",
       "           2                                                                  \n",
       "          ⎞                                                                   \n",
       "          ⎟                                                                   \n",
       "          ⎟                                                                   \n",
       "          ⎟                                                                   \n",
       "──────────⎟                                                                   \n",
       "__________⎟                                                          _________\n",
       "7   3⋅√93 ⎟                                         ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√\n",
       "─ + ───── ⎟                                       3⋅⎜- ─ + ────⎟⋅3 ╱  ── + ───\n",
       "      2   ⎠                   9                     ⎝  2    2  ⎠ ╲╱   2      2\n",
       "──────────── - ──────────────────────────────── + ────────────────────────────\n",
       "                                   ____________                  31           \n",
       "                  ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                                \n",
       "               31⋅⎜- ─ + ────⎟⋅3 ╱  ── + ─────                                \n",
       "                  ⎝  2    2  ⎠ ╲╱   2      2                                  \n",
       "──────────────────────────────────────────────────────────────────────────────\n",
       "                              ____________                                    \n",
       "             ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                                     \n",
       "             ⎜- ─ + ────⎟⋅3 ╱  ── + ─────                                     \n",
       "             ⎝  2    2  ⎠ ╲╱   2      2                                       \n",
       "────────── + ─────────────────────────────                                    \n",
       "__________                 3                                                  \n",
       "7   3⋅√93                                                                     \n",
       "─ + ─────                                                                     \n",
       "      2                                                                       \n",
       "\n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "___                           ____________                                    \n",
       "93           ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                                     \n",
       "──         3⋅⎜- ─ - ────⎟⋅3 ╱  ── + ─────                                     \n",
       "      4      ⎝  2    2  ⎠ ╲╱   2      2                     9                 \n",
       "───   ── + ─────────────────────────────── - ──────────────────────────────── \n",
       "      31                  31                                     ____________ \n",
       "                                                ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93  \n",
       "                                             31⋅⎜- ─ - ────⎟⋅3 ╱  ── + ─────  \n",
       "                                                ⎝  2    2  ⎠ ╲╱   2      2    \n",
       "─── + ────────────────────────────────────────────────────────────────────────\n",
       "                                                                ____________  \n",
       "                                               ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93   \n",
       "                                               ⎜- ─ - ────⎟⋅3 ╱  ── + ─────   \n",
       "                                               ⎝  2    2  ⎠ ╲╱   2      2     \n",
       "                                           x + ───────────────────────────── -\n",
       "                                                             3                \n",
       "                                                                              \n",
       "                                                                              \n",
       "                                                                              \n",
       "\n",
       "                                                                   2\n",
       "    ⎛                                                 ____________⎞ \n",
       "    ⎜                                ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93 ⎟ \n",
       "    ⎜                                ⎜- ─ - ────⎟⋅3 ╱  ── + ───── ⎟ \n",
       "    ⎜              1                 ⎝  2    2  ⎠ ╲╱   2      2   ⎟ \n",
       "  6⋅⎜───────────────────────────── - ─────────────────────────────⎟ \n",
       "    ⎜                 ____________                 3              ⎟ \n",
       "    ⎜⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                                 ⎟ \n",
       "    ⎜⎜- ─ - ────⎟⋅3 ╱  ── + ─────                                 ⎟ \n",
       "    ⎝⎝  2    2  ⎠ ╲╱   2      2                                   ⎠ \n",
       "+ ──────────────────────────────────────────────────────────────────\n",
       "                                  31                                \n",
       "                                                                    \n",
       "                                                                    \n",
       "                                                                    \n",
       "────────────────────────────────────────────────────────────────────\n",
       "                                                                    \n",
       "                                                                    \n",
       "                                                                    \n",
       "               1                                                    \n",
       " ─────────────────────────────                                      \n",
       "                  ____________                                      \n",
       " ⎛  1   √3⋅ⅈ⎞    ╱ 27   3⋅√93                                       \n",
       " ⎜- ─ - ────⎟⋅3 ╱  ── + ─────                                       \n",
       " ⎝  2    2  ⎠ ╲╱   2      2                                         "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Avec des équations du 3ème degré, le résultat n'est pas très exploitable ...\n",
    "www=1/(1+x+x**3)\n",
    "www.apart(full=True).doit()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## La formule du binôme généralisé\n",
    "\n",
    "On voit qu'il faut être capable de développer en série entière les fractions simples \n",
    "$$\\frac1{(1-x)^k}.$$\n",
    "Pour $k=1$, c'est fait. On peut traiter $k=2$ en l'élevant au carré. En utilisant la formule générale de produit\n",
    "$$\\sum_{p\\ge 0}a_px^p\\sum_{q\\ge 0}b_qx^q = \\sum_{n\\ge 0}\\left(\\sum_{p=0}^na_pb_{n-p}\\right)x^n$$\n",
    "on a\n",
    "$$\\left(\\frac1{1-x}\\right)^2 = \\sum_{n\\ge 0}\\left(\\sum_{p=0}^n 1\\times 1\\right)x^n=\\sum_{n\\ge 0}(n+1)x^n$$\n",
    "Pour peu que l'on sache que \n",
    "$$1+2+\\cdots +n = \\frac{n(n+1)}{2}$$\n",
    "on peut remultiplier par $\\frac1{1-x}$ et obtenir\n",
    "$$\\left(\\frac1{1-x}\\right)^3 = \\sum_{n\\ge 0}\\left(\\sum_{p=0}^n (p+1)\\times 1\\right)x^n=\\sum_{n\\ge 0}\\frac{(n+1)(n+2)}2x^n$$\n",
    "Avec un effort supplémentaire, on peut encore trouver $k=4$ et deviner la formule générale\n",
    "$$\\left(\\frac1{1-x}\\right)^k = \\sum_{n\\ge 0}{n+k-1\\choose n}x^n$$\n",
    "et la prouver par récurrence.\n",
    "\n",
    "Ou encore, la prouver combinatoirement : si on fait le produit de $k$ séries géométriques\n",
    "$$\\frac1{(1-x_1)(1-x_2)\\cdots (1-x_k)}=\\sum_{n_1\\ge 0}x_1^{n_1}\\sum_{n_2\\ge 0}x_2^{n_2}\\cdots\\sum_{n_k\\ge 0}x_k^{n_k},$$\n",
    "on voit que le membre droit est la somme de tous les monômes en $x_1,\\ldots,x_k$. Si l'on pose\n",
    "$$x_1=x_2=\\cdots=x_k=x$$\n",
    "dans cette égalité, le membre gauche devient $\\left(\\frac1{1-x}\\right)^k$, et le coefficient de $x^n$ dans le membre droit est le nombre de monômes de degré total $n$ que l'on peut former avec $k$ variables, c'est à dire, le nombre de sélections avec répétitions de $n$ objets parmi $k$, connu pour être égal à ${n+k-1\\choose n}x^n$ d'après le cours de L2.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle 1 + 2 x + 3 x^{2} + 4 x^{3} + 5 x^{4} + 6 x^{5} + 7 x^{6} + 8 x^{7} + 9 x^{8} + 10 x^{9} + O\\left(x^{10}\\right)$"
      ],
      "text/plain": [
       "             2      3      4      5      6      7      8       9    ⎛ 10⎞\n",
       "1 + 2⋅x + 3⋅x  + 4⋅x  + 5⋅x  + 6⋅x  + 7⋅x  + 8⋅x  + 9⋅x  + 10⋅x  + O⎝x  ⎠"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "series(1/(1-x)**2,x,0,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle 1 + 3 x + 6 x^{2} + 10 x^{3} + 15 x^{4} + 21 x^{5} + 28 x^{6} + 36 x^{7} + 45 x^{8} + 55 x^{9} + O\\left(x^{10}\\right)$"
      ],
      "text/plain": [
       "             2       3       4       5       6       7       8       9    ⎛ 10\n",
       "1 + 3⋅x + 6⋅x  + 10⋅x  + 15⋅x  + 21⋅x  + 28⋅x  + 36⋅x  + 45⋅x  + 55⋅x  + O⎝x  \n",
       "\n",
       "⎞\n",
       "⎠"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "series(1/(1-x)**3,x,0,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle 1 + 4 x + 10 x^{2} + 20 x^{3} + 35 x^{4} + 56 x^{5} + 84 x^{6} + 120 x^{7} + 165 x^{8} + 220 x^{9} + O\\left(x^{10}\\right)$"
      ],
      "text/plain": [
       "              2       3       4       5       6        7        8        9    \n",
       "1 + 4⋅x + 10⋅x  + 20⋅x  + 35⋅x  + 56⋅x  + 84⋅x  + 120⋅x  + 165⋅x  + 220⋅x  + O\n",
       "\n",
       "⎛ 10⎞\n",
       "⎝x  ⎠"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "series(1/(1-x)**4,x,0,10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On peut faire encore mieux. Rappelons qu'on définit $x^{p/q}$ comme $\\sqrt[q]{x^p}$, et qu'on peut définir $x^\\alpha$ pour $\\alpha$ réel quelconque comme $\\exp(\\alpha\\ln x)$.\n",
    "\n",
    "On peut donc donner un sens à la série formelle $(1+x)^\\alpha$ pour $\\alpha$ quelconque. Posons\n",
    "$$(1+x)^\\alpha = \\sum_{n\\ge 0}a_nx^n$$\n",
    "et cherchons les coefficients $a_n$.\n",
    "\n",
    "On *définit* la dérivation des séries formelles en posant $(x^n)'=\\frac{d}{dx}x^n=nx^{n-1}$ et en prolongeant par linéarité.\n",
    "Il n'est pas difficile de monter que cette opération vérifie les propriétés usuelles de la dérivée des fonctions.\n",
    "Par exemple, pour montrer $(fg)'=f'g+fg'$, on commence par le vérifier pour $f=x^p$ et $g=x^q$. Puis on utilise un première fois la linéarité pour en déduire que c'est encore vrai pour $f=x^p$ et $g$ quelconque, puis une seconde fois\n",
    "pour $f$ et $g$ quelconques.\n",
    "\n",
    "On en déduit ensuite par récurrence $(f^n)'=nf^{n-1}f'$, puis par linéarité, $g(f(x))'=g'(f(x))f'(x)$.\n",
    "\n",
    "Comme $(1+x)^\\alpha = \\exp(\\alpha\\ln(1+x))$, on a\n",
    "$$\\frac{d}{dx}(1+x)^\\alpha = \\exp(\\alpha\\ln(1+x))\\alpha\\frac1{1+x}=\\alpha(1+x)^{\\alpha-1},$$\n",
    "comme on pouvait s'y attendre.\n",
    "\n",
    "On peut maintenant écrire\n",
    "$$(1+x)\\frac{d}{dx}(1+x)^\\alpha = (1+x)\\sum_{n\\ge 0}n a_nx^{n-1}=\\alpha (1+x)^\\alpha=\\sum_{n\\ge 0}\\alpha a_nx^n.$$\n",
    "En effectuant le produit par $1+x$, on trouve\n",
    "$$\\sum_{n\\ge 0}(n+1)a_{n+1}x^n+\\sum_{n\\ge 0}na_nx^n=\\sum_{n\\ge 0}\\alpha a_nx^n$$\n",
    "donc, en identifiant les coefficients de $x^n$\n",
    "$$(n+1)a_{n+1}=(\\alpha-n)a_n,\\ \\text{d'où}\\ a_{n+1}=\\frac{\\alpha-n}{n+1} \n",
    "\\frac{\\alpha-n+1}{n} \\frac{\\alpha-n+2}{n-1}\\cdots \\frac{\\alpha}{1}a_0.  $$\n",
    "Comme on a clairement $a_0=1$, on a finalement\n",
    "$$a_n = \\frac{\\alpha(\\alpha-1)\\cdots(\\alpha-n+1)}{n!} =: {\\alpha\\choose n}.$$\n",
    "Ces nombres sont appeliés coefficients binomiaux généralisés. Quand $\\alpha$ est un entier positif, ils coincident\n",
    "évidemment avec les coefficients binomiaux ordinaires.\n",
    "\n",
    "\n",
    "### Exemple : $\\alpha=\\frac12$\n",
    "\n",
    "On a\n",
    "$\\def\\a{\\frac12}$\n",
    "$${1/2\\choose n}=\\frac{\\a(\\a-1)(\\a-2)\\cdots(\\a-n+1)}{n!}\n",
    "=\\frac{1(1-2)(1-4)\\cdots(1-2n+2)}{2^nn!}\n",
    "=(-1)^{n-1}\\frac{1\\cdot 3\\cdot 5\\cdots (2n-3)}{2^nn!}$$\n",
    "$$= (-1)^{n-1}\\frac{(2n-2)!}{2^{n-1}(n-1)!2^nn!}= \\frac{(-1)^{n-1}}{2^{2n-1}}\\frac1{n}{2n-2\\choose n-1}.$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Application : dénombrement des arbres binaires\n",
    "\n",
    "Un *arbre binaire complet*, c'est soit un sommet unique `o`, soit\n",
    "<pre>\n",
    "    o\n",
    "   / \\\n",
    "  A   B\n",
    "</pre>\n",
    "\n",
    "où `A` et `B` sont des arbres binaires complets. Soit $c_n$ le nombre d'arbre binaires complets à $n$ feuilles.\n",
    "Les premiers exemples sont\n",
    "\n",
    "<pre>\n",
    "o         o                             o            o\n",
    "         / \\                           / \\          / \\\n",
    "        o   o                         o   o        o   o\n",
    "                                     / \\              / \\\n",
    "                                    o   o            o   o\n",
    "                                    \n",
    "\n",
    "    _o__           __o___           __o__           __o___           _o__    \n",
    "   /    \\         /      \\         /     \\         /      \\         /    \\   \n",
    "  o     _o_      o       _o_      o       o      _o_       o      _o_     o  \n",
    "       /   \\            /   \\    / \\     / \\    /   \\            /   \\       \n",
    "      o     o          o     o  o   o   o   o  o     o          o     o      \n",
    "           / \\        / \\                           / \\        / \\           \n",
    "          o   o      o   o                         o   o      o   o          \n",
    " \n",
    "\n",
    "\n",
    "</pre>\n",
    "\n",
    "On a donc $c_0=0$, $c_1=1$, $c_2=1$, $c_3=2$, $c_4=5$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Comment calculer les $c_n$ ? \n",
    "\n",
    "Un arbre à $n$ feuilles aura un sous-arbre gauche $A$ à $p$ feuilles et un sous-arbre droit $B$ à $q$ feuilles,\n",
    "avec $p+q=n$. Il y a $c_pc_q$ choix pour ces sous-arbres, et $p,q$ sont au moins égaux à 1 et au plus à $n-1$.\n",
    "Donc, pour $n\\ge 2$,\n",
    "$$c_n = \\sum_{p=1}^{n-1}c_pc_{n-p} =c_1c_{n-1}+c_2c_{n-2}+\\cdots+c_{n-1}c_1.$$\n",
    "C'est une récurrence qui fait intervenir *toutes* les valeurs précédentes. Testons là :\n",
    "$$c_2 = c_1c_1 = 1,$$\n",
    "$$c_3=c_1c_2+c_2c_1=1+1=2,$$\n",
    "$$c_4=c_1c_3+c_2c_2+c_3c_1=2+1+2=5,$$\n",
    "$$c_5=c_1c_4+c_2c_3+c_3c_2+c_4c_1=5+2+2+5=14,$$\n",
    "$$c_6=c_1c_5+c_2c_4+c_3c_3+c_4c_2+c_5c_1=14+5+4+5+14=42, \\ldots$$\n",
    "Ces nombres sont très célèbres. On les appelle [nombres de Catalan](https://fr.wikipedia.org/wiki/Nombre_de_Catalan), bien qu'ils aient été découverts par Euler qui les appelait lui-même *nombres de Segner*.\n",
    "Ce  [livre](https://books.google.fr/books/about/Catalan_Numbers.html?id=i5QSBwAAQBAJ&redir_esc=y) de Richard Stanley en recense 214 interprétations différentes.\n",
    "\n",
    "Formons la série génératrice\n",
    "$$C(x)=\\sum_{n\\ge 0}c_n x^n = 0 +x+x^2+2x^3+5x^4+14x^5+42x^6+\\cdots$$\n",
    "Puisque $c_0=0$, la récurrence s'écrit aussi bien\n",
    "$$c_n = \\sum_{p=0}^{n}c_pc_{n-p} \\quad\\text{pour $n\\ge 2$} $$\n",
    "Le membre droit est le coefficient de $x^n$ dans $C(x)^2$. Comme $C(x)$ commence par $x$, \n",
    "$C(x)^2$ commence par $x^2$, et on a donc en complétant \n",
    "$$C(x) = x + C(x)^2.$$\n",
    "Autrement dit, $C(x)$ est solution de l'équation du second degré\n",
    "$$X^2-X+x=0,$$\n",
    "de discriminant $1-4x$, de sorte que\n",
    "$$C(x)=\\frac{1\\pm\\sqrt{1-4x}}{2}$$\n",
    "On sait que $\\sqrt{1-4x}=1-\\frac12 x+O(x^2)$ par la formule du binôme généralisé, il faut donc choisir la solution avec le signe moins si l'on veut que son premier terme soit $x$\n",
    "$$C(x)=\\frac{1-\\sqrt{1-4x}}{2}= \\frac12\\left[1-\\sum_{n\\ge 0}{1/2\\choose n}(-4x)^n\\right]\n",
    "=\\sum_{n\\ge 1}\\frac{(-1)^{n}}{2^{2n}}\\frac1{n}{2n-2\\choose n-1}(-4x)^n\n",
    "=\\sum_{n\\ge 1}\\frac1{n}{2n-2\\choose n-1}x^n$$\n",
    "ce qui nous donne finalement\n",
    "$$c_n = \\frac1{n}{2n-2\\choose n-1}.$$\n",
    "Vérifions :\n",
    "$$c_6 = \\frac16{10\\choose 5}=\\frac16 252 = 42.$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left[ 1, \\  1, \\  2, \\  5, \\  14, \\  42, \\  132, \\  429, \\  1430, \\  4862, \\  16796\\right]$"
      ],
      "text/plain": [
       "[1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[binomial(2*n-2,n-1)//n for n in range(1,12)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
