From 8e2f98b0c0e15cc3de1b16fa1955c8e329ead11e Mon Sep 17 00:00:00 2001 From: urojony Date: Mon, 18 May 2020 20:49:46 +0200 Subject: [PATCH] replace pdfs with htmls --- .ipynb_checkpoints/examples-checkpoint.ipynb | 12 + .../statistics-checkpoint.ipynb | 1190 +- examples.html | 17915 ++++++++++++++++ examples.ipynb | 12 + examples.pdf | Bin 59577 -> 0 bytes statistics.html | 14995 +++++++++++++ statistics.ipynb | 7 - statistics.pdf | Bin 71326 -> 0 bytes 8 files changed, 34069 insertions(+), 62 deletions(-) create mode 100644 examples.html delete mode 100644 examples.pdf create mode 100644 statistics.html delete mode 100644 statistics.pdf diff --git a/.ipynb_checkpoints/examples-checkpoint.ipynb b/.ipynb_checkpoints/examples-checkpoint.ipynb index 4e27353..7453a7b 100644 --- a/.ipynb_checkpoints/examples-checkpoint.ipynb +++ b/.ipynb_checkpoints/examples-checkpoint.ipynb @@ -2556,6 +2556,9 @@ ], "source": [ "newproof()\n", + "#this is equivalent to\n", + "#prove(makesubs('(x-1)^4','[1,oo]'))\n", + "#prove(makesubs('(x-1)^4','[-oo,1]'))\n", "powerprove('(x-1)^4')" ] }, @@ -3406,6 +3409,15 @@ "source": [ "newproof()\n", "formula=Sm('-(3a + 2b + c)(2a^3 + 3b^2 + 6c + 1) + (4a + 4b + 4c)(a^4 + b^3 + c^2 + 3)')\n", + "#this is equivalent to\n", + "#prove(makesubs(formula,'[1,oo],[1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[-1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[-1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[-1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[-1,oo],[-1,oo]'))\n", "powerprove(formula)" ] }, diff --git a/.ipynb_checkpoints/statistics-checkpoint.ipynb b/.ipynb_checkpoints/statistics-checkpoint.ipynb index ad6b447..d65b5bc 100644 --- a/.ipynb_checkpoints/statistics-checkpoint.ipynb +++ b/.ipynb_checkpoints/statistics-checkpoint.ipynb @@ -17,7 +17,6 @@ "metadata": {}, "outputs": [], "source": [ - "from importlib import reload\n", "from sympy import *\n", "import shiroindev\n", "from shiroindev import *\n", @@ -58,25 +57,20 @@ " if not m:\n", " break\n", " s2+=s[p:p+m.end()]\n", - " #print('a',s[p:m.end()],p)\n", " p+=m.end()\n", " if m.group() in arg:\n", " for i in range(arg[m.group()]):\n", " sp=re.search('^ *',s[p:])\n", " s2+=sp.group()\n", - " #print('b',sp.group(),p)\n", " p+=sp.end()\n", " if s[p]=='{':\n", " cb=re.search(r'^\\{.*?\\}',s[p:])\n", " ab=addbraces(cb.group())\n", " s2+=ab\n", - " #print('c',ab,p)\n", " p+=cb.end()\n", " else:\n", " s2+='{'+s[p]+'}'\n", - " #print('d','{'+s[p]+'}',p)\n", " p+=1\n", - " #print('e',p)\n", " s2+=s[p:]\n", " return s2\n", "print(addbraces(r'\\frac{ \\sqrt 3}2'))\n", @@ -147,7 +141,6 @@ "def parser(formula,intervals='[]',subs='[]',func=dif):\n", " newproof()\n", " shiro.display=lambda x:None\n", - " #display=lambda x:None\n", " if intervals=='':\n", " intervals='[]'\n", " if subs=='':\n", @@ -175,34 +168,7 @@ "name": "stderr", "output_type": "stream", "text": [ - " 74%|███████▍ | 26/35 [00:21<00:07, 1.21it/s]\n" - ] - }, - { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mineqs2\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mineq\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mineqs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mineqs2\u001b[0m\u001b[0;34m+=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mparser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mineq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m\u001b[0m in \u001b[0;36mparser\u001b[0;34m(formula, intervals, subs, func)\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mformula\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0mformula\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msimplify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mformula\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0mnum\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mden\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfractioncancel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mformula\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mnum\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/simplify/simplify.py\u001b[0m in \u001b[0;36msimplify\u001b[0;34m(expr, ratio, measure, rational, inverse)\u001b[0m\n\u001b[1;32m 560\u001b[0m \u001b[0m_e\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcancel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 561\u001b[0m \u001b[0mexpr1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mshorter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_e\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_mexpand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_e\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcancel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# issue 6829\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 562\u001b[0;31m \u001b[0mexpr2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mshorter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtogether\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtogether\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 563\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 564\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mratio\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mInfinity\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36mtogether\u001b[0;34m(expr, deep, fraction)\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 85\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msympify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m_together\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 79\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 80\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mex\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 79\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 80\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mex\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m_together\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_Add\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 68\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgcd_terms\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_together\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAdd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfraction\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfraction\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 69\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_Pow\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0mbase\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m_together\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 79\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 80\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mex\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 78\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 79\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 80\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mex\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mex\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mexpr\u001b[0m \u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/polys/rationaltools.py\u001b[0m in \u001b[0;36m_together\u001b[0;34m(expr)\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_Add\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 68\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgcd_terms\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_together\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAdd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmake_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfraction\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfraction\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 69\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_Pow\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[0mbase\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_together\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36mgcd_terms\u001b[0;34m(terms, isprimitive, clear, fraction)\u001b[0m\n\u001b[1;32m 1061\u001b[0m \u001b[0mterms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msympify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mterms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1062\u001b[0m \u001b[0mterms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mterms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1063\u001b[0;31m \u001b[0mcont\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnumer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdenom\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_gcd_terms\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mterms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0misprimitive\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfraction\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1064\u001b[0m \u001b[0mnumer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxreplace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1065\u001b[0m \u001b[0mcoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfactors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcont\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_coeff_Mul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36m_gcd_terms\u001b[0;34m(terms, isprimitive, fraction)\u001b[0m\n\u001b[1;32m 954\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 955\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mterm\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mterms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 956\u001b[0;31m \u001b[0mterms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mterm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcont\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 957\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 958\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfraction\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36mquo\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 872\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 873\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mquo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Term\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 874\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 875\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 876\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Term\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36mmul\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 864\u001b[0m \u001b[0mdenom\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdenom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmul\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdenom\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 865\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 866\u001b[0;31m \u001b[0mnumer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdenom\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnormal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdenom\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 867\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 868\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mTerm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcoeff\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnumer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdenom\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36mnormal\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 556\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mother_factors\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mfactor\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 557\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 558\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mFactors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself_factors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mFactors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother_factors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 559\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 560\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdiv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Factors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/exprtools.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, factors)\u001b[0m\n\u001b[1;32m 367\u001b[0m \u001b[0mhandle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 368\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfactors\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 369\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mI\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 370\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 371\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/home/grzegorz/Pobrane/SageMath/local/lib/python3.7/site-packages/sympy/core/basic.py\u001b[0m in \u001b[0;36m__eq__\u001b[0;34m(self, other)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;31m# (https://github.com/sympy/sympy/issues/4269), we only compare\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[0;31m# types in Python 2 directly if they actually have __ne__.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 335\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mPY3\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__ne__\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__ne__\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 336\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtself\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mtother\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 337\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "100%|██████████| 35/35 [00:46<00:00, 1.32s/it]\n" ] } ], @@ -222,9 +188,675 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{2} - ab - ac + b^{2} - bc + c^{2}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**2 - a*b - a*c + b**2 - b*c + c**2, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{2} - ab - ac - ad + b^{2} + c^{2} + d^{2}, a, b, c, d, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**2 - a*b - a*c - a*d + b**2 + c**2 + d**2, a, b, c, d, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{4}b^{2} + a^{3}b^{2} - a^{3}b - 2 a^{2}b + a^{2} + ab^{2} - ab + b^{2}, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**4*b**2 + a**3*b**2 - a**3*b - 2*a**2*b + a**2 + a*b**2 - a*b + b**2, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{3}b + a^{3} - 4 a^{2}b^{2} - a^{2}b + a^{2} + 2 ab^{3} - ab^{2} - 2 ab + b^{3} + b^{2}, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**3*b + a**3 - 4*a**2*b**2 - a**2*b + a**2 + 2*a*b**3 - a*b**2 - 2*a*b + b**3 + b**2, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3} - a^{2}b - ab^{2} + b^{3}, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3 - a**2*b - a*b**2 + b**3, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{3} - a^{2}b - a^{2}c - ab^{2} - ac^{2} + 2 b^{3} - b^{2}c - bc^{2} + 2 c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**3 - a**2*b - a**2*c - a*b**2 - a*c**2 + 2*b**3 - b**2*c - b*c**2 + 2*c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{3} - 3 a^{2}b + b^{3}, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**3 - 3*a**2*b + b**3, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3} - a^{2}b - ac^{2} + b^{3} - b^{2}c + c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3 - a**2*b - a*c**2 + b**3 - b**2*c + c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3}c + a^{3}d + a^{2}b^{2} - a^{2}bd - 2 a^{2}c^{2} - a^{2}cd + a^{2}d^{2} + ab^{3} - ab^{2}c - ab^{2}d - abc^{2} + ac^{3} - acd^{2} + b^{3}d + b^{2}c^{2} - 2 b^{2}d^{2} + bc^{3} - bc^{2}d - bcd^{2} + bd^{3} + c^{2}d^{2} + cd^{3}, a, b, c, d, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3*c + a**3*d + a**2*b**2 - a**2*b*d - 2*a**2*c**2 - a**2*c*d + a**2*d**2 + a*b**3 - a*b**2*c - a*b**2*d - a*b*c**2 + a*c**3 - a*c*d**2 + b**3*d + b**2*c**2 - 2*b**2*d**2 + b*c**3 - b*c**2*d - b*c*d**2 + b*d**3 + c**2*d**2 + c*d**3, a, b, c, d, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{5}b^{2} + 2 a^{5}bc + 2 a^{5}c^{2} + a^{4}b^{3} - a^{4}b^{2}c - a^{4}bc^{2} + a^{4}c^{3} + a^{3}b^{4} - 2 a^{3}b^{3}c - 4 a^{3}b^{2}c^{2} - 2 a^{3}bc^{3} + a^{3}c^{4} + 2 a^{2}b^{5} - a^{2}b^{4}c - 4 a^{2}b^{3}c^{2} - 4 a^{2}b^{2}c^{3} - a^{2}bc^{4} + 2 a^{2}c^{5} + 2 ab^{5}c - ab^{4}c^{2} - 2 ab^{3}c^{3} - ab^{2}c^{4} + 2 abc^{5} + 2 b^{5}c^{2} + b^{4}c^{3} + b^{3}c^{4} + 2 b^{2}c^{5}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**5*b**2 + 2*a**5*b*c + 2*a**5*c**2 + a**4*b**3 - a**4*b**2*c - a**4*b*c**2 + a**4*c**3 + a**3*b**4 - 2*a**3*b**3*c - 4*a**3*b**2*c**2 - 2*a**3*b*c**3 + a**3*c**4 + 2*a**2*b**5 - a**2*b**4*c - 4*a**2*b**3*c**2 - 4*a**2*b**2*c**3 - a**2*b*c**4 + 2*a**2*c**5 + 2*a*b**5*c - a*b**4*c**2 - 2*a*b**3*c**3 - a*b**2*c**4 + 2*a*b*c**5 + 2*b**5*c**2 + b**4*c**3 + b**3*c**4 + 2*b**2*c**5, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( ad + af - 2 \\sqrt{a}\\sqrt{b}\\sqrt{c}\\sqrt{d} - 2 \\sqrt{a}\\sqrt{b}\\sqrt{e}\\sqrt{f} + bc + be + cf - 2 \\sqrt{c}\\sqrt{d}\\sqrt{e}\\sqrt{f} + de, \\sqrt{a}, \\sqrt{b}, \\sqrt{c}, \\sqrt{d}, \\sqrt{e}, \\sqrt{f}, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly((sqrt(a))**2*(sqrt(d))**2 + (sqrt(a))**2*(sqrt(f))**2 - 2*(sqrt(a))*(sqrt(b))*(sqrt(c))*(sqrt(d)) - 2*(sqrt(a))*(sqrt(b))*(sqrt(e))*(sqrt(f)) + (sqrt(b))**2*(sqrt(c))**2 + (sqrt(b))**2*(sqrt(e))**2 + (sqrt(c))**2*(sqrt(f))**2 - 2*(sqrt(c))*(sqrt(d))*(sqrt(e))*(sqrt(f)) + (sqrt(d))**2*(sqrt(e))**2, sqrt(a), sqrt(b), sqrt(c), sqrt(d), sqrt(e), sqrt(f), domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "11\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 3 a^{4}b + 3 a^{4}c - 2 a^{3}b^{2} + 2 a^{3}c^{2} + 2 a^{2}b^{3} - 6 a^{2}b^{2}c - 6 a^{2}bc^{2} - 2 a^{2}c^{3} + 3 ab^{4} - 6 ab^{2}c^{2} + 3 ac^{4} + 3 b^{4}c - 2 b^{3}c^{2} + 2 b^{2}c^{3} + 3 bc^{4}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(3*a**4*b + 3*a**4*c - 2*a**3*b**2 + 2*a**3*c**2 + 2*a**2*b**3 - 6*a**2*b**2*c - 6*a**2*b*c**2 - 2*a**2*c**3 + 3*a*b**4 - 6*a*b**2*c**2 + 3*a*c**4 + 3*b**4*c - 2*b**3*c**2 + 2*b**2*c**3 + 3*b*c**4, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 4 x^{8}y^{4} + 4 x^{7}y^{4} - 3 x^{5}y^{5} - 3 x^{5}y^{4} + 4 x^{4}y^{8} + 4 x^{4}y^{7} - 3 x^{4}y^{5} - 6 x^{4}y^{4} - 3 x^{4}y^{3} - 3 x^{3}y^{4} - 3 x^{3}y^{3} + 4 xy + 4, x, y, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(4*x**8*y**4 + 4*x**7*y**4 - 3*x**5*y**5 - 3*x**5*y**4 + 4*x**4*y**8 + 4*x**4*y**7 - 3*x**4*y**5 - 6*x**4*y**4 - 3*x**4*y**3 - 3*x**3*y**4 - 3*x**3*y**3 + 4*x*y + 4, x, y, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3}c^{2} + a^{2}b^{3} - a^{2}b^{2}c - a^{2}bc^{2} - ab^{2}c^{2} + b^{2}c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3*c**2 + a**2*b**3 - a**2*b**2*c - a**2*b*c**2 - a*b**2*c**2 + b**2*c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{4}c + a^{3}c^{2} + a^{2}b^{3} + ab^{4} + b^{2}c^{3} + bc^{4}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**4*c + a**3*c**2 + a**2*b**3 + a*b**4 + b**2*c**3 + b*c**4, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{4}c - 4 a^{3}bc + a^{3}c^{2} + a^{2}b^{3} + 6 a^{2}b^{2}c - 2 a^{2}bc^{2} + ab^{4} - 4 ab^{3}c - 2 ab^{2}c^{2} + b^{2}c^{3} + bc^{4}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**4*c - 4*a**3*b*c + a**3*c**2 + a**2*b**3 + 6*a**2*b**2*c - 2*a**2*b*c**2 + a*b**4 - 4*a*b**3*c - 2*a*b**2*c**2 + b**2*c**3 + b*c**4, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{6}b^{3} + a^{6}c^{3} - 2 a^{5}b^{2}c^{2} + a^{3}b^{6} + a^{3}c^{6} - 2 a^{2}b^{5}c^{2} - 2 a^{2}b^{2}c^{5} + b^{6}c^{3} + b^{3}c^{6}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**6*b**3 + a**6*c**3 - 2*a**5*b**2*c**2 + a**3*b**6 + a**3*c**6 - 2*a**2*b**5*c**2 - 2*a**2*b**2*c**5 + b**6*c**3 + b**3*c**6, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "17\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{8}b^{8} + 2 a^{7}b^{6} + 2 a^{6}b^{7} - 3 a^{6}b^{5} - 3 a^{5}b^{6} + 2 a^{5}b^{5} - 3 a^{5}b^{3} + 2 a^{5}b^{2} - 6 a^{4}b^{4} + 2 a^{4}b^{3} + 2 a^{4} - 3 a^{3}b^{5} + 2 a^{3}b^{4} - 3 a^{3}b^{2} + 2 a^{3}b + 2 a^{2}b^{5} - 3 a^{2}b^{3} + 2 ab^{3} + 2 b^{4}, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**8*b**8 + 2*a**7*b**6 + 2*a**6*b**7 - 3*a**6*b**5 - 3*a**5*b**6 + 2*a**5*b**5 - 3*a**5*b**3 + 2*a**5*b**2 - 6*a**4*b**4 + 2*a**4*b**3 + 2*a**4 - 3*a**3*b**5 + 2*a**3*b**4 - 3*a**3*b**2 + 2*a**3*b + 2*a**2*b**5 - 3*a**2*b**3 + 2*a*b**3 + 2*b**4, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{8} - a^{6}bc - 2 a^{5}b^{3} + a^{5}b^{2}c + a^{5}bc^{2} - 2 a^{5}c^{3} + 3 a^{4}b^{4} - a^{4}b^{3}c + 2 a^{4}b^{2}c^{2} - a^{4}bc^{3} + 3 a^{4}c^{4} - 2 a^{3}b^{5} - a^{3}b^{4}c - a^{3}b^{3}c^{2} - a^{3}b^{2}c^{3} - a^{3}bc^{4} - 2 a^{3}c^{5} + a^{2}b^{5}c + 2 a^{2}b^{4}c^{2} - a^{2}b^{3}c^{3} + 2 a^{2}b^{2}c^{4} + a^{2}bc^{5} - ab^{6}c + ab^{5}c^{2} - ab^{4}c^{3} - ab^{3}c^{4} + ab^{2}c^{5} - abc^{6} + b^{8} - 2 b^{5}c^{3} + 3 b^{4}c^{4} - 2 b^{3}c^{5} + c^{8}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**8 - a**6*b*c - 2*a**5*b**3 + a**5*b**2*c + a**5*b*c**2 - 2*a**5*c**3 + 3*a**4*b**4 - a**4*b**3*c + 2*a**4*b**2*c**2 - a**4*b*c**3 + 3*a**4*c**4 - 2*a**3*b**5 - a**3*b**4*c - a**3*b**3*c**2 - a**3*b**2*c**3 - a**3*b*c**4 - 2*a**3*c**5 + a**2*b**5*c + 2*a**2*b**4*c**2 - a**2*b**3*c**3 + 2*a**2*b**2*c**4 + a**2*b*c**5 - a*b**6*c + a*b**5*c**2 - a*b**4*c**3 - a*b**3*c**4 + a*b**2*c**5 - a*b*c**6 + b**8 - 2*b**5*c**3 + 3*b**4*c**4 - 2*b**3*c**5 + c**8, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "19\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( y^{18}z^{9} + 2 y^{16}z^{14} - y^{15}z^{9} + 2 y^{14}z^{16} - y^{14}z^{13} - y^{13}z^{14} - y^{13}z^{11} - y^{12}z^{12} + y^{12}z^{9} - y^{11}z^{13} - y^{11}z^{7} + 2 y^{11}z^{4} - y^{10}z^{5} + y^{9}z^{18} - y^{9}z^{15} + y^{9}z^{12} - y^{9}z^{6} - y^{8}z^{4} - y^{7}z^{11} - y^{7}z^{5} + 2 y^{7}z^{2} - y^{6}z^{9} + y^{6}z^{6} - y^{5}z^{10} - y^{5}z^{7} + 2 y^{4}z^{11} - y^{4}z^{8} - y^{3}z^{3} + 2 y^{2}z^{7} + 1, y, z, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(y**18*z**9 + 2*y**16*z**14 - y**15*z**9 + 2*y**14*z**16 - y**14*z**13 - y**13*z**14 - y**13*z**11 - y**12*z**12 + y**12*z**9 - y**11*z**13 - y**11*z**7 + 2*y**11*z**4 - y**10*z**5 + y**9*z**18 - y**9*z**15 + y**9*z**12 - y**9*z**6 - y**8*z**4 - y**7*z**11 - y**7*z**5 + 2*y**7*z**2 - y**6*z**9 + y**6*z**6 - y**5*z**10 - y**5*z**7 + 2*y**4*z**11 - y**4*z**8 - y**3*z**3 + 2*y**2*z**7 + 1, y, z, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3} - a^{2}b - a^{2}c - ab^{2} + 3 abc - ac^{2} + b^{3} - b^{2}c - bc^{2} + c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3 - a**2*b - a**2*c - a*b**2 + 3*a*b*c - a*c**2 + b**3 - b**2*c - b*c**2 + c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 y^{4}z^{2} - y^{3}z^{3} - 5 y^{3}z + 2 y^{2}z^{4} - 9 y^{2}z^{2} + 5 y^{2} - 5 yz^{3} + 23 yz + 5 z^{2} - 9, y, z, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*y**4*z**2 - y**3*z**3 - 5*y**3*z + 2*y**2*z**4 - 9*y**2*z**2 + 5*y**2 - 5*y*z**3 + 23*y*z + 5*z**2 - 9, y, z, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "22\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{\\frac{5}{2}}b\\frac{1}{\\sqrt{a b + a + b + 1}} + 2 a^{\\frac{5}{2}}\\frac{1}{\\sqrt{a b + a + b + 1}} + 2 a^{2}b^{\\frac{7}{2}}\\frac{1}{\\sqrt{b + 1}} + 2 a^{2}b^{\\frac{5}{2}}\\frac{1}{\\sqrt{b + 1}} + 2 a^{2}b^{2}\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - a^{2}b^{2}\\sqrt{3} + 2 a^{2}b\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - a^{2}b\\sqrt{3} + 2 a^{\\frac{3}{2}}b\\frac{1}{\\sqrt{a b + a + b + 1}} + 4 ab^{\\frac{7}{2}}\\frac{1}{\\sqrt{b + 1}} + 4 ab^{\\frac{5}{2}}\\frac{1}{\\sqrt{b + 1}} + 4 ab^{2}\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - 2 ab^{2}\\sqrt{3} + 2 ab^{\\frac{3}{2}}\\frac{1}{\\sqrt{b + 1}} + 6 ab\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - 2 ab\\sqrt{3} + 2 a\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - a\\sqrt{3} + 2 b^{\\frac{7}{2}}\\frac{1}{\\sqrt{b + 1}} + 2 b^{\\frac{5}{2}}\\frac{1}{\\sqrt{b + 1}} + 2 b^{2}\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - b^{2}\\sqrt{3} + 4 b\\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}} - b\\sqrt{3} + 2 \\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}}, \\sqrt{a}, \\sqrt{b}, \\frac{1}{a b \\sqrt{a b + a + b + 1} + a \\sqrt{a b + a + b + 1} + b \\sqrt{a b + a + b + 1} + \\sqrt{a b + a + b + 1}}, \\frac{1}{\\sqrt{a b + a + b + 1}}, \\frac{1}{\\sqrt{b + 1}}, \\sqrt{3}, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*(sqrt(a))**5*(sqrt(b))**2*(1/sqrt(a*b + a + b + 1)) + 2*(sqrt(a))**5*(1/sqrt(a*b + a + b + 1)) + 2*(sqrt(a))**4*(sqrt(b))**7*(1/sqrt(b + 1)) + 2*(sqrt(a))**4*(sqrt(b))**5*(1/sqrt(b + 1)) + 2*(sqrt(a))**4*(sqrt(b))**4*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - (sqrt(a))**4*(sqrt(b))**4*(sqrt(3)) + 2*(sqrt(a))**4*(sqrt(b))**2*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - (sqrt(a))**4*(sqrt(b))**2*(sqrt(3)) + 2*(sqrt(a))**3*(sqrt(b))**2*(1/sqrt(a*b + a + b + 1)) + 4*(sqrt(a))**2*(sqrt(b))**7*(1/sqrt(b + 1)) + 4*(sqrt(a))**2*(sqrt(b))**5*(1/sqrt(b + 1)) + 4*(sqrt(a))**2*(sqrt(b))**4*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - 2*(sqrt(a))**2*(sqrt(b))**4*(sqrt(3)) + 2*(sqrt(a))**2*(sqrt(b))**3*(1/sqrt(b + 1)) + 6*(sqrt(a))**2*(sqrt(b))**2*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - 2*(sqrt(a))**2*(sqrt(b))**2*(sqrt(3)) + 2*(sqrt(a))**2*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - (sqrt(a))**2*(sqrt(3)) + 2*(sqrt(b))**7*(1/sqrt(b + 1)) + 2*(sqrt(b))**5*(1/sqrt(b + 1)) + 2*(sqrt(b))**4*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - (sqrt(b))**4*(sqrt(3)) + 4*(sqrt(b))**2*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))) - (sqrt(b))**2*(sqrt(3)) + 2*(1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1))), sqrt(a), sqrt(b), 1/(a*b*sqrt(a*b + a + b + 1) + a*sqrt(a*b + a + b + 1) + b*sqrt(a*b + a + b + 1) + sqrt(a*b + a + b + 1)), 1/sqrt(a*b + a + b + 1), 1/sqrt(b + 1), sqrt(3), domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{4} - 4 abcd + b^{4} + c^{4} + d^{4}, a, b, c, d, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**4 - 4*a*b*c*d + b**4 + c**4 + d**4, a, b, c, d, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "24\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{3}b^{2} + a^{3}c^{2} + a^{2}b^{3} - 2 a^{2}b^{2}c - 2 a^{2}bc^{2} + a^{2}c^{3} - 2 ab^{2}c^{2} + b^{3}c^{2} + b^{2}c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**3*b**2 + a**3*c**2 + a**2*b**3 - 2*a**2*b**2*c - 2*a**2*b*c**2 + a**2*c**3 - 2*a*b**2*c**2 + b**3*c**2 + b**2*c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "25\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( def + de + df - 2 \\sqrt{d}\\sqrt{e} - 2 \\sqrt{d}\\sqrt{f} + ef - 2 \\sqrt{e}\\sqrt{f} + f + 2, \\sqrt{d}, \\sqrt{e}, \\sqrt{f}, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly((sqrt(d))**2*(sqrt(e))**2*(sqrt(f))**2 + (sqrt(d))**2*(sqrt(e))**2 + (sqrt(d))**2*(sqrt(f))**2 - 2*(sqrt(d))*(sqrt(e)) - 2*(sqrt(d))*(sqrt(f)) + (sqrt(e))**2*(sqrt(f))**2 - 2*(sqrt(e))*(sqrt(f)) + (sqrt(f))**2 + 2, sqrt(d), sqrt(e), sqrt(f), domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "26\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( de^{2}f^{2} + de^{2}f + 2 def^{2} - 6 def + de + df^{2} + df + e^{2}f^{2} + e^{2}f + 2 ef^{2} + 3 ef + e + f^{2} + 2 f + 1, d, e, f, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(d*e**2*f**2 + d*e**2*f + 2*d*e*f**2 - 6*d*e*f + d*e + d*f**2 + d*f + e**2*f**2 + e**2*f + 2*e*f**2 + 3*e*f + e + f**2 + 2*f + 1, d, e, f, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "27\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( s^{2}def + s^{2}, s, d, e, f, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(s**2*d*e*f + s**2, s, d, e, f, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( -2 \\sqrt{3}x_{1}x_{2} - 2 \\sqrt{3}x_{2}x_{3} - 2 \\sqrt{3}x_{3}x_{4} - 2 \\sqrt{3}x_{4}x_{5} + 3 x_{1}^{2} + 3 x_{2}^{2} + 3 x_{3}^{2} + 3 x_{4}^{2} + 3 x_{5}^{2}, \\sqrt{3}, x_{1}, x_{2}, x_{3}, x_{4}, x_{5}, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(-2*(sqrt(3))*x_1*x_2 - 2*(sqrt(3))*x_2*x_3 - 2*(sqrt(3))*x_3*x_4 - 2*(sqrt(3))*x_4*x_5 + 3*x_1**2 + 3*x_2**2 + 3*x_3**2 + 3*x_4**2 + 3*x_5**2, sqrt(3), x_1, x_2, x_3, x_4, x_5, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "29\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 7 a^{2}b^{3} - 6 a^{2}b^{2} - 6 a^{2}b + 7 a^{2} + 14 ab^{3} - 12 ab^{2} + 15 ab - 13 a + 7 b^{3} - 6 b^{2} - 6 b + 7, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(7*a**2*b**3 - 6*a**2*b**2 - 6*a**2*b + 7*a**2 + 14*a*b**3 - 12*a*b**2 + 15*a*b - 13*a + 7*b**3 - 6*b**2 - 6*b + 7, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{2}b^{2} + a^{2}b + 2 ab^{2} + ab + a + b^{2} + b, a, b, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**2*b**2 + a**2*b + 2*a*b**2 + a*b + a + b**2 + b, a, b, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "31\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( -2 \\frac{1}{\\sqrt{b}}\\sqrt{\\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}} - 2 \\frac{1}{\\sqrt{b}}\\sqrt{\\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \\frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}} - 2 \\sqrt{\\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}}\\sqrt{\\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \\frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}} + 3, \\frac{1}{\\sqrt{b}}, \\sqrt{\\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \\frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}}, \\sqrt{\\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \\frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}}, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(-2*(1/sqrt(b))*(sqrt(a**2*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a**2*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1))) - 2*(1/sqrt(b))*(sqrt(a*b/(a**2*b + a**2 + a*b + 2*a + 1) + b/(a**2*b + a**2 + a*b + 2*a + 1))) - 2*(sqrt(a**2*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a**2*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1)))*(sqrt(a*b/(a**2*b + a**2 + a*b + 2*a + 1) + b/(a**2*b + a**2 + a*b + 2*a + 1))) + 3, 1/sqrt(b), sqrt(a**2*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a**2*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b**2/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1) + a*b/(a**2*b + a**2 + a*b**2 + 3*a*b + 2*a + b**2 + 2*b + 1)), sqrt(a*b/(a**2*b + a**2 + a*b + 2*a + 1) + b/(a**2*b + a**2 + a*b + 2*a + 1)), domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "32\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( a^{5}b^{2} + a^{5}c^{2} + a^{4}b^{3} - a^{4}b^{2}c - a^{4}bc^{2} - a^{4}c^{3} - a^{3}b^{4} + a^{3}c^{4} + a^{2}b^{5} - a^{2}b^{4}c - a^{2}bc^{4} + a^{2}c^{5} - ab^{4}c^{2} - ab^{2}c^{4} + b^{5}c^{2} + b^{4}c^{3} - b^{3}c^{4} + b^{2}c^{5}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(a**5*b**2 + a**5*c**2 + a**4*b**3 - a**4*b**2*c - a**4*b*c**2 - a**4*c**3 - a**3*b**4 + a**3*c**4 + a**2*b**5 - a**2*b**4*c - a**2*b*c**4 + a**2*c**5 - a*b**4*c**2 - a*b**2*c**4 + b**5*c**2 + b**4*c**3 - b**3*c**4 + b**2*c**5, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "33\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{2}d^{3} - a^{2}d^{2} - a^{2}d + 2 a^{2} + 4 ad^{3} - 2 ad^{2} - 3 a + 2 d^{3} - d^{2} - d + 2, a, d, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**2*d**3 - a**2*d**2 - a**2*d + 2*a**2 + 4*a*d**3 - 2*a*d**2 - 3*a + 2*d**3 - d**2 - d + 2, a, d, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "34\n" + ] + }, + { + "data": { + "text/latex": [ + "$\\displaystyle \\operatorname{Poly}{\\left( 2 a^{3} - 3 a^{2}b + a^{2}c + ab^{2} - 3 ac^{2} + 2 b^{3} - 3 b^{2}c + bc^{2} + 2 c^{3}, a, b, c, domain=\\mathbb{Z} \\right)}$" + ], + "text/plain": [ + "Poly(2*a**3 - 3*a**2*b + a**2*c + a*b**2 - 3*a*c**2 + 2*b**3 - 3*b**2*c + b*c**2 + 2*c**3, a, b, c, domain='ZZ')" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "for i,ineq in zip(range(len(ineqs2)),ineqs2):\n", " print(i)\n", @@ -242,7 +874,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -251,9 +883,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,2,0,2,2,0,2,0,2,0,\n", + "20.714609994000057\n" + ] + }, + { + "data": { + "text/plain": [ + "Counter({0: 21, 2: 14})" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from collections import Counter\n", "from timeit import default_timer as timer\n", @@ -278,9 +929,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,2,2,0,2,0,2,0,\n", + "21.832711064998875\n" + ] + }, + { + "data": { + "text/plain": [ + "Counter({0: 24, 2: 11})" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def cut(a):\n", " if a<=0 or a>=100 or (a is None):\n", @@ -308,9 +978,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,2,2,0,2,0,2,0,\n", + "21.697120987002563\n" + ] + }, + { + "data": { + "text/plain": [ + "Counter({0: 23, 2: 12})" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def cut(a):\n", " if a<=0 or a>=1000 or (a is None):\n", @@ -341,9 +1030,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,0,2,0,2,0,2,0,\n", + "23.187820409999404\n" + ] + }, + { + "data": { + "text/plain": [ + "Counter({0: 24, 2: 11})" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def betw(a):\n", " return a>0.001 and a<1000 and a!=None\n", @@ -381,9 +1089,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "plt.bar(['1','2','3','4'],tm)\n", @@ -394,7 +1113,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -404,9 +1123,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.bar(['1','2','3','4'],[sum(u[i]==0)/len(ineqs2)*100 for i in range(1,5)])\n", "plt.ylabel('inequalities proven [%]')\n", @@ -423,9 +1153,340 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
2FalseTrue
1
False113
True021
\n", + "
" + ], + "text/plain": [ + "2 False True \n", + "1 \n", + "False 11 3\n", + "True 0 21" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
3FalseTrue
1
False122
True021
\n", + "
" + ], + "text/plain": [ + "3 False True \n", + "1 \n", + "False 12 2\n", + "True 0 21" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
4FalseTrue
1
False113
True021
\n", + "
" + ], + "text/plain": [ + "4 False True \n", + "1 \n", + "False 11 3\n", + "True 0 21" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
3FalseTrue
2
False110
True123
\n", + "
" + ], + "text/plain": [ + "3 False True \n", + "2 \n", + "False 11 0\n", + "True 1 23" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
4FalseTrue
2
False101
True123
\n", + "
" + ], + "text/plain": [ + "4 False True \n", + "2 \n", + "False 10 1\n", + "True 1 23" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
4FalseTrue
3
False111
True023
\n", + "
" + ], + "text/plain": [ + "4 False True \n", + "3 \n", + "False 11 1\n", + "True 0 23" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "for i in range(4):\n", " for j in range(i+1,4):\n", @@ -434,9 +1495,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "pvalue 0.25\n", + "statistic 0.0\n", + "pvalue 0.5\n", + "statistic 0.0\n", + "pvalue 0.25\n", + "statistic 0.0\n", + "pvalue 1.0\n", + "statistic 0.0\n", + "pvalue 1.0\n", + "statistic 1.0\n", + "pvalue 1.0\n", + "statistic 0.0\n" + ] + } + ], "source": [ "from statsmodels.stats.contingency_tables import mcnemar\n", "for i in range(4):\n", diff --git a/examples.html b/examples.html new file mode 100644 index 0000000..d795937 --- /dev/null +++ b/examples.html @@ -0,0 +1,17915 @@ + + + + +examples + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+

In this notebook there are presented examples of usage of shiroin, a python library for proving inequalities of multivariate polynomials.

+

At the beginning we need to load the packages.

+ +
+
+
+
+
+
In [1]:
+
+
+
from sympy import *
+from shiroindev import *
+from IPython.display import Latex
+shiro.seed=1
+shiro.display=lambda x:display(Latex(x))
+
+ +
+
+
+ +
+
+
+
+

shiro.seed=1 sets a seed for proving functions. If you don't write it, you can get a slightly different proof each time you run a function. This line is here only for the sake of reproducibility.

+

The next line provides a nicer display of proofs, i.e. formulas will be shown instead of LaTeX code of these formulas. Note that this works on Jupyter, but not on the git page.

+

Now let's make some proofs. We will use problems from https://www.imomath.com/index.php?options=593&lmm=0.

+ +
+
+
+
+
+
+

Problem 1

Prove the inequality $a^2+b^2+c^2\ge ab+bc+ca$, if $a,b,c$ are real numbers.

+ +
+
+
+
+
+
+

Function prove tries to prove that given formula is nonnegative, assuming all variables are nonnegative. In this case the nonnegativity assumption is not a problem, since all powers on the left side are even, so if $|a|^2+|b|^2+|c|^2 \ge |ab|+|ac|+|bc|,$ then $a^2+b^2+c^2= |a|^2+|b|^2+|c|^2 \ge |ab|+|ac|+|bc| \ge ab+ac+bc$.

+ +
+
+
+
+
+
In [2]:
+
+
+
prove('(a^2+b^2+c^2-a*b-a*c-b*c)')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $a^{2} - a b - a c + b^{2} - b c + c^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+Program couldn't find a solution with integer coefficients. Try to multiple the formula by some integer and run this function again. +
+ +
+ +
+ +
+ + + + +
+$$ a b+a c+b c \le a^{2}+b^{2}+c^{2} $$ +
+ +
+ +
+ +
Out[2]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Function prove prints several things. The first two gives us a formula after expanding it. The next one is status, which is the return status of the first use of scipy.optimize.linprog. Possible outputs and explanations are

+
    +
  • 0 - found a proof with real coefficients,
  • +
  • 1 - need more time,
  • +
  • 2 - function didn't find a proof,
  • +
  • 3,4 - loss of precision (which may happen if it has to work with big numbers).
  • +
+

Then we've got a hint. So let's use it!

+ +
+
+
+
+
+
In [3]:
+
+
+
prove('(a^2+b^2+c^2-a*b-a*c-b*c)*2')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $2 a^{2} - 2 a b - 2 a c + 2 b^{2} - 2 b c + 2 c^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 a b \le a^{2}+b^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 a c \le a^{2}+c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 b c \le b^{2}+c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 0 $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[3]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Problem 2

Find all real numbers such that $a^2+b^2+c^2+d^2=a(b+c+d)$.

+ +
+
+
+
+
+
+

At first glance it doesn't look like an inequality problem, but actually it is one. If you try to calculate both sides for different values, you can see that the left side of the equation is never less than the right one. So let's try

+ +
+
+
+
+
+
In [4]:
+
+
+
prove('a^2+b^2+c^2+d^2-a*(b+c+d)')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $a^{2} - a b - a c - a d + b^{2} + c^{2} + d^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 2 +
+ +
+ +
+ +
+ + + + +
+Program couldn't find any proof. +
+ +
+ +
+ +
+ + + + +
+$$ a b+a c+a d \le a^{2}+b^{2}+c^{2}+d^{2} $$ +
+ +
+ +
+ +
Out[4]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+

This time prove didn't found the proof. But it doesn't mean that the inequality is not true! prove uses a list of $n$ positive values, where $n$ is a number of variables in the formula. List of values should correspond to the list of variables in alphabetical order. Here are a few tips how to choose the right values.

+
    +
  1. Consider a function $pos(values)$ which is the sum of the positive addends in the formula after substitution of values to variables. Analogically, let $neg(values)$ be the sum of the negative addends. We should choose such values for which $quotient=pos(values)/|neg(values)|$ is small.
  2. +
  3. The symmetry group of the formula splits set of variables into orbits. Using the same values for variables in one orbit is recommended. In particular, if the symmetry group of the formula is transitive (for example, when the formula is cyclic), then all values (probably) should be the same.
  4. +
  5. If the formula is homogeneous, then $values=(a_1,a_2,...,a_n)$ provide a proof iff $values=(ka_1,ka_2,...,ka_n)$ provides a proof for any $k\in Q_+$ (as long as you don't run into overflow error).
  6. +
+

In the formula above $b,c,d$ are in one orbit and the formula is homogenous, so let's try $a=2$ and $b=c=d=1$.

+ +
+
+
+
+
+
In [5]:
+
+
+
prove('a^2+b^2+c^2+d^2-a*(b+c+d)','2,1,1,1')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to 2 e$ +
+ +
+ +
+ +
+ + + + +
+numerator: $b^{2} - 2 b e + c^{2} - 2 c e + d^{2} - 2 d e + 4 e^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 b e \le b^{2}+e^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 c e \le c^{2}+e^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 d e \le d^{2}+e^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le e^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[5]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Function makes a substitution $a\to 2e$ and try to prove new inequality. This time it succeeded. Moreover, if starting formula is equal to 0, then all these inequalities have to be equalities, so $e^2=0$ and eventually $a=0$. We can also try a little bit lower value for $a$.

+ +
+
+
+
+
+
In [6]:
+
+
+
prove('a^2+b^2+c^2+d^2-a*(b+c+d)','7/4,1,1,1')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to \frac{7 f}{4}$ +
+ +
+ +
+ +
+ + + + +
+numerator: $16 b^{2} - 28 b f + 16 c^{2} - 28 c f + 16 d^{2} - 28 d f + 49 f^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $16$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$28 b f \le 14 b^{2}+14 f^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$28 c f \le 14 c^{2}+14 f^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$28 d f \le 14 d^{2}+14 f^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 2 b^{2}+2 c^{2}+2 d^{2}+7 f^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[6]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Now we can see that if $a^2+b^2+c^2+d^2-a(b+c+d)=0$, then $7f^2+2b^2+2c^2+2d^2=0$ and eventually $a=b=c=d=0$. Note that inequality is proved only for positive numbers (which, by continuity, can be expanded to nonnegative numbers). But using similar argumentation to the one in previous problem, if $(a,b,c,d)=(x,y,z,t)$ is the solution of $a^2+b^2+c^2+d^2-a(b+c+d)=0$, then $(a,b,c,d)=(|x|,|y|,|z|,|t|)$ is a solution, too. Since the only nonnegative solution is $(0,0,0,0)$, it means that it is the only solution.

+

It is worth noting that this time function prove used $f$ as a new variable instead of $e$. If you want to start a new proof and you don't care about the collision of variables from previous proofs, you can use newproof function, which clears the set of used variables.

+

We can also use the findvalues function to find values for the proof more automatically. It looks for (local) minimum of the $quotient$ value defined above.

+ +
+
+
+
+
+
In [7]:
+
+
+
formula=S('a^2+b^2+c^2+d^2-a*(b+c+d)')
+numvalues=findvalues(formula)
+numvalues
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Optimization terminated successfully.
+         Current function value: 1.154701
+         Iterations: 68
+         Function evaluations: 127
+
+
+
+ +
+ +
Out[7]:
+ + + + +
+
(1.4339109663193974,
+ 0.8278441585048405,
+ 0.8279027492686561,
+ 0.8278930696996669)
+
+ +
+ +
+
+ +
+
+
+
+

If the $quotient$ value were less than 1, that would mean that the formula is negative for given values. If $quotient$ were equal to 1, then we have to choose exactly these values (or other values for which the $quotient$ is equal to 1. But here $quotient$ is greater than 1, so we can take a point near it and (probably) still have a proof. The values given to the prove function must not be floating point numbers, so we can rationalize them.

+ +
+
+
+
+
+
In [8]:
+
+
+
values=nsimplify(numvalues,tolerance=0.1,rational=True)
+values
+
+ +
+
+
+ +
+
+ + +
+ +
Out[8]:
+ + + + +
+$\displaystyle \left( \frac{10}{7}, \ \frac{5}{6}, \ \frac{5}{6}, \ \frac{5}{6}\right)$ +
+ +
+ +
+
+ +
+
+
+
In [9]:
+
+
+
newproof()
+prove(formula,values)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to \frac{10 e}{7}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to \frac{5 f}{6}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $c\to \frac{5 g}{6}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $d\to \frac{5 h}{6}$ +
+ +
+ +
+ +
+ + + + +
+numerator: $3600 e^{2} - 2100 e f - 2100 e g - 2100 e h + 1225 f^{2} + 1225 g^{2} + 1225 h^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1764$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2100 e f \le 1050 e^{2}+1050 f^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2100 e g \le 1050 e^{2}+1050 g^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2100 e h \le 1050 e^{2}+1050 h^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 450 e^{2}+175 f^{2}+175 g^{2}+175 h^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[9]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

If you set the tolerance bigger, then the values will have smaller numerators and denominators, so coefficients in the proof will be smaller, too. But if the tolerance is too big, then proof will not be found.

+

Let's skip the problem 3 and look solve the problem 4 instead.

+

Problem 4

If $x$ and $y$ are two positive numbers less than 1, prove that +$$\frac{1}{1-x^2}+\frac{1}{1-y^2}\ge \frac{2}{1-xy}.$$

+ +
+
+
+
+
+
In [10]:
+
+
+
prove('1/(1-x^2)+1/(1-y^2)-2/(1-x*y)')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $- x^{3} y + 2 x^{2} y^{2} - x^{2} - x y^{3} + 2 x y - y^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $x^{3} y^{3} - x^{3} y - x^{2} y^{2} + x^{2} - x y^{3} + x y + y^{2} - 1$ +
+ +
+ +
+ +
+ + + + +
+status: 2 +
+ +
+ +
+ +
+ + + + +
+Program couldn't find any proof. +
+ +
+ +
+ +
+ + + + +
+$$ x^{3} y+x^{2}+x y^{3}+y^{2} \le 2 x^{2} y^{2}+2 x y $$ +
+ +
+ +
+ +
+ + + + +
+It looks like the formula is symmetric. You can assume without loss of generality that x >= y. Try +
+ +
+ +
+ +
+ + + + +
+prove(makesubs(S("-x**3*y + 2*x**2*y**2 - x**2 - x*y**3 + 2*x*y - y**2"),[('y', 'oo')]) +
+ +
+ +
+ +
Out[10]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+

prove assumes that formula is well-defined if all variables are positive, so it doesn't have to analyze the denominator (except of choosing the right sign). In this case it is not true, since if $x=1$, then $1-x^2=0$. Also denominator is equal to $(x^2-1)(y^2-1)(xy-1)$ which is negative for $x,y\in (0,1)$. So we need to make some substitution after which new variables can have all positive values, not just these inside (0,1) interval.

+

We will use a function makesubs to generate these substitutions. It has three basic parameters: formula, intervals and values. intervals are current limitations of variables, values are values of variables for which $quotient$ of formula is small. values should be inside corresponding intervals. This argument is optional but it's better to use it. +Let's go back to our problem. If $x=y$, then $\frac{1}{1-x^2}+\frac{1}{1-y^2}\ge \frac{2}{1-xy}$, so it's the minimum value of the formula. So let values=(1/2,1/2) (warning: do not use decimal point, for example '0.5,0.5').

+ +
+
+
+
+
+
In [11]:
+
+
+
newproof()
+newformula,newvalues=makesubs('1/(1-x^2)+1/(1-y^2)-2/(1-x*y)','[0,1],[0,1]','1/2,1/2')
+prove(newformula*3,newvalues)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $x\to 1 - \frac{1}{a + 1}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $y\to 1 - \frac{1}{b + 1}$ +
+ +
+ +
+ +
+ + + + +
+numerator: $6 a^{3} b + 3 a^{3} - 12 a^{2} b^{2} - 3 a^{2} b + 3 a^{2} + 6 a b^{3} - 3 a b^{2} - 6 a b + 3 b^{3} + 3 b^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $4 a^{2} b + 2 a^{2} + 4 a b^{2} + 8 a b + 3 a + 2 b^{2} + 3 b + 1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$12 a^{2} b^{2} \le 6 a^{3} b+6 a b^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$3 a^{2} b \le 2 a^{3}+b^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$3 a b^{2} \le a^{3}+2 b^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$6 a b \le 3 a^{2}+3 b^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 0 $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[11]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Now let's get back to problem 3.

+

Problem 3

If $a,b,c$ are positive real numbers that satisfy $a^2+b^2+c^2=1$, find the minimal value of +$$\frac{a^2b^2}{c^2}+\frac{b^2c^2}{a^2}+\frac{c^2a^2}{b^2}$$

+

The problem is equivalent to finding minimum of $xy/z+yz/x+zx/y$ assuming $x+y+z=1$ and $x,y,z>0$. The first idea is to suppose that the minimum is reached when $x=y=z$. In that case, $x=y=z=1/3$ and formula is equal to 1. Now we can substitute $z\to 1-x-y$. Constraints for variables are $x>0$, $y>0$, $x+y<1$. We can rewrite it as $x \in (0,1-y)$, $y \in (0,1)$. These two conditions have two important properties:

+
    +
  • constraints for variables are written as intervals,
  • +
  • there are no "backwards dependencies", i.e. there is no $x$ in the interval of $y$.
  • +
+

If these two conditions hold, then you can use makesubs function.

+ +
+
+
+
+
+
In [12]:
+
+
+
newproof()
+formula=Sm('xy/z+yz/x+zx/y-1').subs('z',S('1-x-y'))
+newformula,values=makesubs(formula,'[0,1-y],[0,1]','1/3,1/3')
+prove(newformula,values)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $x\to - y + 1 + \frac{y - 1}{a + 1}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $y\to 1 - \frac{1}{b + 1}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to \frac{c}{2}$ +
+ +
+ +
+ +
+ + + + +
+numerator: $a^{4} c^{2} + a^{3} c^{2} - 2 a^{3} c - 4 a^{2} c + 4 a^{2} + a c^{2} - 2 a c + c^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $a^{3} c^{2} + 2 a^{3} c + 2 a^{2} c^{2} + 4 a^{2} c + a c^{2} + 2 a c$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 a^{3} c \le a^{4} c^{2}+a^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$4 a^{2} c \le a^{3} c^{2}+2 a^{2}+a c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 a c \le a^{2}+c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 0 $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[12]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

The proof is found, so the assumption that 1 is the minimum of xy/z+yz/x+zx/y was good.

+

Functions S and Sm creates a SymPy object from a string. The only difference is that Sm assumes that there are no multi-letter variables and adds a multiplication sign between every two terms which has no operator sign, so object Sm(xy/z+yz/x+zx/y) has 3 variables x,y,z and S('xy/z+yz/x+zx/y') has 6 variables x,y,z,xy,yz,zx.

+

As you may have noticed, formulas are often cyclic or symmetric. Therefore you can use cyclize or symmetrize function to reduce the length of the written formula. Here are a few commands which will do the same as each other.

+ +
+
+
+
+
+
In [13]:
+
+
+
prove('(a^2+b^2+c^2-a*b-a*c-b*c)*2')
+#prove(S('(a^2+b^2+c^2-a*b-a*c-b*c)*2'))
+#prove(Sm('2(a^2+b^2+c^2-ab-ac-bc)'))
+#prove(cyclize('2*a^2-2*a*b'))
+#prove(symmetrize('a^2-a*b'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $2 a^{2} - 2 a b - 2 a c + 2 b^{2} - 2 b c + 2 c^{2}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 a b \le a^{2}+b^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 a c \le a^{2}+c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 b c \le b^{2}+c^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 0 $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[13]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Now look at formula $(x-1)^4$. It's quite obvious that it's nonnegative, but prove fails to show this!

+ +
+
+
+
+
+
In [14]:
+
+
+
prove('(x-1)^4')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $x^{4} - 4 x^{3} + 6 x^{2} - 4 x + 1$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 2 +
+ +
+ +
+ +
+ + + + +
+Program couldn't find any proof. +
+ +
+ +
+ +
+ + + + +
+$$ 4 x^{3}+4 x \le x^{4}+6 x^{2}+1 $$ +
+ +
+ +
+ +
Out[14]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+

But there is a relatively simple method to generate a proof using this library. We will make to proofs: one for $x\in (1,\infty)$ and the second one for $(-\infty,1)$.

+ +
+
+
+
+
+
In [15]:
+
+
+
newproof()
+prove(makesubs('(x-1)^4','(1,oo)'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $x\to a + 1$ +
+ +
+ +
+ +
+ + + + +
+numerator: $a^{4}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le a^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[15]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
In [16]:
+
+
+
newproof()
+prove(makesubs('(x-1)^4','(-oo,1)'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $x\to 1 - a$ +
+ +
+ +
+ +
+ + + + +
+numerator: $a^{4}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le a^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[16]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Now let's go to the problem 10

+

Problem 10

If $a,b,c,d>0$, prove that +$$\frac a{b+c}+\frac b{c+d}+ \frac c{d+a}+ \frac d{a+b}\geq 2.$$

+

Let's try a simple approach.

+ +
+
+
+
+
+
In [17]:
+
+
+
formula=cyclize('a/(b+c)',variables='a,b,c,d')-2
+formula
+
+ +
+
+
+ +
+
+ + +
+ +
Out[17]:
+ + + + +
+$\displaystyle \frac{a}{b + c} + \frac{b}{c + d} + \frac{c}{a + d} + \frac{d}{a + b} - 2$ +
+ +
+ +
+
+ +
+
+
+
In [18]:
+
+
+
prove(formula)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $a^{3} c + a^{3} d + a^{2} b^{2} - a^{2} b d - 2 a^{2} c^{2} - a^{2} c d + a^{2} d^{2} + a b^{3} - a b^{2} c - a b^{2} d - a b c^{2} + a c^{3} - a c d^{2} + b^{3} d + b^{2} c^{2} - 2 b^{2} d^{2} + b c^{3} - b c^{2} d - b c d^{2} + b d^{3} + c^{2} d^{2} + c d^{3}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $a^{2} b c + a^{2} b d + a^{2} c^{2} + a^{2} c d + a b^{2} c + a b^{2} d + a b c^{2} + 2 a b c d + a b d^{2} + a c^{2} d + a c d^{2} + b^{2} c d + b^{2} d^{2} + b c^{2} d + b c d^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 2 +
+ +
+ +
+ +
+ + + + +
+Program couldn't find any proof. +
+ +
+ +
+ +
+ + + + +
+$$ a^{2} b d+2 a^{2} c^{2}+a^{2} c d+a b^{2} c+a b^{2} d+a b c^{2}+a c d^{2}+2 b^{2} d^{2}+b c^{2} d+b c d^{2} \le a^{3} c+a^{3} d+a^{2} b^{2}+a^{2} d^{2}+a b^{3}+a c^{3}+b^{3} d+b^{2} c^{2}+b c^{3}+b d^{3}+c^{2} d^{2}+c d^{3} $$ +
+ +
+ +
+ +
Out[18]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+

This problem, like the previous one, can be solved by splitting the domain of variables to several subdomains. But we can also use the symmetry of this inequality. For example, without loss of generality we can assume that $a\ge c$ and $b\ge d$, so $a\in [c,\infty)$, $b\in [d,\infty)$.

+ +
+
+
+
+
+
In [19]:
+
+
+
newproof()
+prove(makesubs(formula,'[c,oo],[d,oo]'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to c + e$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to d + f$ +
+ +
+ +
+ +
+ + + + +
+numerator: $c^{2} e^{2} - c^{2} e f + c^{2} f^{2} + 2 c d e^{2} + 2 c d f^{2} + c e^{3} + c e f^{2} + c f^{3} + d^{2} e^{2} + d^{2} e f + d^{2} f^{2} + d e^{3} + d e^{2} f + 2 d e f^{2} + d f^{3} + e^{2} f^{2} + e f^{3}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $c^{4} + 4 c^{3} d + 2 c^{3} e + 2 c^{3} f + 6 c^{2} d^{2} + 6 c^{2} d e + 6 c^{2} d f + c^{2} e^{2} + 3 c^{2} e f + c^{2} f^{2} + 4 c d^{3} + 6 c d^{2} e + 6 c d^{2} f + 2 c d e^{2} + 6 c d e f + 2 c d f^{2} + c e^{2} f + c e f^{2} + d^{4} + 2 d^{3} e + 2 d^{3} f + d^{2} e^{2} + 3 d^{2} e f + d^{2} f^{2} + d e^{2} f + d e f^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+Program couldn't find a solution with integer coefficients. Try to multiple the formula by some integer and run this function again. +
+ +
+ +
+ +
+ + + + +
+$$ c^{2} e f \le c^{2} e^{2}+c^{2} f^{2}+2 c d e^{2}+2 c d f^{2}+c e^{3}+c e f^{2}+c f^{3}+d^{2} e^{2}+d^{2} e f+d^{2} f^{2}+d e^{3}+d e^{2} f+2 d e f^{2}+d f^{3}+e^{2} f^{2}+e f^{3} $$ +
+ +
+ +
+ +
Out[19]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
In [20]:
+
+
+
newproof()
+prove(makesubs(formula,'[c,oo],[d,oo]')*2)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to c + e$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to d + f$ +
+ +
+ +
+ +
+ + + + +
+numerator: $2 c^{2} e^{2} - 2 c^{2} e f + 2 c^{2} f^{2} + 4 c d e^{2} + 4 c d f^{2} + 2 c e^{3} + 2 c e f^{2} + 2 c f^{3} + 2 d^{2} e^{2} + 2 d^{2} e f + 2 d^{2} f^{2} + 2 d e^{3} + 2 d e^{2} f + 4 d e f^{2} + 2 d f^{3} + 2 e^{2} f^{2} + 2 e f^{3}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $c^{4} + 4 c^{3} d + 2 c^{3} e + 2 c^{3} f + 6 c^{2} d^{2} + 6 c^{2} d e + 6 c^{2} d f + c^{2} e^{2} + 3 c^{2} e f + c^{2} f^{2} + 4 c d^{3} + 6 c d^{2} e + 6 c d^{2} f + 2 c d e^{2} + 6 c d e f + 2 c d f^{2} + c e^{2} f + c e f^{2} + d^{4} + 2 d^{3} e + 2 d^{3} f + d^{2} e^{2} + 3 d^{2} e f + d^{2} f^{2} + d e^{2} f + d e f^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 c^{2} e f \le c^{2} e^{2}+c^{2} f^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le c^{2} e^{2}+c^{2} f^{2}+4 c d e^{2}+4 c d f^{2}+2 c e^{3}+2 c e f^{2}+2 c f^{3}+2 d^{2} e^{2}+2 d^{2} e f+2 d^{2} f^{2}+2 d e^{3}+2 d e^{2} f+4 d e f^{2}+2 d f^{3}+2 e^{2} f^{2}+2 e f^{3} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[20]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

It's a good idea to use intervals that are unbounded from one side (i.e. those which contain $\pm\infty$). In this problem we could assume that $a\in (0,c]$, $b\in (0,d]$ as well. But as you can see, in this case the proof is several times longer.

+ +
+
+
+
+
+
In [21]:
+
+
+
newproof()
+prove(makesubs(formula,'[0,c],[0,d]')*2)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Substitute $a\to c - \frac{c}{e + 1}$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to d - \frac{d}{f + 1}$ +
+ +
+ +
+ +
+ + + + +
+numerator: $2 c^{4} e f^{3} + 6 c^{4} e f^{2} + 6 c^{4} e f + 2 c^{4} e - 2 c^{3} d e^{2} f^{2} - 4 c^{3} d e^{2} f - 2 c^{3} d e^{2} + 4 c^{3} d e f^{3} + 8 c^{3} d e f^{2} + 4 c^{3} d e f + 2 c^{3} d f^{3} + 4 c^{3} d f^{2} + 2 c^{3} d f + 2 c^{2} d^{2} e^{3} f + 2 c^{2} d^{2} e^{3} + 4 c^{2} d^{2} e^{2} f + 4 c^{2} d^{2} e^{2} + 2 c^{2} d^{2} e f^{3} + 4 c^{2} d^{2} e f^{2} + 6 c^{2} d^{2} e f + 4 c^{2} d^{2} e + 2 c^{2} d^{2} f^{3} + 4 c^{2} d^{2} f^{2} + 4 c^{2} d^{2} f + 2 c^{2} d^{2} + 4 c d^{3} e^{3} f + 2 c d^{3} e^{3} + 2 c d^{3} e^{2} f^{2} + 12 c d^{3} e^{2} f + 6 c d^{3} e^{2} + 4 c d^{3} e f^{2} + 12 c d^{3} e f + 6 c d^{3} e + 2 c d^{3} f^{2} + 4 c d^{3} f + 2 c d^{3} + 2 d^{4} e^{3} f + 6 d^{4} e^{2} f + 6 d^{4} e f + 2 d^{4} f$ +
+ +
+ +
+ +
+ + + + +
+denominator: $c^{4} e^{3} f^{3} + 3 c^{4} e^{3} f^{2} + 3 c^{4} e^{3} f + c^{4} e^{3} + c^{4} e^{2} f^{3} + 3 c^{4} e^{2} f^{2} + 3 c^{4} e^{2} f + c^{4} e^{2} + 4 c^{3} d e^{3} f^{3} + 10 c^{3} d e^{3} f^{2} + 8 c^{3} d e^{3} f + 2 c^{3} d e^{3} + 6 c^{3} d e^{2} f^{3} + 15 c^{3} d e^{2} f^{2} + 12 c^{3} d e^{2} f + 3 c^{3} d e^{2} + 2 c^{3} d e f^{3} + 5 c^{3} d e f^{2} + 4 c^{3} d e f + c^{3} d e + 6 c^{2} d^{2} e^{3} f^{3} + 12 c^{2} d^{2} e^{3} f^{2} + 7 c^{2} d^{2} e^{3} f + c^{2} d^{2} e^{3} + 12 c^{2} d^{2} e^{2} f^{3} + 24 c^{2} d^{2} e^{2} f^{2} + 14 c^{2} d^{2} e^{2} f + 2 c^{2} d^{2} e^{2} + 7 c^{2} d^{2} e f^{3} + 14 c^{2} d^{2} e f^{2} + 8 c^{2} d^{2} e f + c^{2} d^{2} e + c^{2} d^{2} f^{3} + 2 c^{2} d^{2} f^{2} + c^{2} d^{2} f + 4 c d^{3} e^{3} f^{3} + 6 c d^{3} e^{3} f^{2} + 2 c d^{3} e^{3} f + 10 c d^{3} e^{2} f^{3} + 15 c d^{3} e^{2} f^{2} + 5 c d^{3} e^{2} f + 8 c d^{3} e f^{3} + 12 c d^{3} e f^{2} + 4 c d^{3} e f + 2 c d^{3} f^{3} + 3 c d^{3} f^{2} + c d^{3} f + d^{4} e^{3} f^{3} + d^{4} e^{3} f^{2} + 3 d^{4} e^{2} f^{3} + 3 d^{4} e^{2} f^{2} + 3 d^{4} e f^{3} + 3 d^{4} e f^{2} + d^{4} f^{3} + d^{4} f^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 c^{3} d e^{2} f^{2} \le c^{4} e f^{3}+c^{2} d^{2} e^{3} f$$ +
+ +
+ +
+ +
+ + + + +
+$$2 c^{3} d e^{2} \le c^{4} e+c^{2} d^{2} e^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$4 c^{3} d e^{2} f \le c^{4} e f^{3}+c^{4} e+c^{2} d^{2} e^{3} f+c^{2} d^{2} e^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 6 c^{4} e f^{2}+6 c^{4} e f+4 c^{3} d e f^{3}+8 c^{3} d e f^{2}+4 c^{3} d e f+2 c^{3} d f^{3}+4 c^{3} d f^{2}+2 c^{3} d f+4 c^{2} d^{2} e^{2} f+4 c^{2} d^{2} e^{2}+2 c^{2} d^{2} e f^{3}+4 c^{2} d^{2} e f^{2}+6 c^{2} d^{2} e f+4 c^{2} d^{2} e+2 c^{2} d^{2} f^{3}+4 c^{2} d^{2} f^{2}+4 c^{2} d^{2} f+2 c^{2} d^{2}+4 c d^{3} e^{3} f+2 c d^{3} e^{3}+2 c d^{3} e^{2} f^{2}+12 c d^{3} e^{2} f+6 c d^{3} e^{2}+4 c d^{3} e f^{2}+12 c d^{3} e f+6 c d^{3} e+2 c d^{3} f^{2}+4 c d^{3} f+2 c d^{3}+2 d^{4} e^{3} f+6 d^{4} e^{2} f+6 d^{4} e f+2 d^{4} f $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[21]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Function powerprove is a shortcut for splitting domain $R_+^n$ on several subdomains and proving the inequality for each of them. This function uses $2^n$ of $n$-dimensional intervals with a common point (by default it's $(1,1,...,1)$), where $n$ is a number of variables. Here there are two examples of using it. As you can see, proofs are very long.

+ +
+
+
+
+
+
In [22]:
+
+
+
newproof()
+#this is equivalent to
+#prove(makesubs('(x-1)^4','[1,oo]'))
+#prove(makesubs('(x-1)^4','[-oo,1]'))
+powerprove('(x-1)^4')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $x^{4} - 4 x^{3} + 6 x^{2} - 4 x + 1$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $x\to 1+a$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $a^{4}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le a^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $x\to 1/(1+b)$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $b^{4}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le b^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[22]:
+ + + + +
+
Counter({0: 2})
+
+ +
+ +
+
+ +
+
+
+
In [23]:
+
+
+
newproof()
+formula=Sm('-(3a + 2b + c)(2a^3 + 3b^2 + 6c + 1) + (4a + 4b + 4c)(a^4 + b^3 + c^2 + 3)')
+#this is equivalent to
+#prove(makesubs(formula,'[1,oo],[1,oo],[1,oo]'))
+#prove(makesubs(formula,'[-1,oo],[1,oo],[1,oo]'))
+#prove(makesubs(formula,'[1,oo],[-1,oo],[1,oo]'))
+#prove(makesubs(formula,'[-1,oo],[-1,oo],[1,oo]'))
+#prove(makesubs(formula,'[1,oo],[1,oo],[-1,oo]'))
+#prove(makesubs(formula,'[-1,oo],[1,oo],[-1,oo]'))
+#prove(makesubs(formula,'[1,oo],[-1,oo],[-1,oo]'))
+#prove(makesubs(formula,'[-1,oo],[-1,oo],[-1,oo]'))
+powerprove(formula)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $4 a^{5} + 4 a^{4} b + 4 a^{4} c - 6 a^{4} - 4 a^{3} b - 2 a^{3} c + 4 a b^{3} - 9 a b^{2} + 4 a c^{2} - 18 a c + 9 a + 4 b^{4} + 4 b^{3} c - 6 b^{3} - 3 b^{2} c + 4 b c^{2} - 12 b c + 10 b + 4 c^{3} - 6 c^{2} + 11 c$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1+d,b\to 1+e,c\to 1+f$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 d^{5} + 4 d^{4} e + 4 d^{4} f + 22 d^{4} + 12 d^{3} e + 14 d^{3} f + 42 d^{3} + 12 d^{2} e + 18 d^{2} f + 34 d^{2} + 4 d e^{3} + 3 d e^{2} - 2 d e + 4 d f^{2} + 4 e^{4} + 4 e^{3} f + 18 e^{3} + 9 e^{2} f + 18 e^{2} + 4 e f^{2} + 2 e f + 4 f^{3} + 14 f^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 d e \le d^{2}+e^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 d^{5}+4 d^{4} e+4 d^{4} f+22 d^{4}+12 d^{3} e+14 d^{3} f+42 d^{3}+12 d^{2} e+18 d^{2} f+33 d^{2}+4 d e^{3}+3 d e^{2}+4 d f^{2}+4 e^{4}+4 e^{3} f+18 e^{3}+9 e^{2} f+17 e^{2}+4 e f^{2}+2 e f+4 f^{3}+14 f^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1/(1+g),b\to 1+h,c\to 1+i$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 g^{5} h^{4} + 4 g^{5} h^{3} i + 14 g^{5} h^{3} + 9 g^{5} h^{2} i + 15 g^{5} h^{2} + 4 g^{5} h i^{2} + 2 g^{5} h i + 6 g^{5} h + 4 g^{5} i^{3} + 10 g^{5} i^{2} + 8 g^{5} i + 10 g^{5} + 20 g^{4} h^{4} + 20 g^{4} h^{3} i + 74 g^{4} h^{3} + 45 g^{4} h^{2} i + 78 g^{4} h^{2} + 20 g^{4} h i^{2} + 10 g^{4} h i + 24 g^{4} h + 20 g^{4} i^{3} + 54 g^{4} i^{2} + 30 g^{4} i + 40 g^{4} + 40 g^{3} h^{4} + 40 g^{3} h^{3} i + 156 g^{3} h^{3} + 90 g^{3} h^{2} i + 162 g^{3} h^{2} + 40 g^{3} h i^{2} + 20 g^{3} h i + 36 g^{3} h + 40 g^{3} i^{3} + 116 g^{3} i^{2} + 40 g^{3} i + 60 g^{3} + 40 g^{2} h^{4} + 40 g^{2} h^{3} i + 164 g^{2} h^{3} + 90 g^{2} h^{2} i + 168 g^{2} h^{2} + 40 g^{2} h i^{2} + 20 g^{2} h i + 20 g^{2} h + 40 g^{2} i^{3} + 124 g^{2} i^{2} + 18 g^{2} i + 34 g^{2} + 20 g h^{4} + 20 g h^{3} i + 86 g h^{3} + 45 g h^{2} i + 87 g h^{2} + 20 g h i^{2} + 10 g h i + 2 g h + 20 g i^{3} + 66 g i^{2} + 4 h^{4} + 4 h^{3} i + 18 h^{3} + 9 h^{2} i + 18 h^{2} + 4 h i^{2} + 2 h i + 4 i^{3} + 14 i^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 g^{5} h^{4}+4 g^{5} h^{3} i+14 g^{5} h^{3}+9 g^{5} h^{2} i+15 g^{5} h^{2}+4 g^{5} h i^{2}+2 g^{5} h i+6 g^{5} h+4 g^{5} i^{3}+10 g^{5} i^{2}+8 g^{5} i+10 g^{5}+20 g^{4} h^{4}+20 g^{4} h^{3} i+74 g^{4} h^{3}+45 g^{4} h^{2} i+78 g^{4} h^{2}+20 g^{4} h i^{2}+10 g^{4} h i+24 g^{4} h+20 g^{4} i^{3}+54 g^{4} i^{2}+30 g^{4} i+40 g^{4}+40 g^{3} h^{4}+40 g^{3} h^{3} i+156 g^{3} h^{3}+90 g^{3} h^{2} i+162 g^{3} h^{2}+40 g^{3} h i^{2}+20 g^{3} h i+36 g^{3} h+40 g^{3} i^{3}+116 g^{3} i^{2}+40 g^{3} i+60 g^{3}+40 g^{2} h^{4}+40 g^{2} h^{3} i+164 g^{2} h^{3}+90 g^{2} h^{2} i+168 g^{2} h^{2}+40 g^{2} h i^{2}+20 g^{2} h i+20 g^{2} h+40 g^{2} i^{3}+124 g^{2} i^{2}+18 g^{2} i+34 g^{2}+20 g h^{4}+20 g h^{3} i+86 g h^{3}+45 g h^{2} i+87 g h^{2}+20 g h i^{2}+10 g h i+2 g h+20 g i^{3}+66 g i^{2}+4 h^{4}+4 h^{3} i+18 h^{3}+9 h^{2} i+18 h^{2}+4 h i^{2}+2 h i+4 i^{3}+14 i^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1+j,b\to 1/(1+k),c\to 1+l$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 j^{5} k^{4} + 16 j^{5} k^{3} + 24 j^{5} k^{2} + 16 j^{5} k + 4 j^{5} + 4 j^{4} k^{4} l + 18 j^{4} k^{4} + 16 j^{4} k^{3} l + 76 j^{4} k^{3} + 24 j^{4} k^{2} l + 120 j^{4} k^{2} + 16 j^{4} k l + 84 j^{4} k + 4 j^{4} l + 22 j^{4} + 14 j^{3} k^{4} l + 30 j^{3} k^{4} + 56 j^{3} k^{3} l + 132 j^{3} k^{3} + 84 j^{3} k^{2} l + 216 j^{3} k^{2} + 56 j^{3} k l + 156 j^{3} k + 14 j^{3} l + 42 j^{3} + 18 j^{2} k^{4} l + 22 j^{2} k^{4} + 72 j^{2} k^{3} l + 100 j^{2} k^{3} + 108 j^{2} k^{2} l + 168 j^{2} k^{2} + 72 j^{2} k l + 124 j^{2} k + 18 j^{2} l + 34 j^{2} + 4 j k^{4} l^{2} + j k^{4} + 16 j k^{3} l^{2} + 8 j k^{3} + 24 j k^{2} l^{2} + 9 j k^{2} + 16 j k l^{2} + 2 j k + 4 j l^{2} + 4 k^{4} l^{3} + 10 k^{4} l^{2} + 3 k^{4} l + 4 k^{4} + 16 k^{3} l^{3} + 44 k^{3} l^{2} + 8 k^{3} l + 18 k^{3} + 24 k^{2} l^{3} + 72 k^{2} l^{2} + 3 k^{2} l + 18 k^{2} + 16 k l^{3} + 52 k l^{2} - 2 k l + 4 l^{3} + 14 l^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 k l \le k^{2}+l^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 j^{5} k^{4}+16 j^{5} k^{3}+24 j^{5} k^{2}+16 j^{5} k+4 j^{5}+4 j^{4} k^{4} l+18 j^{4} k^{4}+16 j^{4} k^{3} l+76 j^{4} k^{3}+24 j^{4} k^{2} l+120 j^{4} k^{2}+16 j^{4} k l+84 j^{4} k+4 j^{4} l+22 j^{4}+14 j^{3} k^{4} l+30 j^{3} k^{4}+56 j^{3} k^{3} l+132 j^{3} k^{3}+84 j^{3} k^{2} l+216 j^{3} k^{2}+56 j^{3} k l+156 j^{3} k+14 j^{3} l+42 j^{3}+18 j^{2} k^{4} l+22 j^{2} k^{4}+72 j^{2} k^{3} l+100 j^{2} k^{3}+108 j^{2} k^{2} l+168 j^{2} k^{2}+72 j^{2} k l+124 j^{2} k+18 j^{2} l+34 j^{2}+4 j k^{4} l^{2}+j k^{4}+16 j k^{3} l^{2}+8 j k^{3}+24 j k^{2} l^{2}+9 j k^{2}+16 j k l^{2}+2 j k+4 j l^{2}+4 k^{4} l^{3}+10 k^{4} l^{2}+3 k^{4} l+4 k^{4}+16 k^{3} l^{3}+44 k^{3} l^{2}+8 k^{3} l+18 k^{3}+24 k^{2} l^{3}+72 k^{2} l^{2}+3 k^{2} l+17 k^{2}+16 k l^{3}+52 k l^{2}+4 l^{3}+13 l^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1/(1+m),b\to 1/(1+n),c\to 1+o$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 m^{5} n^{4} o^{3} + 6 m^{5} n^{4} o^{2} + 11 m^{5} n^{4} o + 9 m^{5} n^{4} + 16 m^{5} n^{3} o^{3} + 28 m^{5} n^{3} o^{2} + 40 m^{5} n^{3} o + 38 m^{5} n^{3} + 24 m^{5} n^{2} o^{3} + 48 m^{5} n^{2} o^{2} + 51 m^{5} n^{2} o + 57 m^{5} n^{2} + 16 m^{5} n o^{3} + 36 m^{5} n o^{2} + 30 m^{5} n o + 34 m^{5} n + 4 m^{5} o^{3} + 10 m^{5} o^{2} + 8 m^{5} o + 10 m^{5} + 20 m^{4} n^{4} o^{3} + 34 m^{4} n^{4} o^{2} + 45 m^{4} n^{4} o + 40 m^{4} n^{4} + 80 m^{4} n^{3} o^{3} + 156 m^{4} n^{3} o^{2} + 160 m^{4} n^{3} o + 170 m^{4} n^{3} + 120 m^{4} n^{2} o^{3} + 264 m^{4} n^{2} o^{2} + 195 m^{4} n^{2} o + 246 m^{4} n^{2} + 80 m^{4} n o^{3} + 196 m^{4} n o^{2} + 110 m^{4} n o + 136 m^{4} n + 20 m^{4} o^{3} + 54 m^{4} o^{2} + 30 m^{4} o + 40 m^{4} + 40 m^{3} n^{4} o^{3} + 76 m^{3} n^{4} o^{2} + 70 m^{3} n^{4} o + 70 m^{3} n^{4} + 160 m^{3} n^{3} o^{3} + 344 m^{3} n^{3} o^{2} + 240 m^{3} n^{3} o + 300 m^{3} n^{3} + 240 m^{3} n^{2} o^{3} + 576 m^{3} n^{2} o^{2} + 270 m^{3} n^{2} o + 414 m^{3} n^{2} + 160 m^{3} n o^{3} + 424 m^{3} n o^{2} + 140 m^{3} n o + 204 m^{3} n + 40 m^{3} o^{3} + 116 m^{3} o^{2} + 40 m^{3} o + 60 m^{3} + 40 m^{2} n^{4} o^{3} + 84 m^{2} n^{4} o^{2} + 48 m^{2} n^{4} o + 58 m^{2} n^{4} + 160 m^{2} n^{3} o^{3} + 376 m^{2} n^{3} o^{2} + 152 m^{2} n^{3} o + 248 m^{2} n^{3} + 240 m^{2} n^{2} o^{3} + 624 m^{2} n^{2} o^{2} + 138 m^{2} n^{2} o + 312 m^{2} n^{2} + 160 m^{2} n o^{3} + 456 m^{2} n o^{2} + 52 m^{2} n o + 116 m^{2} n + 40 m^{2} o^{3} + 124 m^{2} o^{2} + 18 m^{2} o + 34 m^{2} + 20 m n^{4} o^{3} + 46 m n^{4} o^{2} + 15 m n^{4} o + 19 m n^{4} + 80 m n^{3} o^{3} + 204 m n^{3} o^{2} + 40 m n^{3} o + 82 m n^{3} + 120 m n^{2} o^{3} + 336 m n^{2} o^{2} + 15 m n^{2} o + 81 m n^{2} + 80 m n o^{3} + 244 m n o^{2} - 10 m n o - 2 m n + 20 m o^{3} + 66 m o^{2} + 4 n^{4} o^{3} + 10 n^{4} o^{2} + 3 n^{4} o + 4 n^{4} + 16 n^{3} o^{3} + 44 n^{3} o^{2} + 8 n^{3} o + 18 n^{3} + 24 n^{2} o^{3} + 72 n^{2} o^{2} + 3 n^{2} o + 18 n^{2} + 16 n o^{3} + 52 n o^{2} - 2 n o + 4 o^{3} + 14 o^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 m n \le m^{2}+n^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 n o \le n^{2}+o^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$10 m n o \le 2 m^{2}+2 m n^{2} o+4 m o^{2}+2 n^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 m^{5} n^{4} o^{3}+6 m^{5} n^{4} o^{2}+11 m^{5} n^{4} o+9 m^{5} n^{4}+16 m^{5} n^{3} o^{3}+28 m^{5} n^{3} o^{2}+40 m^{5} n^{3} o+38 m^{5} n^{3}+24 m^{5} n^{2} o^{3}+48 m^{5} n^{2} o^{2}+51 m^{5} n^{2} o+57 m^{5} n^{2}+16 m^{5} n o^{3}+36 m^{5} n o^{2}+30 m^{5} n o+34 m^{5} n+4 m^{5} o^{3}+10 m^{5} o^{2}+8 m^{5} o+10 m^{5}+20 m^{4} n^{4} o^{3}+34 m^{4} n^{4} o^{2}+45 m^{4} n^{4} o+40 m^{4} n^{4}+80 m^{4} n^{3} o^{3}+156 m^{4} n^{3} o^{2}+160 m^{4} n^{3} o+170 m^{4} n^{3}+120 m^{4} n^{2} o^{3}+264 m^{4} n^{2} o^{2}+195 m^{4} n^{2} o+246 m^{4} n^{2}+80 m^{4} n o^{3}+196 m^{4} n o^{2}+110 m^{4} n o+136 m^{4} n+20 m^{4} o^{3}+54 m^{4} o^{2}+30 m^{4} o+40 m^{4}+40 m^{3} n^{4} o^{3}+76 m^{3} n^{4} o^{2}+70 m^{3} n^{4} o+70 m^{3} n^{4}+160 m^{3} n^{3} o^{3}+344 m^{3} n^{3} o^{2}+240 m^{3} n^{3} o+300 m^{3} n^{3}+240 m^{3} n^{2} o^{3}+576 m^{3} n^{2} o^{2}+270 m^{3} n^{2} o+414 m^{3} n^{2}+160 m^{3} n o^{3}+424 m^{3} n o^{2}+140 m^{3} n o+204 m^{3} n+40 m^{3} o^{3}+116 m^{3} o^{2}+40 m^{3} o+60 m^{3}+40 m^{2} n^{4} o^{3}+84 m^{2} n^{4} o^{2}+48 m^{2} n^{4} o+58 m^{2} n^{4}+160 m^{2} n^{3} o^{3}+376 m^{2} n^{3} o^{2}+152 m^{2} n^{3} o+248 m^{2} n^{3}+240 m^{2} n^{2} o^{3}+624 m^{2} n^{2} o^{2}+138 m^{2} n^{2} o+312 m^{2} n^{2}+160 m^{2} n o^{3}+456 m^{2} n o^{2}+52 m^{2} n o+116 m^{2} n+40 m^{2} o^{3}+124 m^{2} o^{2}+18 m^{2} o+31 m^{2}+20 m n^{4} o^{3}+46 m n^{4} o^{2}+15 m n^{4} o+19 m n^{4}+80 m n^{3} o^{3}+204 m n^{3} o^{2}+40 m n^{3} o+82 m n^{3}+120 m n^{2} o^{3}+336 m n^{2} o^{2}+13 m n^{2} o+81 m n^{2}+80 m n o^{3}+244 m n o^{2}+20 m o^{3}+62 m o^{2}+4 n^{4} o^{3}+10 n^{4} o^{2}+3 n^{4} o+4 n^{4}+16 n^{3} o^{3}+44 n^{3} o^{2}+8 n^{3} o+16 n^{3}+24 n^{2} o^{3}+72 n^{2} o^{2}+3 n^{2} o+16 n^{2}+16 n o^{3}+52 n o^{2}+4 o^{3}+13 o^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1+p,b\to 1+q,c\to 1/(1+r)$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 p^{5} r^{3} + 12 p^{5} r^{2} + 12 p^{5} r + 4 p^{5} + 4 p^{4} q r^{3} + 12 p^{4} q r^{2} + 12 p^{4} q r + 4 p^{4} q + 18 p^{4} r^{3} + 58 p^{4} r^{2} + 62 p^{4} r + 22 p^{4} + 12 p^{3} q r^{3} + 36 p^{3} q r^{2} + 36 p^{3} q r + 12 p^{3} q + 28 p^{3} r^{3} + 98 p^{3} r^{2} + 112 p^{3} r + 42 p^{3} + 12 p^{2} q r^{3} + 36 p^{2} q r^{2} + 36 p^{2} q r + 12 p^{2} q + 16 p^{2} r^{3} + 66 p^{2} r^{2} + 84 p^{2} r + 34 p^{2} + 4 p q^{3} r^{3} + 12 p q^{3} r^{2} + 12 p q^{3} r + 4 p q^{3} + 3 p q^{2} r^{3} + 9 p q^{2} r^{2} + 9 p q^{2} r + 3 p q^{2} - 2 p q r^{3} - 6 p q r^{2} - 6 p q r - 2 p q + 4 p r^{3} + 4 p r^{2} + 4 q^{4} r^{3} + 12 q^{4} r^{2} + 12 q^{4} r + 4 q^{4} + 14 q^{3} r^{3} + 46 q^{3} r^{2} + 50 q^{3} r + 18 q^{3} + 9 q^{2} r^{3} + 36 q^{2} r^{2} + 45 q^{2} r + 18 q^{2} + 2 q r^{3} - 2 q r + 10 r^{3} + 14 r^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 p q r^{3} \le p^{2} q r^{3}+q r^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 p q \le p^{2}+q^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 q r \le q^{2}+r^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$6 p q r \le 2 p^{3} q+2 q^{2} r+2 r^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$6 p q r^{2} \le 2 p q^{2} r^{3}+p q^{2}+3 p r^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 p^{5} r^{3}+12 p^{5} r^{2}+12 p^{5} r+4 p^{5}+4 p^{4} q r^{3}+12 p^{4} q r^{2}+12 p^{4} q r+4 p^{4} q+18 p^{4} r^{3}+58 p^{4} r^{2}+62 p^{4} r+22 p^{4}+12 p^{3} q r^{3}+36 p^{3} q r^{2}+36 p^{3} q r+10 p^{3} q+28 p^{3} r^{3}+98 p^{3} r^{2}+112 p^{3} r+42 p^{3}+11 p^{2} q r^{3}+36 p^{2} q r^{2}+36 p^{2} q r+12 p^{2} q+16 p^{2} r^{3}+66 p^{2} r^{2}+84 p^{2} r+33 p^{2}+4 p q^{3} r^{3}+12 p q^{3} r^{2}+12 p q^{3} r+4 p q^{3}+p q^{2} r^{3}+9 p q^{2} r^{2}+9 p q^{2} r+2 p q^{2}+4 p r^{3}+p r^{2}+4 q^{4} r^{3}+12 q^{4} r^{2}+12 q^{4} r+4 q^{4}+14 q^{3} r^{3}+46 q^{3} r^{2}+50 q^{3} r+18 q^{3}+9 q^{2} r^{3}+36 q^{2} r^{2}+43 q^{2} r+16 q^{2}+q r^{3}+10 r^{3}+11 r^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1/(1+s),b\to 1+t,c\to 1/(1+u)$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 s^{5} t^{4} u^{3} + 12 s^{5} t^{4} u^{2} + 12 s^{5} t^{4} u + 4 s^{5} t^{4} + 10 s^{5} t^{3} u^{3} + 34 s^{5} t^{3} u^{2} + 38 s^{5} t^{3} u + 14 s^{5} t^{3} + 6 s^{5} t^{2} u^{3} + 27 s^{5} t^{2} u^{2} + 36 s^{5} t^{2} u + 15 s^{5} t^{2} + 8 s^{5} t u^{3} + 18 s^{5} t u^{2} + 16 s^{5} t u + 6 s^{5} t + 8 s^{5} u^{3} + 24 s^{5} u^{2} + 22 s^{5} u + 10 s^{5} + 20 s^{4} t^{4} u^{3} + 60 s^{4} t^{4} u^{2} + 60 s^{4} t^{4} u + 20 s^{4} t^{4} + 54 s^{4} t^{3} u^{3} + 182 s^{4} t^{3} u^{2} + 202 s^{4} t^{3} u + 74 s^{4} t^{3} + 33 s^{4} t^{2} u^{3} + 144 s^{4} t^{2} u^{2} + 189 s^{4} t^{2} u + 78 s^{4} t^{2} + 34 s^{4} t u^{3} + 72 s^{4} t u^{2} + 62 s^{4} t u + 24 s^{4} t + 44 s^{4} u^{3} + 114 s^{4} u^{2} + 90 s^{4} u + 40 s^{4} + 40 s^{3} t^{4} u^{3} + 120 s^{3} t^{4} u^{2} + 120 s^{3} t^{4} u + 40 s^{3} t^{4} + 116 s^{3} t^{3} u^{3} + 388 s^{3} t^{3} u^{2} + 428 s^{3} t^{3} u + 156 s^{3} t^{3} + 72 s^{3} t^{2} u^{3} + 306 s^{3} t^{2} u^{2} + 396 s^{3} t^{2} u + 162 s^{3} t^{2} + 56 s^{3} t u^{3} + 108 s^{3} t u^{2} + 88 s^{3} t u + 36 s^{3} t + 96 s^{3} u^{3} + 216 s^{3} u^{2} + 140 s^{3} u + 60 s^{3} + 40 s^{2} t^{4} u^{3} + 120 s^{2} t^{4} u^{2} + 120 s^{2} t^{4} u + 40 s^{2} t^{4} + 124 s^{2} t^{3} u^{3} + 412 s^{2} t^{3} u^{2} + 452 s^{2} t^{3} u + 164 s^{2} t^{3} + 78 s^{2} t^{2} u^{3} + 324 s^{2} t^{2} u^{2} + 414 s^{2} t^{2} u + 168 s^{2} t^{2} + 40 s^{2} t u^{3} + 60 s^{2} t u^{2} + 40 s^{2} t u + 20 s^{2} t + 100 s^{2} u^{3} + 190 s^{2} u^{2} + 84 s^{2} u + 34 s^{2} + 20 s t^{4} u^{3} + 60 s t^{4} u^{2} + 60 s t^{4} u + 20 s t^{4} + 66 s t^{3} u^{3} + 218 s t^{3} u^{2} + 238 s t^{3} u + 86 s t^{3} + 42 s t^{2} u^{3} + 171 s t^{2} u^{2} + 216 s t^{2} u + 87 s t^{2} + 12 s t u^{3} + 6 s t u^{2} - 4 s t u + 2 s t + 46 s u^{3} + 66 s u^{2} + 4 t^{4} u^{3} + 12 t^{4} u^{2} + 12 t^{4} u + 4 t^{4} + 14 t^{3} u^{3} + 46 t^{3} u^{2} + 50 t^{3} u + 18 t^{3} + 9 t^{2} u^{3} + 36 t^{2} u^{2} + 45 t^{2} u + 18 t^{2} + 2 t u^{3} - 2 t u + 10 u^{3} + 14 u^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$4 s t u \le s^{2} u^{2}+2 s t^{2}+u^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$2 t u \le t^{2}+u^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 s^{5} t^{4} u^{3}+12 s^{5} t^{4} u^{2}+12 s^{5} t^{4} u+4 s^{5} t^{4}+10 s^{5} t^{3} u^{3}+34 s^{5} t^{3} u^{2}+38 s^{5} t^{3} u+14 s^{5} t^{3}+6 s^{5} t^{2} u^{3}+27 s^{5} t^{2} u^{2}+36 s^{5} t^{2} u+15 s^{5} t^{2}+8 s^{5} t u^{3}+18 s^{5} t u^{2}+16 s^{5} t u+6 s^{5} t+8 s^{5} u^{3}+24 s^{5} u^{2}+22 s^{5} u+10 s^{5}+20 s^{4} t^{4} u^{3}+60 s^{4} t^{4} u^{2}+60 s^{4} t^{4} u+20 s^{4} t^{4}+54 s^{4} t^{3} u^{3}+182 s^{4} t^{3} u^{2}+202 s^{4} t^{3} u+74 s^{4} t^{3}+33 s^{4} t^{2} u^{3}+144 s^{4} t^{2} u^{2}+189 s^{4} t^{2} u+78 s^{4} t^{2}+34 s^{4} t u^{3}+72 s^{4} t u^{2}+62 s^{4} t u+24 s^{4} t+44 s^{4} u^{3}+114 s^{4} u^{2}+90 s^{4} u+40 s^{4}+40 s^{3} t^{4} u^{3}+120 s^{3} t^{4} u^{2}+120 s^{3} t^{4} u+40 s^{3} t^{4}+116 s^{3} t^{3} u^{3}+388 s^{3} t^{3} u^{2}+428 s^{3} t^{3} u+156 s^{3} t^{3}+72 s^{3} t^{2} u^{3}+306 s^{3} t^{2} u^{2}+396 s^{3} t^{2} u+162 s^{3} t^{2}+56 s^{3} t u^{3}+108 s^{3} t u^{2}+88 s^{3} t u+36 s^{3} t+96 s^{3} u^{3}+216 s^{3} u^{2}+140 s^{3} u+60 s^{3}+40 s^{2} t^{4} u^{3}+120 s^{2} t^{4} u^{2}+120 s^{2} t^{4} u+40 s^{2} t^{4}+124 s^{2} t^{3} u^{3}+412 s^{2} t^{3} u^{2}+452 s^{2} t^{3} u+164 s^{2} t^{3}+78 s^{2} t^{2} u^{3}+324 s^{2} t^{2} u^{2}+414 s^{2} t^{2} u+168 s^{2} t^{2}+40 s^{2} t u^{3}+60 s^{2} t u^{2}+40 s^{2} t u+20 s^{2} t+100 s^{2} u^{3}+189 s^{2} u^{2}+84 s^{2} u+34 s^{2}+20 s t^{4} u^{3}+60 s t^{4} u^{2}+60 s t^{4} u+20 s t^{4}+66 s t^{3} u^{3}+218 s t^{3} u^{2}+238 s t^{3} u+86 s t^{3}+42 s t^{2} u^{3}+171 s t^{2} u^{2}+216 s t^{2} u+85 s t^{2}+12 s t u^{3}+6 s t u^{2}+2 s t+46 s u^{3}+66 s u^{2}+4 t^{4} u^{3}+12 t^{4} u^{2}+12 t^{4} u+4 t^{4}+14 t^{3} u^{3}+46 t^{3} u^{2}+50 t^{3} u+18 t^{3}+9 t^{2} u^{3}+36 t^{2} u^{2}+45 t^{2} u+17 t^{2}+2 t u^{3}+10 u^{3}+12 u^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1+v,b\to 1/(1+w),c\to 1/(1+x)$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $4 v^{5} w^{4} x^{3} + 12 v^{5} w^{4} x^{2} + 12 v^{5} w^{4} x + 4 v^{5} w^{4} + 16 v^{5} w^{3} x^{3} + 48 v^{5} w^{3} x^{2} + 48 v^{5} w^{3} x + 16 v^{5} w^{3} + 24 v^{5} w^{2} x^{3} + 72 v^{5} w^{2} x^{2} + 72 v^{5} w^{2} x + 24 v^{5} w^{2} + 16 v^{5} w x^{3} + 48 v^{5} w x^{2} + 48 v^{5} w x + 16 v^{5} w + 4 v^{5} x^{3} + 12 v^{5} x^{2} + 12 v^{5} x + 4 v^{5} + 14 v^{4} w^{4} x^{3} + 46 v^{4} w^{4} x^{2} + 50 v^{4} w^{4} x + 18 v^{4} w^{4} + 60 v^{4} w^{3} x^{3} + 196 v^{4} w^{3} x^{2} + 212 v^{4} w^{3} x + 76 v^{4} w^{3} + 96 v^{4} w^{2} x^{3} + 312 v^{4} w^{2} x^{2} + 336 v^{4} w^{2} x + 120 v^{4} w^{2} + 68 v^{4} w x^{3} + 220 v^{4} w x^{2} + 236 v^{4} w x + 84 v^{4} w + 18 v^{4} x^{3} + 58 v^{4} x^{2} + 62 v^{4} x + 22 v^{4} + 16 v^{3} w^{4} x^{3} + 62 v^{3} w^{4} x^{2} + 76 v^{3} w^{4} x + 30 v^{3} w^{4} + 76 v^{3} w^{3} x^{3} + 284 v^{3} w^{3} x^{2} + 340 v^{3} w^{3} x + 132 v^{3} w^{3} + 132 v^{3} w^{2} x^{3} + 480 v^{3} w^{2} x^{2} + 564 v^{3} w^{2} x + 216 v^{3} w^{2} + 100 v^{3} w x^{3} + 356 v^{3} w x^{2} + 412 v^{3} w x + 156 v^{3} w + 28 v^{3} x^{3} + 98 v^{3} x^{2} + 112 v^{3} x + 42 v^{3} + 4 v^{2} w^{4} x^{3} + 30 v^{2} w^{4} x^{2} + 48 v^{2} w^{4} x + 22 v^{2} w^{4} + 28 v^{2} w^{3} x^{3} + 156 v^{2} w^{3} x^{2} + 228 v^{2} w^{3} x + 100 v^{2} w^{3} + 60 v^{2} w^{2} x^{3} + 288 v^{2} w^{2} x^{2} + 396 v^{2} w^{2} x + 168 v^{2} w^{2} + 52 v^{2} w x^{3} + 228 v^{2} w x^{2} + 300 v^{2} w x + 124 v^{2} w + 16 v^{2} x^{3} + 66 v^{2} x^{2} + 84 v^{2} x + 34 v^{2} + 5 v w^{4} x^{3} + 7 v w^{4} x^{2} + 3 v w^{4} x + v w^{4} + 24 v w^{3} x^{3} + 40 v w^{3} x^{2} + 24 v w^{3} x + 8 v w^{3} + 33 v w^{2} x^{3} + 51 v w^{2} x^{2} + 27 v w^{2} x + 9 v w^{2} + 18 v w x^{3} + 22 v w x^{2} + 6 v w x + 2 v w + 4 v x^{3} + 4 v x^{2} + 7 w^{4} x^{3} + 16 w^{4} x^{2} + 9 w^{4} x + 4 w^{4} + 38 w^{3} x^{3} + 82 w^{3} x^{2} + 46 w^{3} x + 18 w^{3} + 63 w^{2} x^{3} + 120 w^{2} x^{2} + 51 w^{2} x + 18 w^{2} + 38 w x^{3} + 56 w x^{2} + 2 w x + 10 x^{3} + 14 x^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 v^{5} w^{4} x^{3}+16 v^{5} w^{3} x^{3}+24 v^{5} w^{2} x^{3}+16 v^{5} w x^{3}+4 v^{5} x^{3}+14 v^{4} w^{4} x^{3}+60 v^{4} w^{3} x^{3}+96 v^{4} w^{2} x^{3}+68 v^{4} w x^{3}+18 v^{4} x^{3}+16 v^{3} w^{4} x^{3}+76 v^{3} w^{3} x^{3}+132 v^{3} w^{2} x^{3}+100 v^{3} w x^{3}+28 v^{3} x^{3}+4 v^{2} w^{4} x^{3}+28 v^{2} w^{3} x^{3}+60 v^{2} w^{2} x^{3}+52 v^{2} w x^{3}+16 v^{2} x^{3}+5 v w^{4} x^{3}+24 v w^{3} x^{3}+33 v w^{2} x^{3}+18 v w x^{3}+4 v x^{3}+7 w^{4} x^{3}+38 w^{3} x^{3}+63 w^{2} x^{3}+38 w x^{3}+10 x^{3}+12 v^{5} w^{4} x^{2}+48 v^{5} w^{3} x^{2}+72 v^{5} w^{2} x^{2}+48 v^{5} w x^{2}+12 v^{5} x^{2}+46 v^{4} w^{4} x^{2}+196 v^{4} w^{3} x^{2}+312 v^{4} w^{2} x^{2}+220 v^{4} w x^{2}+58 v^{4} x^{2}+62 v^{3} w^{4} x^{2}+284 v^{3} w^{3} x^{2}+480 v^{3} w^{2} x^{2}+356 v^{3} w x^{2}+98 v^{3} x^{2}+30 v^{2} w^{4} x^{2}+156 v^{2} w^{3} x^{2}+288 v^{2} w^{2} x^{2}+228 v^{2} w x^{2}+66 v^{2} x^{2}+7 v w^{4} x^{2}+40 v w^{3} x^{2}+51 v w^{2} x^{2}+22 v w x^{2}+4 v x^{2}+16 w^{4} x^{2}+82 w^{3} x^{2}+120 w^{2} x^{2}+56 w x^{2}+14 x^{2}+12 v^{5} w^{4} x+48 v^{5} w^{3} x+72 v^{5} w^{2} x+48 v^{5} w x+12 v^{5} x+50 v^{4} w^{4} x+212 v^{4} w^{3} x+336 v^{4} w^{2} x+236 v^{4} w x+62 v^{4} x+76 v^{3} w^{4} x+340 v^{3} w^{3} x+564 v^{3} w^{2} x+412 v^{3} w x+112 v^{3} x+48 v^{2} w^{4} x+228 v^{2} w^{3} x+396 v^{2} w^{2} x+300 v^{2} w x+84 v^{2} x+3 v w^{4} x+24 v w^{3} x+27 v w^{2} x+6 v w x+9 w^{4} x+46 w^{3} x+51 w^{2} x+2 w x+4 v^{5} w^{4}+16 v^{5} w^{3}+24 v^{5} w^{2}+16 v^{5} w+4 v^{5}+18 v^{4} w^{4}+76 v^{4} w^{3}+120 v^{4} w^{2}+84 v^{4} w+22 v^{4}+30 v^{3} w^{4}+132 v^{3} w^{3}+216 v^{3} w^{2}+156 v^{3} w+42 v^{3}+22 v^{2} w^{4}+100 v^{2} w^{3}+168 v^{2} w^{2}+124 v^{2} w+34 v^{2}+v w^{4}+8 v w^{3}+9 v w^{2}+2 v w+4 w^{4}+18 w^{3}+18 w^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+_______________________ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to 1/(1+y),b\to 1/(1+z),c\to 1/(1+a_{1})$ +
+ +
+ +
+ +
+ + + + +
+Numerator after substitutions: $10 a_{1}^{3} y^{5} z^{3} + 30 a_{1}^{3} y^{5} z^{2} + 24 a_{1}^{3} y^{5} z + 8 a_{1}^{3} y^{5} + 9 a_{1}^{3} y^{4} z^{4} + 86 a_{1}^{3} y^{4} z^{3} + 195 a_{1}^{3} y^{4} z^{2} + 142 a_{1}^{3} y^{4} z + 44 a_{1}^{3} y^{4} + 36 a_{1}^{3} y^{3} z^{4} + 244 a_{1}^{3} y^{3} z^{3} + 480 a_{1}^{3} y^{3} z^{2} + 328 a_{1}^{3} y^{3} z + 96 a_{1}^{3} y^{3} + 54 a_{1}^{3} y^{2} z^{4} + 312 a_{1}^{3} y^{2} z^{3} + 558 a_{1}^{3} y^{2} z^{2} + 360 a_{1}^{3} y^{2} z + 100 a_{1}^{3} y^{2} + 30 a_{1}^{3} y z^{4} + 166 a_{1}^{3} y z^{3} + 282 a_{1}^{3} y z^{2} + 172 a_{1}^{3} y z + 46 a_{1}^{3} y + 7 a_{1}^{3} z^{4} + 38 a_{1}^{3} z^{3} + 63 a_{1}^{3} z^{2} + 38 a_{1}^{3} z + 10 a_{1}^{3} + 11 a_{1}^{2} y^{5} z^{4} + 62 a_{1}^{2} y^{5} z^{3} + 117 a_{1}^{2} y^{5} z^{2} + 78 a_{1}^{2} y^{5} z + 24 a_{1}^{2} y^{5} + 64 a_{1}^{2} y^{4} z^{4} + 346 a_{1}^{2} y^{4} z^{3} + 612 a_{1}^{2} y^{4} z^{2} + 384 a_{1}^{2} y^{4} z + 114 a_{1}^{2} y^{4} + 146 a_{1}^{2} y^{3} z^{4} + 764 a_{1}^{2} y^{3} z^{3} + 1278 a_{1}^{2} y^{3} z^{2} + 756 a_{1}^{2} y^{3} z + 216 a_{1}^{2} y^{3} + 162 a_{1}^{2} y^{2} z^{4} + 816 a_{1}^{2} y^{2} z^{3} + 1284 a_{1}^{2} y^{2} z^{2} + 700 a_{1}^{2} y^{2} z + 190 a_{1}^{2} y^{2} + 73 a_{1}^{2} y z^{4} + 370 a_{1}^{2} y z^{3} + 549 a_{1}^{2} y z^{2} + 258 a_{1}^{2} y z + 66 a_{1}^{2} y + 16 a_{1}^{2} z^{4} + 82 a_{1}^{2} z^{3} + 120 a_{1}^{2} z^{2} + 56 a_{1}^{2} z + 14 a_{1}^{2} + 16 a_{1} y^{5} z^{4} + 74 a_{1} y^{5} z^{3} + 120 a_{1} y^{5} z^{2} + 72 a_{1} y^{5} z + 22 a_{1} y^{5} + 75 a_{1} y^{4} z^{4} + 350 a_{1} y^{4} z^{3} + 543 a_{1} y^{4} z^{2} + 298 a_{1} y^{4} z + 90 a_{1} y^{4} + 140 a_{1} y^{3} z^{4} + 660 a_{1} y^{3} z^{3} + 972 a_{1} y^{3} z^{2} + 472 a_{1} y^{3} z + 140 a_{1} y^{3} + 126 a_{1} y^{2} z^{4} + 592 a_{1} y^{2} z^{3} + 798 a_{1} y^{2} z^{2} + 296 a_{1} y^{2} z + 84 a_{1} y^{2} + 42 a_{1} y z^{4} + 206 a_{1} y z^{3} + 228 a_{1} y z^{2} + 4 a_{1} y z + 9 a_{1} z^{4} + 46 a_{1} z^{3} + 51 a_{1} z^{2} + 2 a_{1} z + 9 y^{5} z^{4} + 38 y^{5} z^{3} + 57 y^{5} z^{2} + 34 y^{5} z + 10 y^{5} + 40 y^{4} z^{4} + 170 y^{4} z^{3} + 246 y^{4} z^{2} + 136 y^{4} z + 40 y^{4} + 70 y^{3} z^{4} + 300 y^{3} z^{3} + 414 y^{3} z^{2} + 204 y^{3} z + 60 y^{3} + 58 y^{2} z^{4} + 248 y^{2} z^{3} + 312 y^{2} z^{2} + 116 y^{2} z + 34 y^{2} + 19 y z^{4} + 82 y z^{3} + 81 y z^{2} - 2 y z + 4 z^{4} + 18 z^{3} + 18 z^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$2 y z \le y^{2}+z^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 11 a_{1}^{2} y^{5} z^{4}+16 a_{1} y^{5} z^{4}+9 y^{5} z^{4}+10 a_{1}^{3} y^{5} z^{3}+62 a_{1}^{2} y^{5} z^{3}+74 a_{1} y^{5} z^{3}+38 y^{5} z^{3}+30 a_{1}^{3} y^{5} z^{2}+117 a_{1}^{2} y^{5} z^{2}+120 a_{1} y^{5} z^{2}+57 y^{5} z^{2}+24 a_{1}^{3} y^{5} z+78 a_{1}^{2} y^{5} z+72 a_{1} y^{5} z+34 y^{5} z+8 a_{1}^{3} y^{5}+24 a_{1}^{2} y^{5}+22 a_{1} y^{5}+10 y^{5}+9 a_{1}^{3} y^{4} z^{4}+64 a_{1}^{2} y^{4} z^{4}+75 a_{1} y^{4} z^{4}+40 y^{4} z^{4}+86 a_{1}^{3} y^{4} z^{3}+346 a_{1}^{2} y^{4} z^{3}+350 a_{1} y^{4} z^{3}+170 y^{4} z^{3}+195 a_{1}^{3} y^{4} z^{2}+612 a_{1}^{2} y^{4} z^{2}+543 a_{1} y^{4} z^{2}+246 y^{4} z^{2}+142 a_{1}^{3} y^{4} z+384 a_{1}^{2} y^{4} z+298 a_{1} y^{4} z+136 y^{4} z+44 a_{1}^{3} y^{4}+114 a_{1}^{2} y^{4}+90 a_{1} y^{4}+40 y^{4}+36 a_{1}^{3} y^{3} z^{4}+146 a_{1}^{2} y^{3} z^{4}+140 a_{1} y^{3} z^{4}+70 y^{3} z^{4}+244 a_{1}^{3} y^{3} z^{3}+764 a_{1}^{2} y^{3} z^{3}+660 a_{1} y^{3} z^{3}+300 y^{3} z^{3}+480 a_{1}^{3} y^{3} z^{2}+1278 a_{1}^{2} y^{3} z^{2}+972 a_{1} y^{3} z^{2}+414 y^{3} z^{2}+328 a_{1}^{3} y^{3} z+756 a_{1}^{2} y^{3} z+472 a_{1} y^{3} z+204 y^{3} z+96 a_{1}^{3} y^{3}+216 a_{1}^{2} y^{3}+140 a_{1} y^{3}+60 y^{3}+54 a_{1}^{3} y^{2} z^{4}+162 a_{1}^{2} y^{2} z^{4}+126 a_{1} y^{2} z^{4}+58 y^{2} z^{4}+312 a_{1}^{3} y^{2} z^{3}+816 a_{1}^{2} y^{2} z^{3}+592 a_{1} y^{2} z^{3}+248 y^{2} z^{3}+558 a_{1}^{3} y^{2} z^{2}+1284 a_{1}^{2} y^{2} z^{2}+798 a_{1} y^{2} z^{2}+312 y^{2} z^{2}+360 a_{1}^{3} y^{2} z+700 a_{1}^{2} y^{2} z+296 a_{1} y^{2} z+116 y^{2} z+100 a_{1}^{3} y^{2}+190 a_{1}^{2} y^{2}+84 a_{1} y^{2}+33 y^{2}+30 a_{1}^{3} y z^{4}+73 a_{1}^{2} y z^{4}+42 a_{1} y z^{4}+19 y z^{4}+166 a_{1}^{3} y z^{3}+370 a_{1}^{2} y z^{3}+206 a_{1} y z^{3}+82 y z^{3}+282 a_{1}^{3} y z^{2}+549 a_{1}^{2} y z^{2}+228 a_{1} y z^{2}+81 y z^{2}+172 a_{1}^{3} y z+258 a_{1}^{2} y z+4 a_{1} y z+46 a_{1}^{3} y+66 a_{1}^{2} y+7 a_{1}^{3} z^{4}+16 a_{1}^{2} z^{4}+9 a_{1} z^{4}+4 z^{4}+38 a_{1}^{3} z^{3}+82 a_{1}^{2} z^{3}+46 a_{1} z^{3}+18 z^{3}+63 a_{1}^{3} z^{2}+120 a_{1}^{2} z^{2}+51 a_{1} z^{2}+17 z^{2}+38 a_{1}^{3} z+56 a_{1}^{2} z+2 a_{1} z+10 a_{1}^{3}+14 a_{1}^{2} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[23]:
+ + + + +
+
Counter({0: 8})
+
+ +
+ +
+
+ +
+
+
+
+

Now let's take a look at slightly another kind of the problem.

+

Problem

Let $f:R^3\to R$ be a convex function. Prove that +$$f(1,2,3)+f(2,3,1)+f(3,1,2)\le f(4,3,-1)+f(3,-1,4)+f(-1,4,3).$$

+

To create a proof, we will use provef function. It assumes that $f$ is convex and nonnegative, then it tries to find a proof. However, if the last inequality is $0\le 0$, then the proof works for any convex function.

+ +
+
+
+
+
+
In [24]:
+
+
+
provef('(-f(1,2,3)-f(2,3,1)-f(3,1,2)+f(4,3,-1)+f(3,-1,4)+f(-1,4,3))*21')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+numerator: $21 f{\left(-1,4,3 \right)} - 21 f{\left(1,2,3 \right)} - 21 f{\left(2,3,1 \right)} + 21 f{\left(3,-1,4 \right)} - 21 f{\left(3,1,2 \right)} + 21 f{\left(4,3,-1 \right)}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $1$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From Jensen inequality: +
+ +
+ +
+ +
+ + + + +
+$$21f(1, 2, 3) \le 11f(-1, 4, 3)+8f(3, -1, 4)+2f(4, 3, -1)$$ +
+ +
+ +
+ +
+ + + + +
+$$21f(2, 3, 1) \le 8f(-1, 4, 3)+2f(3, -1, 4)+11f(4, 3, -1)$$ +
+ +
+ +
+ +
+ + + + +
+$$21f(3, 1, 2) \le 2f(-1, 4, 3)+11f(3, -1, 4)+8f(4, 3, -1)$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 0 $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[24]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

Let's try to solve problem 6 from the finals of LXIII Polish Mathematical Olympiad. It was one of the hardest inequality in the history of this contest, solved only by 3 finalists.

+

Problem

Prove the inequality +$$\left(\frac{a - b}{c}\right)^2 + \left(\frac{b - c}{a}\right)^2 + \left(\frac{c - a}{b}\right)^2\ge 2 \sqrt{2} \left(\frac{a - b}{c} + \frac{b - c}{a}+ \frac{c-a}{b}\right)$$ +for any positive numbers $a,b,c$.

+

The first observation is that the formula is cyclic, so without loss of generality we may assume that $a\ge b,c$. We can go a step further and divide it into two cases: $a\ge b\ge c$ and $a\ge c\ge b$.

+ +
+
+
+
+
+
In [25]:
+
+
+
shiro.display=lambda x:None #turn off printing of proofs
+newproof()
+formula=cyclize('((a-b)/c)^2-2*sqrt(2)*(a-b)/c')
+
+ +
+
+
+ +
+
+
+
In [26]:
+
+
+
formula1=makesubs(formula,'[b,oo],[c,oo]',variables='a,b') #a>=b>=c
+prove(formula1) 
+
+ +
+
+
+ +
+
+ + +
+ +
Out[26]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
In [27]:
+
+
+
formula2=makesubs(formula,'[c,oo],[b,oo]',variables='a,c') #a>=c>=b
+prove(formula2) 
+
+ +
+
+
+ +
+
+ + +
+ +
Out[27]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

So the case $a\ge c\ge b$ is done, but $a\ge b\ge c$ is not. But maybe we can adjust values.

+ +
+
+
+
+
+
In [28]:
+
+
+
values=findvalues(formula1)
+values
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
Optimization terminated successfully.
+         Current function value: 1.000000
+         Iterations: 137
+         Function evaluations: 249
+
+
+
+ +
+ +
Out[28]:
+ + + + +
+
(1.7908873553542452e-10, 2.5326984818340415e-10, 7.129450063690368)
+
+ +
+ +
+
+ +
+
+
+
+

First and second value is approximately equal to 0, so we can try to replace 0 with 1.

+ +
+
+
+
+
+
In [29]:
+
+
+
prove(formula1,values='1,1,7')
+
+ +
+
+
+ +
+
+ + +
+ +
Out[29]:
+ + + + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+

The key observation is that the formula1 is homogenous, so we can scale values.

+ +
+
+
+
+
+
In [30]:
+
+
+
newvalues=(1,values[1]/values[0],values[2]/values[0])
+newvalues
+
+ +
+
+
+ +
+
+ + +
+ +
Out[30]:
+ + + + +
+
(1, 1.4142142855953455, 39809595184.05965)
+
+ +
+ +
+
+ +
+
+
+
In [31]:
+
+
+
newvalues[1]**2
+
+ +
+
+
+ +
+
+ + +
+ +
Out[31]:
+ + + + +
+
2.000002045581953
+
+ +
+ +
+
+ +
+
+
+
+

Now the third value is very big. Technically we could use it, but it would run into overflow error, so we will use 1 instead of it. Second value is very close to $\sqrt{2}$, so this value will be our next try.

+ +
+
+
+
+
+
In [32]:
+
+
+
prove(formula1,values='1,sqrt(2),1')
+
+ +
+
+
+ +
+
+ + +
+ +
Out[32]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+
+

So after getting the code all together we have got the following proof.

+ +
+
+
+
+
+
In [33]:
+
+
+
newproof()
+shiro.display=lambda x:display(Latex(x)) #turn on printing proofs 
+formula=cyclize('((a-b)/c)^2-2*sqrt(2)*(a-b)/c')
+display(Latex('Case $a\ge c\ge b$'))
+formula1=makesubs(formula,'[c,oo],[b,oo]',variables='a,c,b')
+prove(formula1)
+display(Latex('Case $a\ge b\ge c$'))
+formula2=makesubs(formula,'[b,oo],[c,oo]')
+prove(formula2,values='1,2**(1/2),1')
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+Case $a\ge c\ge b$ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to c + d$ +
+ +
+ +
+ +
+ + + + +
+Substitute $c\to b + e$ +
+ +
+ +
+ +
+ + + + +
+numerator: $2 b^{4} d^{2} + 2 b^{4} d e + 2 b^{4} e^{2} + 4 b^{3} d^{3} + 2 \sqrt{2} b^{3} d^{2} e + 10 b^{3} d^{2} e + 2 \sqrt{2} b^{3} d e^{2} + 6 b^{3} d e^{2} + 4 b^{3} e^{3} + 2 b^{2} d^{4} + 2 \sqrt{2} b^{2} d^{3} e + 10 b^{2} d^{3} e + 6 \sqrt{2} b^{2} d^{2} e^{2} + 12 b^{2} d^{2} e^{2} + 4 b^{2} d e^{3} + 4 \sqrt{2} b^{2} d e^{3} + 2 b^{2} e^{4} + 2 b d^{4} e + 2 \sqrt{2} b d^{3} e^{2} + 6 b d^{3} e^{2} + 4 b d^{2} e^{3} + 4 \sqrt{2} b d^{2} e^{3} + 2 \sqrt{2} b d e^{4} + d^{4} e^{2} + 2 d^{3} e^{3} + d^{2} e^{4}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $b^{6} + 2 b^{5} d + 4 b^{5} e + b^{4} d^{2} + 6 b^{4} d e + 6 b^{4} e^{2} + 2 b^{3} d^{2} e + 6 b^{3} d e^{2} + 4 b^{3} e^{3} + b^{2} d^{2} e^{2} + 2 b^{2} d e^{3} + b^{2} e^{4}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 2 b^{4} d^{2}+2 b^{4} d e+2 b^{4} e^{2}+4 b^{3} d^{3}+2 \sqrt{2} b^{3} d^{2} e+10 b^{3} d^{2} e+2 \sqrt{2} b^{3} d e^{2}+6 b^{3} d e^{2}+4 b^{3} e^{3}+2 b^{2} d^{4}+2 \sqrt{2} b^{2} d^{3} e+10 b^{2} d^{3} e+6 \sqrt{2} b^{2} d^{2} e^{2}+12 b^{2} d^{2} e^{2}+4 \sqrt{2} b^{2} d e^{3}+4 b^{2} d e^{3}+2 b^{2} e^{4}+2 b d^{4} e+2 \sqrt{2} b d^{3} e^{2}+6 b d^{3} e^{2}+4 \sqrt{2} b d^{2} e^{3}+4 b d^{2} e^{3}+2 \sqrt{2} b d e^{4}+d^{4} e^{2}+2 d^{3} e^{3}+d^{2} e^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
+ + + + +
+Case $a\ge b\ge c$ +
+ +
+ +
+ +
+ + + + +
+Substitute $a\to b + f$ +
+ +
+ +
+ +
+ + + + +
+Substitute $b\to c + g$ +
+ +
+ +
+ +
+ + + + +
+Substitute $f\to \sqrt{2} h$ +
+ +
+ +
+ +
+ + + + +
+numerator: $2 c^{4} g^{2} + 2 \sqrt{2} c^{4} g h + 4 c^{4} h^{2} + 4 c^{3} g^{3} - 4 c^{3} g^{2} h + 6 \sqrt{2} c^{3} g^{2} h - 4 \sqrt{2} c^{3} g h^{2} + 20 c^{3} g h^{2} + 8 \sqrt{2} c^{3} h^{3} + 2 c^{2} g^{4} - 8 c^{2} g^{3} h + 4 \sqrt{2} c^{2} g^{3} h - 12 \sqrt{2} c^{2} g^{2} h^{2} + 24 c^{2} g^{2} h^{2} - 8 c^{2} g h^{3} + 20 \sqrt{2} c^{2} g h^{3} + 8 c^{2} h^{4} - 4 c g^{4} h - 8 \sqrt{2} c g^{3} h^{2} + 8 c g^{3} h^{2} - 8 c g^{2} h^{3} + 12 \sqrt{2} c g^{2} h^{3} + 8 c g h^{4} + 2 g^{4} h^{2} + 4 \sqrt{2} g^{3} h^{3} + 4 g^{2} h^{4}$ +
+ +
+ +
+ +
+ + + + +
+denominator: $c^{6} + 4 c^{5} g + 2 \sqrt{2} c^{5} h + 6 c^{4} g^{2} + 6 \sqrt{2} c^{4} g h + 2 c^{4} h^{2} + 4 c^{3} g^{3} + 6 \sqrt{2} c^{3} g^{2} h + 4 c^{3} g h^{2} + c^{2} g^{4} + 2 \sqrt{2} c^{2} g^{3} h + 2 c^{2} g^{2} h^{2}$ +
+ +
+ +
+ +
+ + + + +
+status: 0 +
+ +
+ +
+ +
+ + + + +
+From weighted AM-GM inequality: +
+ +
+ +
+ +
+ + + + +
+$$4 c^{3} g^{2} h \le 2 c^{4} g^{2}+2 c^{2} g^{2} h^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$4 \sqrt{2} c^{3} g h^{2} \le 2 \sqrt{2} c^{4} g h+\sqrt{2} c^{3} h^{3}+\sqrt{2} c g^{2} h^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$8 c^{2} g^{3} h \le 4 c^{3} g^{3}+4 c g^{3} h^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$12 \sqrt{2} c^{2} g^{2} h^{2} \le 6 \sqrt{2} c^{3} g^{2} h+6 \sqrt{2} c g^{2} h^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$8 c^{2} g h^{3} \le 4 c^{3} g h^{2}+2 c^{2} h^{4}+2 g^{2} h^{4}$$ +
+ +
+ +
+ +
+ + + + +
+$$4 c g^{4} h \le 2 c^{2} g^{4}+2 g^{4} h^{2}$$ +
+ +
+ +
+ +
+ + + + +
+$$8 \sqrt{2} c g^{3} h^{2} \le 4 \sqrt{2} c^{2} g^{3} h+4 \sqrt{2} g^{3} h^{3}$$ +
+ +
+ +
+ +
+ + + + +
+$$8 c g^{2} h^{3} \le 4 c g^{3} h^{2}+4 c g h^{4}$$ +
+ +
+ +
+ +
+ + + + +
+$$ 0 \le 4 c^{4} h^{2}+16 c^{3} g h^{2}+7 \sqrt{2} c^{3} h^{3}+22 c^{2} g^{2} h^{2}+20 \sqrt{2} c^{2} g h^{3}+6 c^{2} h^{4}+5 \sqrt{2} c g^{2} h^{3}+4 c g h^{4}+2 g^{2} h^{4} $$ +
+ +
+ +
+ +
+ + + + +
+The sum of all inequalities gives us a proof of the inequality. +
+ +
+ +
+ +
Out[33]:
+ + + + +
+
0
+
+ +
+ +
+
+ +
+
+
+ + + + + + diff --git a/examples.ipynb b/examples.ipynb index 4e27353..7453a7b 100644 --- a/examples.ipynb +++ b/examples.ipynb @@ -2556,6 +2556,9 @@ ], "source": [ "newproof()\n", + "#this is equivalent to\n", + "#prove(makesubs('(x-1)^4','[1,oo]'))\n", + "#prove(makesubs('(x-1)^4','[-oo,1]'))\n", "powerprove('(x-1)^4')" ] }, @@ -3406,6 +3409,15 @@ "source": [ "newproof()\n", "formula=Sm('-(3a + 2b + c)(2a^3 + 3b^2 + 6c + 1) + (4a + 4b + 4c)(a^4 + b^3 + c^2 + 3)')\n", + "#this is equivalent to\n", + "#prove(makesubs(formula,'[1,oo],[1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[-1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[-1,oo],[1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[1,oo],[-1,oo],[-1,oo]'))\n", + "#prove(makesubs(formula,'[-1,oo],[-1,oo],[-1,oo]'))\n", "powerprove(formula)" ] }, diff --git a/examples.pdf b/examples.pdf deleted file mode 100644 index f90f158f16c5ce450ee3b0594c67779a0ed6b2f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59577 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

-s*r-J>WvDF9D>~K^g}XGBfS_=f!>|osQ!05 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 + + + +statistics + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+
+
+

In this notebook several methods for proving inequalities have been compared.

+

First of all we need a dataset. 35 inequalities were selected from https://www.imomath.com/index.php?options=592&lmm=0. Each inequality is represented by a tuple: inequality (in LaTeX), inequality constraints (for example: $a\in [0,1]$, equality constraints (for example: $abc=1$) and a function which converts inequality to a formula which we want to prove it's nonnegativity. In most cases when this function is simply a difference between left and right-hand side, but sometimes it's better to use difference between squares of sides (to get rid of square roots). These tuples are used as parameters in parser function which converts them to equivalent inequalities with default constraints (i.e. all variables are positive).

+

Some tuples have less than 4 elements. In this case parser use default arguments.

+ +
+
+
+
+
+
In [1]:
+
+
+
from sympy import *
+import shiroindev
+from shiroindev import *
+from sympy.parsing.latex import parse_latex
+shiro.seed=1
+from IPython.display import Latex
+shiro.display=lambda x:display(Latex(x))
+
+ +
+
+
+ +
+
+
+
+

sympy has a parse_latex function which converts LaTeX formula to a sympy one. Unfortunately it doesn't deal with missing braces in the way that LaTeX do. For example \frac12 generates $\frac12$ which is the same as \frac{1}{2}, but parse_latex accepts only the second version. So here there is a boring function which adds missing braces.

+ +
+
+
+
+
+
In [2]:
+
+
+
def addbraces(s):
+    arg={r'\frac':2,r'\sqrt':1}
+    s2=''
+    p=0
+    while 1:
+        m=re.search(r"\\[a-zA-Z]+", s[p:])
+        if not m:
+            break
+        s2+=s[p:p+m.end()]
+        p+=m.end()
+        if m.group() in arg:
+            for i in range(arg[m.group()]):
+                sp=re.search('^ *',s[p:])
+                s2+=sp.group()
+                p+=sp.end()
+                if s[p]=='{':
+                    cb=re.search(r'^\{.*?\}',s[p:])
+                    ab=addbraces(cb.group())
+                    s2+=ab
+                    p+=cb.end()
+                else:
+                    s2+='{'+s[p]+'}'
+                    p+=1
+    s2+=s[p:]
+    return s2
+print(addbraces(r'\frac{ \sqrt 3}2'))
+print(addbraces(r'a^2+b^2+c^2\geq ab+bc+ca'))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
\frac{ \sqrt {3}}{2}
+a^2+b^2+c^2\geq ab+bc+ca
+
+
+
+ +
+
+ +
+
+
+
In [3]:
+
+
+
#(formula,intervals,subs,function)
+dif=lambda b,s:b-s
+dif2=lambda b,s:b*b-s*s
+ineqs=[
+    (r'a^2+b^2+c^2\geq ab+bc+ca',),
+    (r'a^2+b^2+c^2+d^2\geq a(b+c+d)',),
+    (r'1\leq\frac{a^2b^2}{c^2}+\frac{b^2c^2}{a^2}+\frac{c^2a^2}{b^2}',
+     '[0,1-f],[0,1]','[a,sqrt(1-e-f)],[b,sqrt(e)],[c,sqrt(f)]',),
+    (r'\frac1{1-x^2}+\frac1{1-y^2}\geq \frac2{1-xy}','[0,1],[0,1]'),
+    (r'a^3+b^3\geq a^2b+ab^2',),
+    (r'\frac a{b+c}+\frac b{c+a}+\frac c{a+b}\geq \frac32',),
+    (r'2a^3+b^3\geq 3a^2b',),
+    (r'a^3+b^3+c^3\geq a^2b+b^2c+c^2a',),
+    (r'\frac a{b+c}+\frac b{c+d}+ \frac c{d+a}+ \frac d{a+b}\geq 2',),
+    (r'\frac{a^3}{a^2+ab+b^2}+ \frac{b^3}{b^2+bc+c^2}+ \frac{c^3}{c^2+ca+a^2} \geq \frac{a+b+c}3',),
+    (r'\sqrt{ab}+\sqrt{cd}+\sqrt{ef}\leq\sqrt{(a+c+e)(b+d+f)}','','',dif2),
+    (r'\frac{5a^3-ab^2}{a+b}+\frac{5b^3-bc^2}{b+c}+\frac{5c^3-ca^2}{c+a}\geq 2(a^2+b^2+c^2)',),
+    #(r'\frac{a^2}{(1+b)(1-c)}+\frac{b^3}{(1+c)(1-d)}+\frac{c^3}{(1+d)(1-a)}+\frac{d^3}{(1+a)(1-b)}\geq\frac1{15}',
+    # '[0,1-c-d],[0,1-d],[0,1]','[a,1-b-c-d]'),
+    (r'\frac{x^3}{(1+y)(1+z)}+\frac{y^3}{(1+z)(1+x)}+\frac{z^3}{(1+x)(1+y)}\geq\frac{3}{4}','','[z,1/(x*y)]'),
+    (r'\frac ab+\frac bc+\frac ca\geq \frac{(a+b+c)^2}{ab+bc+ca}',),
+    (r'\frac{a^2}b+\frac{b^2}c+\frac{c^2}a\geq \frac{a^2+b^2+c^2}{a+b+c}',),
+    (r'\frac{a^2}b+\frac{b^2}c+\frac{c^2}a\geq a+b+c+\frac{4(a-b)^2}{a+b+c}',),
+    (r'\frac1{a^3+b^3+abc}+ \frac1{b^3+c^3+abc} +\frac1{c^3+a^3+ abc} \leq \frac1{abc}',),
+    (r'\frac1{a^3(b+c)}+ \frac1{b^3(c+a)}+ \frac1{c^3(a+b)} \geq \frac32','','[c,1/(a*b)]'),
+    (r'\frac{a^3}{b^2-bc+c^2}+\frac{b^3}{c^2-ca+a^2} + \frac{c^3}{a^2-ab+b^2} \geq 3 \cdot\frac{ab+bc+ca}{a+b+c}',),
+    (r'\frac{x^5-x^2}{x^5+y^2+z^2}+\frac{y^5-y^2}{y^5+z^2+x^2}+\frac{z^5-z^2}{z^5+x^2+y^2}\geq0','','[x,1/(y*z)]'),
+    (r'(a+b-c)(b+c-a)(c+a-b)\leq abc',),
+    (r'\frac1{1+xy}+\frac1{1+yz}+\frac1{1+zx}\leq \frac34','','[x,(y+z)/(y*z-1)]'),
+    (r'\frac{x\sqrt x}{y+z}+\frac{y\sqrt y}{z+x}+\frac{z\sqrt z}{x+y}\geq\frac{ \sqrt 3}2',
+     '[0,1-z],[0,1]','[x,1-y-z]'),
+    (r'a^4+b^4+c^4+d^4\geq 4abcd',),
+    (r'\frac{ab}{a+b}+\frac{bc}{b+c}+\frac{ca}{c+a}\leq\frac{3(ab+bc+ca)}{2(a+b+c)}',),
+    (r'\sqrt{a-1}+\sqrt{b-1}+ \sqrt{c-1} \leq \sqrt{c(ab+1)}','[1,oo],[1,oo],[1,oo]','',dif2),
+    (r'(x-1)(y-1)(z-1)\geq 8','[0,1-b-c],[0,1-c],[0,1]','[x,1/a],[y,1/b],[z,1/c]'),
+    (r'ay+bz+cx\leq s^2','[0,s],[0,s],[0,s]','[x,s-a],[y,s-b],[z,s-c]'),
+    (r'x_1^2+x_2^2+x_3^2+x_4^2+x_5^2\geq 2 (x_1x_2+x_2x_3+x_3x_4+x_4x_5)/\sqrt{3}',),
+    (r' xy+yz+zx - 2xyz \leq \frac7{27}', '[0,1-z],[0,1]','[x,1-y-z]'),
+    (r'0 \leq xy+yz+zx - 2xyz', '[0,1-z],[0,1]','[x,1-y-z]'),
+    (r'\sqrt{3+a+b+c}\geq\sqrt a+\sqrt b+\sqrt c','[1-z,1],[0,1]','[a,1/x-1],[b,1/y-1],[c,1/z-1],[x,2-y-z]',
+     dif2),
+    (r'\frac{2a^3}{a^2+b^2}+\frac{2b^3}{b^2+c^2}+\frac{2c^3}{c^2+a^2}\geq a+b+c',),
+    (r'\frac{a^2}{b+c}+\frac{b^2}{c+a}+\frac{c^2}{a+b}\geq \frac12','[0,1-c],[0,1]','[a,1-b-c]'),
+    (r'\frac{a+b}{2b+c}+\frac{b+c}{2c+a}+\frac{c+a}{2a+b}\geq 2',),
+    #(r'\frac x{5-y^2}+\frac y{5-z^2}+\frac z{5-x^2}\geq \frac34','[0,sqrt(5)],[0,sqrt(5)]','[x,1/(y*z)]')
+]
+
+ +
+
+
+ +
+
+
+
In [4]:
+
+
+
def parser(formula,intervals='[]',subs='[]',func=dif):
+    newproof()
+    shiro.display=lambda x:None
+    if intervals=='':
+        intervals='[]'
+    if subs=='':
+        subs='[]'
+    formula=addbraces(formula)
+    formula=Sm(str(parse_latex(formula)))
+    formula,_=fractioncancel(formula)
+    formula=formula.subs(shiroindev._smakeiterable2(subs))
+    formula=makesubs(formula,intervals)
+    b,s=formula.lhs,formula.rhs
+    if type(formula)==LessThan:
+        b,s=s,b
+    formula=func(b,s)
+    formula=simplify(formula)
+    num,den=fractioncancel(formula)
+    return num
+
+ +
+
+
+ +
+
+
+
In [5]:
+
+
+
from tqdm import tqdm
+ineqs2=[]
+for ineq in tqdm(ineqs):
+    ineqs2+=[parser(*ineq)]
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
100%|██████████| 35/35 [00:46<00:00,  1.32s/it]
+
+
+
+ +
+
+ +
+
+
+
+

Now let's look at the formulas when converted to polynomials.

+ +
+
+
+
+
+
In [6]:
+
+
+
for i,ineq in zip(range(len(ineqs2)),ineqs2):
+    print(i)
+    display(reducegens(assumeall(ineq,positive=True)))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
0
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{2} - ab - ac + b^{2} - bc + c^{2}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
1
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{2} - ab - ac - ad + b^{2} + c^{2} + d^{2}, a, b, c, d, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
2
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{4}b^{2} + a^{3}b^{2} - a^{3}b - 2 a^{2}b + a^{2} + ab^{2} - ab + b^{2}, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
3
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{3}b + a^{3} - 4 a^{2}b^{2} - a^{2}b + a^{2} + 2 ab^{3} - ab^{2} - 2 ab + b^{3} + b^{2}, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
4
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3} - a^{2}b - ab^{2} + b^{3}, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
5
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{3} - a^{2}b - a^{2}c - ab^{2} - ac^{2} + 2 b^{3} - b^{2}c - bc^{2} + 2 c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
6
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{3} - 3 a^{2}b + b^{3}, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
7
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3} - a^{2}b - ac^{2} + b^{3} - b^{2}c + c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
8
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3}c + a^{3}d + a^{2}b^{2} - a^{2}bd - 2 a^{2}c^{2} - a^{2}cd + a^{2}d^{2} + ab^{3} - ab^{2}c - ab^{2}d - abc^{2} + ac^{3} - acd^{2} + b^{3}d + b^{2}c^{2} - 2 b^{2}d^{2} + bc^{3} - bc^{2}d - bcd^{2} + bd^{3} + c^{2}d^{2} + cd^{3}, a, b, c, d, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
9
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{5}b^{2} + 2 a^{5}bc + 2 a^{5}c^{2} + a^{4}b^{3} - a^{4}b^{2}c - a^{4}bc^{2} + a^{4}c^{3} + a^{3}b^{4} - 2 a^{3}b^{3}c - 4 a^{3}b^{2}c^{2} - 2 a^{3}bc^{3} + a^{3}c^{4} + 2 a^{2}b^{5} - a^{2}b^{4}c - 4 a^{2}b^{3}c^{2} - 4 a^{2}b^{2}c^{3} - a^{2}bc^{4} + 2 a^{2}c^{5} + 2 ab^{5}c - ab^{4}c^{2} - 2 ab^{3}c^{3} - ab^{2}c^{4} + 2 abc^{5} + 2 b^{5}c^{2} + b^{4}c^{3} + b^{3}c^{4} + 2 b^{2}c^{5}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
10
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( ad + af - 2 \sqrt{a}\sqrt{b}\sqrt{c}\sqrt{d} - 2 \sqrt{a}\sqrt{b}\sqrt{e}\sqrt{f} + bc + be + cf - 2 \sqrt{c}\sqrt{d}\sqrt{e}\sqrt{f} + de, \sqrt{a}, \sqrt{b}, \sqrt{c}, \sqrt{d}, \sqrt{e}, \sqrt{f}, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
11
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 3 a^{4}b + 3 a^{4}c - 2 a^{3}b^{2} + 2 a^{3}c^{2} + 2 a^{2}b^{3} - 6 a^{2}b^{2}c - 6 a^{2}bc^{2} - 2 a^{2}c^{3} + 3 ab^{4} - 6 ab^{2}c^{2} + 3 ac^{4} + 3 b^{4}c - 2 b^{3}c^{2} + 2 b^{2}c^{3} + 3 bc^{4}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
12
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 4 x^{8}y^{4} + 4 x^{7}y^{4} - 3 x^{5}y^{5} - 3 x^{5}y^{4} + 4 x^{4}y^{8} + 4 x^{4}y^{7} - 3 x^{4}y^{5} - 6 x^{4}y^{4} - 3 x^{4}y^{3} - 3 x^{3}y^{4} - 3 x^{3}y^{3} + 4 xy + 4, x, y, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
13
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3}c^{2} + a^{2}b^{3} - a^{2}b^{2}c - a^{2}bc^{2} - ab^{2}c^{2} + b^{2}c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
14
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{4}c + a^{3}c^{2} + a^{2}b^{3} + ab^{4} + b^{2}c^{3} + bc^{4}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
15
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{4}c - 4 a^{3}bc + a^{3}c^{2} + a^{2}b^{3} + 6 a^{2}b^{2}c - 2 a^{2}bc^{2} + ab^{4} - 4 ab^{3}c - 2 ab^{2}c^{2} + b^{2}c^{3} + bc^{4}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
16
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{6}b^{3} + a^{6}c^{3} - 2 a^{5}b^{2}c^{2} + a^{3}b^{6} + a^{3}c^{6} - 2 a^{2}b^{5}c^{2} - 2 a^{2}b^{2}c^{5} + b^{6}c^{3} + b^{3}c^{6}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
17
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{8}b^{8} + 2 a^{7}b^{6} + 2 a^{6}b^{7} - 3 a^{6}b^{5} - 3 a^{5}b^{6} + 2 a^{5}b^{5} - 3 a^{5}b^{3} + 2 a^{5}b^{2} - 6 a^{4}b^{4} + 2 a^{4}b^{3} + 2 a^{4} - 3 a^{3}b^{5} + 2 a^{3}b^{4} - 3 a^{3}b^{2} + 2 a^{3}b + 2 a^{2}b^{5} - 3 a^{2}b^{3} + 2 ab^{3} + 2 b^{4}, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
18
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{8} - a^{6}bc - 2 a^{5}b^{3} + a^{5}b^{2}c + a^{5}bc^{2} - 2 a^{5}c^{3} + 3 a^{4}b^{4} - a^{4}b^{3}c + 2 a^{4}b^{2}c^{2} - a^{4}bc^{3} + 3 a^{4}c^{4} - 2 a^{3}b^{5} - a^{3}b^{4}c - a^{3}b^{3}c^{2} - a^{3}b^{2}c^{3} - a^{3}bc^{4} - 2 a^{3}c^{5} + a^{2}b^{5}c + 2 a^{2}b^{4}c^{2} - a^{2}b^{3}c^{3} + 2 a^{2}b^{2}c^{4} + a^{2}bc^{5} - ab^{6}c + ab^{5}c^{2} - ab^{4}c^{3} - ab^{3}c^{4} + ab^{2}c^{5} - abc^{6} + b^{8} - 2 b^{5}c^{3} + 3 b^{4}c^{4} - 2 b^{3}c^{5} + c^{8}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
19
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( y^{18}z^{9} + 2 y^{16}z^{14} - y^{15}z^{9} + 2 y^{14}z^{16} - y^{14}z^{13} - y^{13}z^{14} - y^{13}z^{11} - y^{12}z^{12} + y^{12}z^{9} - y^{11}z^{13} - y^{11}z^{7} + 2 y^{11}z^{4} - y^{10}z^{5} + y^{9}z^{18} - y^{9}z^{15} + y^{9}z^{12} - y^{9}z^{6} - y^{8}z^{4} - y^{7}z^{11} - y^{7}z^{5} + 2 y^{7}z^{2} - y^{6}z^{9} + y^{6}z^{6} - y^{5}z^{10} - y^{5}z^{7} + 2 y^{4}z^{11} - y^{4}z^{8} - y^{3}z^{3} + 2 y^{2}z^{7} + 1, y, z, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
20
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3} - a^{2}b - a^{2}c - ab^{2} + 3 abc - ac^{2} + b^{3} - b^{2}c - bc^{2} + c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
21
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 y^{4}z^{2} - y^{3}z^{3} - 5 y^{3}z + 2 y^{2}z^{4} - 9 y^{2}z^{2} + 5 y^{2} - 5 yz^{3} + 23 yz + 5 z^{2} - 9, y, z, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
22
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{\frac{5}{2}}b\frac{1}{\sqrt{a b + a + b + 1}} + 2 a^{\frac{5}{2}}\frac{1}{\sqrt{a b + a + b + 1}} + 2 a^{2}b^{\frac{7}{2}}\frac{1}{\sqrt{b + 1}} + 2 a^{2}b^{\frac{5}{2}}\frac{1}{\sqrt{b + 1}} + 2 a^{2}b^{2}\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - a^{2}b^{2}\sqrt{3} + 2 a^{2}b\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - a^{2}b\sqrt{3} + 2 a^{\frac{3}{2}}b\frac{1}{\sqrt{a b + a + b + 1}} + 4 ab^{\frac{7}{2}}\frac{1}{\sqrt{b + 1}} + 4 ab^{\frac{5}{2}}\frac{1}{\sqrt{b + 1}} + 4 ab^{2}\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - 2 ab^{2}\sqrt{3} + 2 ab^{\frac{3}{2}}\frac{1}{\sqrt{b + 1}} + 6 ab\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - 2 ab\sqrt{3} + 2 a\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - a\sqrt{3} + 2 b^{\frac{7}{2}}\frac{1}{\sqrt{b + 1}} + 2 b^{\frac{5}{2}}\frac{1}{\sqrt{b + 1}} + 2 b^{2}\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - b^{2}\sqrt{3} + 4 b\frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}} - b\sqrt{3} + 2 \frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}}, \sqrt{a}, \sqrt{b}, \frac{1}{a b \sqrt{a b + a + b + 1} + a \sqrt{a b + a + b + 1} + b \sqrt{a b + a + b + 1} + \sqrt{a b + a + b + 1}}, \frac{1}{\sqrt{a b + a + b + 1}}, \frac{1}{\sqrt{b + 1}}, \sqrt{3}, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
23
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{4} - 4 abcd + b^{4} + c^{4} + d^{4}, a, b, c, d, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
24
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{3}b^{2} + a^{3}c^{2} + a^{2}b^{3} - 2 a^{2}b^{2}c - 2 a^{2}bc^{2} + a^{2}c^{3} - 2 ab^{2}c^{2} + b^{3}c^{2} + b^{2}c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
25
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( def + de + df - 2 \sqrt{d}\sqrt{e} - 2 \sqrt{d}\sqrt{f} + ef - 2 \sqrt{e}\sqrt{f} + f + 2, \sqrt{d}, \sqrt{e}, \sqrt{f}, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
26
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( de^{2}f^{2} + de^{2}f + 2 def^{2} - 6 def + de + df^{2} + df + e^{2}f^{2} + e^{2}f + 2 ef^{2} + 3 ef + e + f^{2} + 2 f + 1, d, e, f, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
27
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( s^{2}def + s^{2}, s, d, e, f, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
28
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( -2 \sqrt{3}x_{1}x_{2} - 2 \sqrt{3}x_{2}x_{3} - 2 \sqrt{3}x_{3}x_{4} - 2 \sqrt{3}x_{4}x_{5} + 3 x_{1}^{2} + 3 x_{2}^{2} + 3 x_{3}^{2} + 3 x_{4}^{2} + 3 x_{5}^{2}, \sqrt{3}, x_{1}, x_{2}, x_{3}, x_{4}, x_{5}, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
29
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 7 a^{2}b^{3} - 6 a^{2}b^{2} - 6 a^{2}b + 7 a^{2} + 14 ab^{3} - 12 ab^{2} + 15 ab - 13 a + 7 b^{3} - 6 b^{2} - 6 b + 7, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
30
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{2}b^{2} + a^{2}b + 2 ab^{2} + ab + a + b^{2} + b, a, b, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
31
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( -2 \frac{1}{\sqrt{b}}\sqrt{\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}} - 2 \frac{1}{\sqrt{b}}\sqrt{\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}} - 2 \sqrt{\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}}\sqrt{\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}} + 3, \frac{1}{\sqrt{b}}, \sqrt{\frac{a^{2} b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a^{2} b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b^{2}}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1} + \frac{a b}{a^{2} b + a^{2} + a b^{2} + 3 a b + 2 a + b^{2} + 2 b + 1}}, \sqrt{\frac{a b}{a^{2} b + a^{2} + a b + 2 a + 1} + \frac{b}{a^{2} b + a^{2} + a b + 2 a + 1}}, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
32
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( a^{5}b^{2} + a^{5}c^{2} + a^{4}b^{3} - a^{4}b^{2}c - a^{4}bc^{2} - a^{4}c^{3} - a^{3}b^{4} + a^{3}c^{4} + a^{2}b^{5} - a^{2}b^{4}c - a^{2}bc^{4} + a^{2}c^{5} - ab^{4}c^{2} - ab^{2}c^{4} + b^{5}c^{2} + b^{4}c^{3} - b^{3}c^{4} + b^{2}c^{5}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
33
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{2}d^{3} - a^{2}d^{2} - a^{2}d + 2 a^{2} + 4 ad^{3} - 2 ad^{2} - 3 a + 2 d^{3} - d^{2} - d + 2, a, d, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+ +
+ + +
+
34
+
+
+
+ +
+ +
+ + + + +
+$\displaystyle \operatorname{Poly}{\left( 2 a^{3} - 3 a^{2}b + a^{2}c + ab^{2} - 3 ac^{2} + 2 b^{3} - 3 b^{2}c + bc^{2} + 2 c^{3}, a, b, c, domain=\mathbb{Z} \right)}$ +
+ +
+ +
+
+ +
+
+
+
+

Most formulas was converted to polynomials of independent variables. However formulas No. 22 and No. 31 were not. For this reason it's very unlikely that any method of proving these ones will succeed.

+

Now let's try some methods of proving these inequalities. The first one would be the simple prove.

+ +
+
+
+
+
+
In [7]:
+
+
+
tm=[0]*4
+
+ +
+
+
+ +
+
+
+
In [8]:
+
+
+
from collections import Counter
+from timeit import default_timer as timer
+start=timer()
+t=[]
+for ineq in ineqs2:
+    t+=[prove(ineq)]
+    print(t[-1],end=',')
+tm[0]=timer()-start
+print('\n',tm[0],sep='')
+Counter(t)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,2,0,2,2,0,2,0,2,0,
+20.714609994000057
+
+
+
+ +
+ +
Out[8]:
+ + + + +
+
Counter({0: 21, 2: 14})
+
+ +
+ +
+
+ +
+
+
+
+

Code 0 means that the proof was found, all other codes means that proof wasn't found. So this method has proved 21 inequalities.

+

The second method uses findvalues function, rationalizes the result numbers and gives them as additional parameter to prove function.

+ +
+
+
+
+
+
In [9]:
+
+
+
def cut(a):
+    if a<=0 or a>=100 or (a is None):
+        return 1
+    return a
+start=timer()
+t2=[]
+for ineq in ineqs2:
+    numvalues=findvalues(ineq,disp=0)
+    values=nsimplify(numvalues,tolerance=0.1,rational=True)
+    values=list(map(cut,values))
+    t2+=[prove(ineq,values=values)]
+    print(t2[-1],end=',')
+tm[1]=timer()-start
+print('\n',tm[1],sep='')
+Counter(t2)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,2,2,0,2,0,2,0,
+21.832711064998875
+
+
+
+ +
+ +
Out[9]:
+ + + + +
+
Counter({0: 24, 2: 11})
+
+ +
+ +
+
+ +
+
+
+
+

The third method is similar to the second one, but instead of rationalize values it squares, rationalizes and makes square roots of these values.

+ +
+
+
+
+
+
In [10]:
+
+
+
def cut(a):
+    if a<=0 or a>=1000 or (a is None):
+        return S(1)
+    return a
+    
+start=timer()
+t3=[]
+for ineq in ineqs2:
+    numvalues=findvalues(ineq,disp=0)
+    numvalues=tuple([x**2 for x in numvalues])
+    values=nsimplify(numvalues,tolerance=0.1,rational=True)
+    values=[sqrt(x) for x in values]
+    values=list(map(cut,values))
+    t3+=[prove(ineq,values=values)]
+    print(t3[-1],end=',')
+tm[2]=timer()-start
+print('\n',tm[2],sep='')
+Counter(t3)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,2,2,0,2,0,2,0,
+21.697120987002563
+
+
+
+ +
+ +
Out[10]:
+ + + + +
+
Counter({0: 23, 2: 12})
+
+ +
+ +
+
+ +
+
+
+
+

Finally, the fourth method is a slight modification to the third method. It does the same "findvalues, square, rationalize and make square roots" thing, but then it scales the values and runs it again. It can sometimes help with uniform formulas.

+ +
+
+
+
+
+
In [11]:
+
+
+
def betw(a):
+    return a>0.001 and a<1000 and a!=None
+def cut(a):
+    if betw(a):
+        return a
+    return S(1)
+
+start=timer()
+t4=[]
+for ineq in ineqs2:
+    numvalues=findvalues(ineq,disp=0)
+    n=1
+    numvalues2=[]
+    for i in numvalues:
+        if betw(i):
+            n=1/i
+            break
+    for i in numvalues:
+        if betw(i):
+            numvalues2+=[i*n]
+        else:
+            numvalues2+=[1]
+    numvalues3=findvalues(ineq,values=numvalues2,disp=0)
+    numvalues4=tuple([x**2 for x in numvalues3])
+    values=nsimplify(numvalues4,tolerance=0.1,rational=True)
+    values=[sqrt(x) for x in values]
+    values=list(map(cut,values))
+    t4+=[prove(ineq,values=values)]
+    print(t4[-1],end=',')
+tm[3]=timer()-start
+print('\n',tm[3],sep='')
+Counter(t4)
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,2,0,0,0,2,0,2,0,2,0,
+23.187820409999404
+
+
+
+ +
+ +
Out[11]:
+ + + + +
+
Counter({0: 24, 2: 11})
+
+ +
+ +
+
+ +
+
+
+
In [17]:
+
+
+
import matplotlib.pyplot as plt
+plt.bar(['1','2','3','4'],tm)
+plt.ylabel('time [seconds]')
+plt.xlabel('method')
+plt.show()
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
In [13]:
+
+
+
import pandas as pd
+u=pd.DataFrame(zip(['']*len(ineqs),t,t2,t3,t4))
+
+ +
+
+
+ +
+
+
+
In [14]:
+
+
+
plt.bar(['1','2','3','4'],[sum(u[i]==0)/len(ineqs2)*100 for i in range(1,5)])
+plt.ylabel('inequalities proven [%]')
+plt.xlabel('method')
+plt.show()
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
+ +
+
+
+
+

Down below there are contingency tables and McNemar test for every pair of methods.

+ +
+
+
+
+
+
In [15]:
+
+
+
for i in range(4):
+    for j in range(i+1,4):
+        display(pd.crosstab(u[i+1]==0, u[j+1]==0))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
2FalseTrue
1
False113
True021
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
3FalseTrue
1
False122
True021
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
4FalseTrue
1
False113
True021
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
3FalseTrue
2
False110
True123
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
4FalseTrue
2
False101
True123
+
+
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
4FalseTrue
3
False111
True023
+
+
+ +
+ +
+
+ +
+
+
+
In [16]:
+
+
+
from statsmodels.stats.contingency_tables import mcnemar
+for i in range(4):
+    for j in range(i+1,4):
+        print(mcnemar(pd.crosstab(u[i+1]==0, u[j+1]==0)))
+
+ +
+
+
+ +
+
+ + +
+ +
+ + +
+
pvalue      0.25
+statistic   0.0
+pvalue      0.5
+statistic   0.0
+pvalue      0.25
+statistic   0.0
+pvalue      1.0
+statistic   0.0
+pvalue      1.0
+statistic   1.0
+pvalue      1.0
+statistic   0.0
+
+
+
+ +
+
+ +
+
+
+
+

In all cases p-value is greater than 0.05, so there is no statistical difference between the methods.

+ +
+
+
+
+
+ + + + + + diff --git a/statistics.ipynb b/statistics.ipynb index fe47221..d65b5bc 100644 --- a/statistics.ipynb +++ b/statistics.ipynb @@ -17,7 +17,6 @@ "metadata": {}, "outputs": [], "source": [ - "from importlib import reload\n", "from sympy import *\n", "import shiroindev\n", "from shiroindev import *\n", @@ -58,25 +57,20 @@ " if not m:\n", " break\n", " s2+=s[p:p+m.end()]\n", - " #print('a',s[p:m.end()],p)\n", " p+=m.end()\n", " if m.group() in arg:\n", " for i in range(arg[m.group()]):\n", " sp=re.search('^ *',s[p:])\n", " s2+=sp.group()\n", - " #print('b',sp.group(),p)\n", " p+=sp.end()\n", " if s[p]=='{':\n", " cb=re.search(r'^\\{.*?\\}',s[p:])\n", " ab=addbraces(cb.group())\n", " s2+=ab\n", - " #print('c',ab,p)\n", " p+=cb.end()\n", " else:\n", " s2+='{'+s[p]+'}'\n", - " #print('d','{'+s[p]+'}',p)\n", " p+=1\n", - " #print('e',p)\n", " s2+=s[p:]\n", " return s2\n", "print(addbraces(r'\\frac{ \\sqrt 3}2'))\n", @@ -147,7 +141,6 @@ "def parser(formula,intervals='[]',subs='[]',func=dif):\n", " newproof()\n", " shiro.display=lambda x:None\n", - " #display=lambda x:None\n", " if intervals=='':\n", " intervals='[]'\n", " if subs=='':\n", diff --git a/statistics.pdf b/statistics.pdf deleted file mode 100644 index 5d30eec2fcbcf58b5ba85cb5f95d94225f6e4e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71326 zcma%iQ;;q&v+W-2v2EM7ZQHgzv&S=gY}>YN+qV6U&AacZ`*2R3`|v*`ol3eY4_)c3 z)mb4`5D}wgq+^95J-P+FLNPKEFc8=qSwZpe(2H5xxR^T8i`f{un2MMh+nbou%b41k zyI2q~v9UAr@j*GeIGGySLV0X7YyFAcY(xC%%^he1j@}xAkyNbxjV21M6G2_mr`z~D zVkA^6x=hcfP;S;CiEeJJeS-?XdgaP1m}BUoGAAb zV0Qlvl35q#fEG4BZ8bniOcYMuC=ka0Nya`YueV(!tH!=wkh8P%IjF#p01Bjz!Yp=> zW*JB!!_v>cSb81>zGOVl&AgYi$je9yDVs(Z!wHGn{ws}P<%l0Oq-@=!857l%_-5js z-C2DST(el)IdRfVnGVpQs+rzjlhH6njo)Adi%fLaAmrO4->R7?+3A+ZC&Ap2xX|OM zc+#noI6*r9sbnxu9-ufBT2+yG9(BiXH<656v{{YIE5#euEi_U5$EtR+Nz!^9LxIkl zs11G(Y8n12gDw_r!J*KeIL@0IT^72BN$CX3Wkgu&lYkKhx)C|EWPMrvW|yCjPY(Gc zo`(LRX&nLK(MOHu7`RahLql)I@l3?F&fbE5KmD)tPB;pv3ISd71vJ;L-Y_e}*;F$t$y z_t&g!vYDtdw~_HLh9vz3o!()L>^`wmXF*{8mJ4}6f&gYSzF3bIQX<4mkY*ns5Q5%6 zKdfE%u6(x1XW(#%E{^~RS~&Je=r@T(ny%*uR?>nf440o8@&?)`14;NT_lEn1WFUGo zGFfm)l`32o^o`t4@0lqdVU(ELlPms1RAO+b+wV(lL~ktGuW`@yt{x0R z2Lsue)y!+nP2ma*)?n%@WtL8KbMaki zpU^&QX~k4bH9$|sZcpPaT?MYUG?bqzucgK*-Ix(ue=#u0m9rhfp+Yn?Ej}{_hoP_# zQvZR+o78ZPs>Z@$F$4$#XJE0+xwjb)1ak|1_`HZ(=U?FdVP2iGGqDq2k@LYq%pJjf z+ov#rKUcHLyp9ft)of%eEY>N0*&O*Rc%=aXNDfzNfg!6t%+BzZsHExMXZFseU!yi}|b@+!n7R!#=IP=v2fku}TFmV&j8$4xmU2QfWRucJhit2J z1T~0(VA^&YKq+HtJ=B$emD~u*sxb0Lv>W$rsF>OO8H|G*Xd! zzrARII{%v1>5HpKwBZMZw*8F7gj~-k1M_w2EIWP5;NeIgdd3JxV+~QgW1?Elv>V#! z`G_oWP&j$TGQgE940e49@hr57E4tSgMECf%iRR+30m-cX^vCYNxV?R3=HLL(G$~U9+ zq-l94-*miUl&1#u%ACPN7D;KS@a8&ZrFt7{Vr*{>ar=H1w6TFJWNMDDf{-KDZwf~> z@P3|JYNm`a&&Nn954p=TXi~tA~-0-Y!%0H=`_KU5gtH@Tk!WtSf$sLGJC(fG3|91)Tin79j zkDw&?Z&IrkSyhwW7s(}NRagF5bo1cQn0mv6l)n|EL1|t;bbGSXUsEe}alzE4H(!5% zh$=!tXT9mImsC9_l~#r`M`Y-VFF-0Sl_x6Nc`999mKWVsJLXKgg(#+QRA$W%7=4_W z%YP3=D7+RQBq`klS!I_Ox45p9LIdSwF_RyA_XN5#@07v;Au+XzT5D?jh5+Iog^zfJ za;dZL5=X!TsK4#*Pwb$P z5=V00B*+~&6s*X1CyDaz6@OV?{v2nwIV84erBK?ATkM+q{ww@d7vN*M+jDQ<&30Yr zYcb@SSkbx{+F*B9AK(*=IyfM~At22h;;b@=sJtCE_rkXk10yel z#O3S;cx}n9%^;C|Sz)DD`cN&Xnp%Z^(ly?NgV|87TBX}Aja|85t!{Z|)P)2RMdoj( z4k&xQ)P-z%|EvK8)}C1IYuh!Xj*|WPMHrw}edxg}(kAhD>{O387i-)MC}G zX|3*zN{eHF9B=9P?9*hIb1nMvJ?h=I=^T-}_g!TmHn zSJJyT@vA-QhI=jdlFb+X!#Nr=Sl92``Za0+s?;Uws~L5Q^eVOz9~Wm0AG;4EGUnLntL}-nUrz`Bsdkv;-B2#8>Gh5r!sIKu3 z0U(4xfs1X|VpuhLmcnVhrW$nSVrk7kG#-4-6?>W?Tb8TusQGBD=AmBu(8vejSMF?c zsU8yaysDGSt>Yc)V0`{L=FP$~Q#D#;AG>o|aiW z2Xoo=Hbmf`KlRrfVz>uOTHOZweJ*Z?iB_5Uy%f99;~XW}fWu83+(Ov9nrdhfmj;a) zUI+3&W_|um_3LP$J@(2-E9Sz4(GaI(<{yVO6A>d^wgh|IE7R;6&Os}w2)_j+~*>YCnCRt;RjVM>r+5LrGp{g)7)yBJ}jHo zn{$sCPkuF8J2T6yW^7kmM|ONOTrMyzO2HE6MZ@=4eZGh80u4_ogF~6xnfyQO`ET@p z(JCYRe*#;XIT={~2W-{dw8Lpf^qEzMi3?5MD%?4#rU#4q1(ZPGDZR%Y4f^;Pg#)5j zO}icd=>Pn)hMusD{`6cXZ@8LLg*aOm8Cs>RN@D(CO3W7iC2zxI`6JJ^Y@gZNv-|n} z;!T{;CIMCN`BR5T71=zWnfY#Bvew1FrN`^n)AQ%2c6xWmK0)Jy|L0BoCRZN6WX?s; zZ&&!wX+Im9A@lmw8HcK6?fT-~a<;@`+jmOAFf>wCpC%0M8)0+e#clmvjPlx@u6JCpZgnq{H2v?j93}Gl`I1$e z5ATmR!1i^ArLDfgwgBZvX7=#0)wLvUCW-xAK|LfLsOuC-o-{-@S-q5M?Rtdfahl{D z8X}i9xIfFs?c+!5Y-gn%Xhx5O@sHIHOE%%pvo}JbbjZZvkO}N{Ei2T-?(E9taa+*{W92C?4X12rXrM^}AD^xc#L|4V zuya*@(#{vL%l$?mvSut2k6}zVOo+WPSSVM)mq=3Vuwh7^#FAT8qOr9)Xs*PWr=MTt zW4Y2IWmMA$Z5EGxqG%n;RtcV3P>acVD=yxwc7^n<$hb5%ged6Y8x)(=(*;Yq(vtF# z7h>bl(48B_jty%N8G=g{P*qsv^?;7xk<%ni7Akw+v@8Mo5oM%LcvzH1zAF+NVZ(wC z7SZg;ThdCDe5p>dscjj0yMP+bLJc4KrL2jY>rSmE!Cwz?8~D2-ouw#zRd>efuj?C? z@c1V}iRMilMO>2;TXC862$6dAxCQq_*yM6EG;T13k*REC$||amUh2o+f(`!Ygy&GF z;tIPab9@+v#~20Brvyuh&FVPvx4nM4c(A5zEmhhps=R26dOlu!dQ6jrrep_5@0C(W zuMzh!j^pc;V3q)>mk!Lqg1Y3)d80$t+$a(mR(}xyFV+oSQUW^Nvw<4)tS3Hd% zsX;t!Kp2e+NQ6cU#?;oMpoj;Bu;BKIxJbcSIJ%KDhu3qWZnOymV<^k~_z5lEy~6shx8{j+)Hn zqBN0gQMPB#qr77-mz|c2xUh7qq*+}fMXzO1%9&27J`PFGP|c)97z#weOKHHbL984Q zd`SVopOufq0=*4uvz8iA-=D|l*1BM<>K8QgoYR^i-AU?-L8ZNVD21}KHj`;Om+I3t z3rVJC$ljk*WP7*ivUQVxFadzv3%!DhN25==I+2P^V1a&qoZhBK`j`2hhzcZDaGe!5 zH<}Ws$_85OXPQ0b;G^TUR}trKh@6dSm`>fad2(02+#^q-eue7A}~=})hn7=o{-&emUmb2S*K&(rPY z!5jHrpAQu~z=EUqyZ+m`=f|h*PnXZ@vxd*t>&GDy?O8nFz$}67)S19^4cb*(mJ*6J zJjL&iCW<`AL(vS3QtmhvqC?``)7SlrB4mHJ|vnoAtBOw2eIt z_EV24l8&|KfeF;Q9#DO6mql&aIrF#^40Jnt_oK5I)CP)NlU#k#b?@_pssrI1o;3qhQTlx(C) z)cka)WX_XBvSuNLWDyYH#wiLFePB=sq>BHMSWFPICl}%Ps54e{jQ1PdtTXGP@Rq!; zv~bPst6_2#Q{(XXtX(=@(Wdhthgbn>z*7!x#N%aRFwHG{Xmji4t#B=c3N?z>w--zJ zMzvtXS|Hq5COZyeS{cPSDY`=(8Fe&`i^!<4GkQhLtu=|#uxehC>sdN)$C_~TvajN} zo*uM`DH|vtBCJ@88RcT1SVing`3aQ#@Mh zfy(aLrw$jckUeuea@huj*<1m1H>yp&>Jl#!bA~h0;dH+R`h-hf^{xw@{NOipj<%<_ zFs5we@&OVJYo<#W6X=$B*3%*)fzf0{0U?#rf!iiDS``H0ay$FMC!GB|;;3?l9dU{M z_kulgX?lqp{1WB|)A(e3{WS$hDci2(`W#dEELS8C)J;St487bWvh|Y|eqxcbV3**{ zl6{6m{3M>79oMc`{v1%p3aVtIBbo(Cjr}@=?HMCGGRdo3?{`9X9?F5y&n2K*My}cJ z(nquo8+6#2+t%Ewk=#eB42>WR>bJyzuoCR6y+Fk}1~lb+g*bykN{KvfFfr7qzdcqm zJHLDQBLZKDqdJZ>ZfXJm3HPqk?Lg`6Wx*}PNigQ?`%Ns8+JYx}q{Co~2||U3FcH(p z=5y`>qnId}#4~$!-fbMV1COs9LH(b6GkI&OF8;%qbSQfaz4GSr%)P*)z&I!F;`S8J zK7h`nRa(D*3F5 zV07cjgtT#3s!*mlCOJ=}I8dx=XkaECG*FAZ9GTYKq`cfdRcByZ)KAQ=^rZa5Z#wl2 zN6h4CgV38vlf0kg#B&Y_5e1IN$V{byjD8K=c|L5l_^-HM?FrRVJM7`XinjwUMM}*#46g+ zxk2FM-4ewLkovr%yDmNrp9p;CCG$JaKo)TZXN*8b^)~ngJgK1ffkTj)JH`3H=;Hv+ zYnom>Gf&BEf$nqKwFIiq)H@$$f}ixZ=<4fdW^zNiQGz-sc6BWTi;e-JO$-iBKq&b> zL<{B3vMeMI7Qjw-&*PUnKJajj@(1GUJ3HLY>*cOT7;=P@M`vgT4(ZGel6fpQDee~Q zH&9?N*;-#<)9&GjAdX*NP$&oC?x=x#D|4-Q)&x>1uvtr&@G!r?Z3k%QP6Kox``a4$ zK!Z~`R^q~LJ%#(D6#g152if#@U!gonBaQUN>))ma$--41p2$wxSquJbN^8_J z=CQpUqtQn%K!sAszK9J+RAR42`@fn`SZ1t@V5%&yi;d!zjX!^hRx0^Yy9)_rkq zTd(jbm$U8@?Rj(I*=qOE!HZ$ZiB8u(b@$XRf<(13QIWL*F|3u*# z6z|`}vwO%pm+-33cayjs;+KV5-=ngske2eQ|=hf?^kAU=TAfyFadCg20!B>NHiLL#Ml~2>14hZLH;kYxtaa#Kvgr z6iUnam=s3U@hMw&bd#S_D6{+>H-9j4^4_WvcaY#w>1%E|E?dm4BARp&=xvF_AHvXW zeXM4j>4}ELBGG|i(dj`m51DBw`0oF8HJxR(TZ1jyAH@DREia+J(xUL0o;(gebcIkl zJ4x#?{aXqU18yP?Fu?rCX%`uSyV!j(K2y9RwqXLk4yFE}PKd8F+Vc_)Qdkg=3d3+~ zV`ZU;uXdAbOXN*H2a*i0U6iU8a;;_L-PhZuTqQbWs#tJ$r1$vL`Wh;^ToX(lbZyey z&|`nR;Vd~e>_v*pSQlvvdmE&FeA426%Rd0)rU2tj3^`%RjFydT({iIq0Cd2c2S z0)u2ndLog+o^{IBBVo7@4z@4(iS6qv&Q0r~v(FzmVOF83^8?S3oA3~!w_BC7Dx4^Z zJy00Nwz4BN} zCb6FeM=u+dIZQFWct}gPfCZe5P9?0w1)f+HcdJ(&fIU80QSDete`#u8h{v%Ua@hIE z!CQ`m&oMhKLZPdRVG0C(LzOsz zYB|%*4H2s>VM(ius;*#79Y<%;s`p=r4M;>vXdglm)27VVpGB#J-$8iHPio+W;}+8^ zbtWGQin?n3Gx19iOxmb|`A^4IXp^rplYoO;vK5bp$2nsgq+FauF{%LM9bQ6jz**DmPEj5ju+H zaCqgF$b_St^O-y+G_Wu36jC~B$X9@i0O3-y7Qr_@NRufBE;P7RzW!&H3B|NN=lyeu zUFChs;~}WcnI6F>$jd|H zb8jkX;f?EW27bgrAaRA-C6jsVsLQ5`SmLgCPVOqH0yoVISB6rDNCmGmoxv8355)tZ z+*u1{43^^%Bdx(K-hV|MRZv=&aEDz~7vXW57H}L;R?SW^xa`)Q|I3-9+Fd4I(44A7 z!hw|^UXfB%8nx5x3JyymBU*NjEZ;&Cj0!$G*wUKla&WS#9?$ytY;>vrtez{7BY`kd z7Po6h)${CY7F-8!qkb!3VJb7|PsY)RLJYRG9Xc5ePO3lr&Ndq8Z;Alj<)AU73US zFi)3wfgsm-g2F>u;Aurap}qJga!@tUPTs0}63FSRQ340_5k|=^wAMXRy1_bAZlX1O zgMGuIDbQI0*K#4|`3DJIGSA6p{r-J(;fqjQDgl_n6axcl0zN)>}lt0rD-QDn?7l18`P0!Cc0% zbqu~mjD6d;%&$thfqtauW>h@*hFT6vWJs9vE0)Ys!zrPEU@1)x(S)U&Xb$GwCNM_M z9Qh14u8lEFOJv~eA3gBh>`Gf!Uh+OyI)-7AUtDppVh1i%XKOQw>xQP&eB445?wZ1- zFJc0(b#oZwP9cBN(Y^NbkL<%Vv9s=jd?Z}Uf83(=WEk6ymqX)?JxG&2shJC(z|lD! zBD9}Olz)F5gui7%(7UeL2%jkgnvkG=9wBfm)?K|*iP)qvm^|U+vYR~ByjrByi(XEQ zr&b`0b#@LI7!N0XC!9}y(3R;iR*YrA#>U)m5QVQ=svS!!h*5*McjZ8B92~WLi--Uh zt%@3O=M@wWOk}~PmQGz8f?kZbqngf6InkR$Zgwz?>grO{+L+MfV*JX>Y&LPIE#Gka3)8T5)4H_uvRa?B`QmP!Ere8rV zZH2!f+&o!?x-oyd@dfTW#ri??KIIrp{#{RGI)RKS(5LiL$Uxq&mDz~B4$tNs6mUwC z3NPC#8yvcXV9QuVwBV>EUQ>+#?aUG1pNIBB=}d#fcxveE;vBkez>#rspNbK@)?7;Y zKq7Z!0ww^FScg~ofAsGEO`7oeweH$~h%aI)8{NZ@ms zi15YZF%|98?cfqFuCO&!JhgB^ft`0Vrk#5r?6UIU5~-_H?LM|KU3t2qp6F~(hzn?V zN{7m`@d*K@*H%BDkF#ypubD&IzFaN#Fvr{?k7qLB!;YJ<^;;-_j-UYBg9-+BL6!<>4+KFncOIod;wE7Z^h>pbg4tC&h#R%Zc$eOmor}wD-L$LOBT%f4(@M_=gG;7> zZwORs34x%CWqV~Sgr%Rg_ByyCAc5sGKBMC_DB&{hF5fl&E7Cn*?vTiPT*kMqsoVBPiC45d<4}B;lzb@O zLif*Oc^qB$sCcfiU#?K$=20+Mhm^!Xp~WR%8Svt(xY)c(ZUGf4&ye{0tU#boD5 z8P_6U-qTVE(}h`-Xas9#8vX)<#z2A7h|mZg9y9`Vj>_4wzcD(ljer7aJ79t@j~Z2*IaYNWwki3PevqA2a^_e`6<`m=+)XjnZHH@Wrng%hE^q1M%;{h2Pk%K< z>*MK7KdnXn-PAPsZtpQWZ&PkjJACmo;+Y$kz%*~bkTBn zB3tHfimlcbjlFB4dcvEi#Jj*;MKr1j%G}B#7o_k#YijWQv+zDJUWGHq!_JQM^);Th z(>%=C{MFNgo64e$>!-KMF~|S&Dm~c{y}qPrjC7zBm#&*?BsB_!4U5_4C-U^Qp#T(_N@=U3riEJ$emFIqVl(b6v8B zZm=L)U&~)0Z+v~_DZY@>l4;jVKZ{TB$AEJ3*E$dF=&yAa+Sy;KOY*Sz1f7=Ui~{bv zxoW3yag`KTIC(K9wu6IPyR~Z108_6`hxZ^r(RFK7tSlP zM2Tcq&y$A}VVr-*`A_fHyTa8hAR;o3^5nyrw>>hPazps8t&8?OYusVULEJ3KH}@vS ztAwGKkH31e#DQ%*5{Xg%f@f8}`Ehr3)0o}9n_l(;Qc^00jjHnpqw!{>bcQ>k!! zjdBuqS5R@cP^VxOEzmchr@Iij>+l_Jqs9%{%_a;VgWky8KV3{6iR;`068RR|K@fj9 zM3&3$N5p*=94i^hbxOPOf>2C!GujY?XbQ$W-=E`8!?;QWTx03I)wtYVjPYNK&W#k6 zwGJBNBoo^NEl6BhiU8I^sk#P8U!bmr#DfEwF|L~#yKh9EPqy2Wb=NN?5y{xPoy2rf;V7p(mgjvCkt%%>(KpibL+BEX907o;L-|j zd28~a`R?plm8sC+t2!QdoUvgy4J2P**B!o1ui)%*mT zzqxS2ZHDnbF^2}B)fP83mKZ|E&syZt`j9sF8v zgimsM_~qsk*KD(~ys44*%FQMym&coc!}T}$%=}`1t|$(?TjUk&~vJOMVed;TwbyrNN zHk&*WZrTue(D6Nn=Rg>c1v)cz<8xK&hqT?)sW$r9Z+TQ%Mx{0Y{&^-e0sm*%b-JB zKZLBXdG}u**7Rtg|=IsOKSLuo8w$aZf($V%e>#=ly%+ul)GS4l?!jaz}fsJ~*(4sdT488&%ckS3T|XR4cAW zl|@Bah}>2J@AcWe3#OXfJIqsv#i;RmMY;4`Q>X2h67F`lN-xb&o#VR-bn?m^)=(wY zzy?12dpsWDOpg)$f(Eqav7C(=$2HN-bDViJjijF~5?pE8j!cVz2in9cV|UAR;A}0Q zx3Kk+uQ;u*(I@k21b1fFiskXcYB?RX%Fe4s*inot##5U?`p1}()&VnfD>zrP4`Yjo zCvO4fF1XzUujRFZYyF5jNIDrv2*sBIL7v$92PE?Xx8n`&tn^*cjJuPUj_5UE9P49R zx{^sT*n|+?_29NnI~yU(YUc*TfRzgZU8lY`iWqefVeG{YKNpD6yUY(guBqQ!HZHw# zy>XrKSiBLG(P?OMu?f2xu@!U>&r2_e(X&tToS(XL2x?El#CJhDa$Ae8N>qK3vX$p^kpu zul=-EMce;Bd6nZo$*WAPtp7t%2GEtS-C~35eNldW4Ft5MNL#0v7SXez!Xl%2IAu7gS;96_h_&9HA#bXl5L-A%`ir zjS)foEV+wSYpQBI2AHD|-zq>eR?B5&GOecQ0ydjZfUy0I@a9z>@K#LrYn8|N&05wo z>}qC!VsBQ8mC@hv9SRam0g-{uF}Rci(y#(a+#_c37D^qG z7}VnR_2k#%?fx`SXPp=2%Psd$0seQ?G~L=t8guw=4kdbc z9L!uGkkSB^lq8r02nY?T$+6?IKF-K|1QE9rlU1H4luDu*5gQ^q*xyn?2j6uW^_;)I zbAyF64J%w%lB%Oii(WI_`m+#iEP4I8=y8f4%Kh`*@F34ikTcPE z7s7-z1Q&6;|0NQLQu15!pDu}EYJ6@>(OJ0g2M4>`$L8BgOT_L$->zC~v%Rm-I$Y%; zz|W{f_okFTBR2zI{_QWZ+ki=Eh#+GU{@O?w0v?Nt>WZvV0jB<=;zrBz1elcnzc=vr zMH14jRZQlhqgD>mzA!F&B$Id#tT0g6!XQ}$$d{+QkYJH*c^iNv^{I$Z$ub8@_&&Tw zA_3AhbWBK+Oitm4tjn}JttAe`3Nkhu8AQrQhp|4S?jmkt}AZTf=|4~G|m~QF0>Er1|i{1LD(oX$mGxiiYUeWl_?Wx-}^%M?M)I~QXXGTcxo;g zCFHG*fyDSn8+3d;{}Ml)CLgiRSg!{BWpu$eqI3NdiboLr}f%L23*D3IaYV>ASeUmw{ox3frNVy~FUp$5jOf1SkAueyFF+dL$Z z0UusULSkU^cEo?KJb$o#Ix~uf-ddQ|R>I`kac>GX#u7K9zoz4nK(jJYc>}pBY~&xu z1P*Kh&xG|)RdE(lbuJhiY^dI*dO|39j<*DaIOHyW% z=*E^pew4QcYK{JiN-ZZSXqs1Ja!`y>bG?ItlRkD6v2tcos+TP>7Q?*@k^ZHniDY?v z^a3UbLHb*t5(7jc;esXr!6jy~365a&X8|h(C^(Ro3l%&Lu^8;B`rOcJ^Rdn_2`v_R z{Nd<;Q-;U%hmsYOEaQ;@k-T7N{If3ICvD0Jb*cgm>)4W5$q5Rzip!XR5_?B%j{^Zz zI)LEsRu<@UQSf%dv20yMSGiKjk<^ia&)>duMq&d7EiDlH#;&TkVH=Ko&tVYYe?JB? zmXeOV$E3=0N2CxqADAV_of^QJIvTD|kP4zra+Kmis3o;D_Lb!gNm4uz%AThS(XAAt zL~DjFCtCc|V78?yc?Ri4dE?V2uM`s!k(@C{K|=>~eW!}ijp?#+oR3$IWK8>Y-8jF| zo9UUyy4)$j&vMNo4@}_Z3<+E911i7sTV=WUW(}=G*%p-MJnQ34dnBUhJD_`xTo~v> zK~@`sm1x=rXpRm3VkoQ8jl-`D{$8;D#hNE=!(~Q>cH-I-gqo z7shF_PrK8xX>|Yaly&#PO!D}YHA;7g;V^F@fzG_%&XRitTnaVAEM0r2xP*?Zv!3Eb z>P6}{BFFG_Xbj?V)Ry;q7J-K@5yG`g?T9N?M`Amw*850QrzY1{^(sX2gzEZ}TrltA zVFZ{qw+9HYb`wQHRl`@eOv2N5uJT^T-LzS4YeNY(%ry?xYC4o6z}JR?gn^?%iA_j# z!j#Qqn(y+73V-m*?ObAgIc4ZXXt(f^!u>M8{1R*eg)_55MR6vY+))+9;n+o%eH`FI zyGoTiq0;)$d>rj_GWo4Z+d4{;Wso;tT5 zdi0W%;pAy1U;sT?etKgRp8Y8e4dAZqs7Xt5{+NYD5LA>c4YZiBCMnLiIN&7%?aoC< zUm2*8njZ9Mq#P7w?cE0ql~ZC>j~?C9dfx>oM_qMLY35W+w=RjKe?Evv_DOX^RRoKf%xtScA;eKGQMIKiwpkf8f9_|f}Aur*=s6DZePgg+d zuN-76p%9jQbdqAGNJiPiu zVdbwqQU)(IM>bYCR~Iqueh$@tz^&0ij{Y}(WM=$N@FNQgC+C0HLI89nYjIi;|MBuE z#lSBv6Iva(c2Eg8&fze*aOXHuXb6L0MsJ5J{oIOc%`x9AvOgir_DSpx1f#@gof@B3 z$1NY0=I&zO_1y6H{EZ*Cp8sTYox4ArS5=q=;chS2iJxDI-{_;;ov}Y2#)q4JJs*)x z^_JL|Az^ke!Hx`3#)G}zuYGFo`tTW^G3 z%q<6k9EAa}@}GZ|)D0c(U*t>8dQrU!2t$fW2L--nHh{86dF4$OV|u6}2I0sOB;>RO z!t>*;8@VVlV=v7w7ezP0NIi4dhVu4H)(UmO`F4(f1ZU|?xprm{+x5zNtE2bz(6+Y- z8ash^zjIuYy<|tCVacBceA_6W>(Mtoc z>i>*9HGu5nCDvQ&@V&hHgS&QnnOtWOJ)CIfO`7jB)Oo0bRK6jta_DY3t5idIA#z(y z`B9JB@4NyZ(4!*m1?n=2^S@nU0HHLCM_IXSRq?3;>GbQ>7<@;{NC2Qoin?;*klOnt zN|=rdeKW{3HUXjxdA6H?VUX+2q#JZ@*a3>jApYiHFD0k5(BI}rw$T_3_kJQSNhxSQ zk9IGMa%r%JFOxIjXkK@e1fR}*+o##cWZUPV_-=liKFomN$qv4SHy}gSKzOz>g<#cI z9HRu>z@d%>^)>W&BsEA}$jY6GRYm@Duq1%Ei$Jl>*K4Ffe?gR`=1aWmL8pmYqhZ)*7%ss~Q01wn@fV;C1AaFXt&?k$?bc zM)-vEhSy=N6XXS`lYSVoHrFZPC=g63#@H|rj~Zh=%k+vkapIXwro$|6Biwr_XdtIC z`hh6AP|eo{1F*{y)a)sQP!ux?yyS6p!<0BTe@w6H#ZDA666MH5fL>_&Lc=K63~*#4 zB;`zky@~@_69<((^vw0>KMgR)Wa?f^(jRBvAZ&_vTnU!8U|^$wh}kIFIz3=Bsse&j z6^r>r=hM;SVPrzoKLjhr@DsoWW762z%6)Yv)M(f+i3{)XZt>ZbL(#3b!);)C^n)SO zhhrsTw*d_UResGE-(?#r+pk9Fq9B#mI+(IH2rj zQ3+yRQs-W@h%7?J+Ymh z%2X*;s!XM%6Nev3A+AyB#)-{sp%Tr^S*qc%>pQ$UeJ_JCU%U`YN-h?;dhYbM8MxX3 z6Vk9OvfZo~_~SQBS;P8f5Nz;X*s@4uur?hEUlbo>HH{09M>O-)8Ll6Jb$JGA7y4o# zR`1(=t@v3#6HC(~Fe#2>St}nyb7;xXrUuDZMcB>S6&j?W?Pr!f)IQFkc;s-#wXqdD zBoW3Sl=#HgqV^y)QABYYjNj^t9s5ltpR2gfV<$d})57;r4Kd;+&_*am8jYM6RuzL- z&=)a5(W}BZ-&C1tX$AA(Milz`9Kivju{$!Z&?Llm8VXUmi*q3zl*-$8=xp&=NM(jq z0CM8m5*TrhBg%V(zG79 zlyP;WY3kt$9{IyzNh7j@xph!>2^7vEz3?$4* z%GnUgfS4cdbTji1n9#PpKM2LIC|MCiJ}X*xPvHc>t2Hi&uyYXSY20B9DOw%vFmah5 z>?pz;5+r<6Yitjev{^JJ&%0m*(K%)>&!4s5^C~B7%;6+Z7ogZR0Qm;2JlcUinY_C` zJZ^}O4L0OGAK+Ej`%A)#VvSDwBx}9BYSh-O&c(S|pCLQ|T#;mgJq7B}unsRFN}(LzZ9@x?z#0`d zUQtX$h@xsAp(lQN%yCH{$WW-|1({C{f<0==@(so!03Umrj(H^Hcclj% z$B_V!F^nN0mjTjRUYc68;jud-dn-|zgr)jxYpRDFLM^*x21Qo^nsE+Bj58k`R%R>Y z)HB7spZ7x;_GY2QSarJ}D?1*`^sb-Clf87w#Xq_4t7xSZX3h090mJ=@GNw{xminn) zDk;@FAK8d=;)8Sh9x+Q=)H1?&rSZ!h9c%R}-xnj3sy-^4^+hyD7sywd2pE7a%2-yLwVViAA;C@(Etu3$`^M zjORjN(mq2Ued?1nAEe32W!oQ=i|sM%LFuj{<^tFYTgL@PIBKdsa8^AX}uAJw() zNH_M5IHQW7$i94@3%I56vA?(y+mJ%5J&`hwPRdk-zCzRFUX#yHLLY~E^!8Vn9pAtw zBmm=p?nA~42aK2$89DaW?Z%^*nSkW!p~B&-WCcaQZ%((AAQ@%UGldhRNEc%1}BQuwMw{CE~x zTj-2Rs7v-|L|1>y3*G?h`z%eca-lfSY&P5U@pnXeTq_ma#e(>XVif?u45892=j-`brdRUuK8lr+?FR=^pDXtc4zRSDRc7cC+%v z7GXY|^sBwFqp0c&3?8<4*`8^4xqW@#tE&XAM`FUXHj$`lV z^-utdW#_Mc$Bop&o9%M5IjJ4b*mRJz@lKyt_z%nC~UA9_?wg1ox^uF z?d(p(2b)lP5@_yj8E;}Oq~wekC6w?fESyC4*4(aYiv^9Tvl{J=3KV@AG>6mM#0Xe8%b2I*!65@GTk{(a+a*>a-h!t|OiZFnk7`?NAc+ z=T$$Y#@}U*Jdp}_EA>5&M~$ANE$2cB-q8z%<)>8=NLH;-r7*6z6xv`0&2O?LN;vd= z7~YM1vckn;)b~nM+*i$-^>lU>JU^}ORmu?}bJVx;b5Y^ws*zkO(rK6D35zO5iC+O= z!*eP5q}#o6sv|htNeQ~NVDz~}Ojmnj%d0@}K(1ArprD+vJ9tzy!F4eAbfS|;1iFk4 zjr5cn%tgm0lGbY82(K;JK2ST&sO_oBQRzsmxxG?u&msm=0Cj_8BTnmd^ zoV7a)8qJUaQzFq^ze|FyV19pZsRt{?65)%1{636zde)r}SBG5~yS-joISI>aD%Vt6 zxq#Q(t7C&f9M3SGRBt2emL*&I6kwdQtA?j_!sA;~RiA@W7QD>YvuV)|xPuv>Qm7 zNiKi^+hpsx?T!Xs<8SN?*J^B5a;XzG_-2U?DSx3jZuc<@XAUE;Ww<1~w-?~qa3^yy zKQ*BNYdZ$1n4!Kcrn!r0mJq(LvfEuG*xqZB6tHAtfzf((;$HR4bYoAcuqJ-|a|YRC z;g{3|4q*B+3zAD=>ABOOwp$0YJhQluDASaqJF3Nw57B4RHUWf2^pL~{&vN6r`nnDK{WO#xQLPCNM*mBR}k}p5$FJnFG2mEAy z>QbKIVlU@UDhaH{L^We1=HlpTS!yL$@^!AbCRB-G2dgbw_4CcJM=Ui(xYMT=_#nn) zc=e~II{X=K6sFjz^*=12-XXQMhu#}P*&N7P1mfAGss^b(1ElK>h?8sd2ISgjl@qTb zn^S$vmAHllP3{JxK>wCcu0)F4%1$fil=ex(eH2Z%zaDfQ*&(gL?Xk5m4CUH^=}Sq9 zfADtm`gi&{+oavTA%H_mAbFjxC=qHA{J>J+Z|>)n_c>MQ@w! zhT(KRE2ESeO_nYzK(yeFoE-ST5OcTqoV@ygY+{^}`X2^%SpSuQ9TsNx|1vRn_Rk`h z&&?j;t;Lfe+O0SM?0uk~H@MdQs?R9}WoP7r(R^J)T|?i;BmR#BvDGB8(I0nZ4(?pq zhj8Ho&tDR9K;&-fDy$SFL4!7ZQeDc zA?F;iz@2EeL1Tu&>~S_>eM8pZyfNnGOkmAijNzAf3SiapjMi8YHwhu4KyQd4i;jNE z%J>bzx?HPdv%*S$1K2B&+mj~15a_Foh>VeWW~LeRT$n?w>PN8DKFyPA92fSG#j+5t zTajidCgIK%>|?}T{N55YV+_7Wb$VJxH=|f4i2RQW!3w<`G;MxQ8J|*#_Qg;9W(h-T z&CJ?LUTaoi_a2&v2% z-pe)=%#^4Y1g9#deAIhxG%mP$X|wHK7hxGsfwK=_oe4%(4hF9WY3U6Wd8tC0s|MqU z70@-&XK_eQFjq)Via^2wpFvT=N!T#W=#8Fz86$aBe`wIA49my!3v(3VfhTo*RN9$yzvN79vV4QS)L<8mVNq>!P!Yb1 zbwY;-kj6+eQd`nC&R#<7 z>IgPqz&f_1T3XBYs@I9(H-MLBF$MW4K)h;s0`pDg!X{iyCBPS^SCth+UNbN{Nek(l0;qp7z#luWr_d4{q~*-Q5)dE*Pm~7@ z($Z+UdH(^j$=693bro3f3U!4syiB;c3%sVlB1M3$McU@Y$Uo#yaIq5*xiq{36IslrRGcbF>5*J7dW%H!vo{O9fHFu_k(5}JxyZz~ToFxDfs&(x zEdggR-zZ(T7ijt|h)YO1GUOJ#fd-4M+CW~J_V_$8$JmvQszA%rA_fb+PdG3+TurP< zRU}9ieLf@F?62FTG#>M>B5!AldG~fnaVDk8@^;yXy3C~28irtHh#DQv>1F_nDh{+5 z!}Q%j0N>W z$D$`fno3pjG=!RZ2oKOn6GV}uNY(5uNBlQ^v$5t`&P`38)XN*H zCU&tHC{;%-Q}w%lnx~}#%(A=#HcK*uiL0|myd1>ageQeU$fj`3eHq4zLhcL$x0Z}? zp?}Nxu7j&{6oQVbGF) zTPQ++^_t=_h~P3wrky)T%Id)%V=bn|#Nqd%qg4g&k}TQcuziUTq$QZJU&=&w<;7UU z{K7u#%s6(VS7W1O#aXgVpogrz475CGD1I^J$UP}qN?ezaF|R^zI2WA#hym{j%zjUrsj69aWqJlu}ylpi!rVG3LJa+KE zt&{isc1x;Kre?ma6BCr6&hh!GePUz|KU6iX$R&Px6{;<4L+PKbNNkSclQ}sJUlp21 zGMdFK^Mm!X!VUdo;hu1m9K8wMb6Eo;MQ zysI0V>VuKa!-MO`4av3aS+`qs$h5xW(>Y%B*O_fVA$-zfm2dKdHW$J4Iao_kCcm*1 zzQ_bxB4YX_H+Ok@_*XtHg(+qeAIlj*8ias&9bZakkj3gr(Wp8~x>t5ASDL~K*G9tH z5$dU${Z9PESt}IAfc;+Dq=O}nfVr}x*1Y=0Y%8yMB0jfyg9grBku&=RS1#*cTd+oL zF&-R3(;sx>PIg9lwH0M+jcxE;-`SaKm+2T#x}oEr90pJ5 za^iR;%$3aLo>*Fy;!uR{Nz>bG)h4U8J|4JxvvVrRsV)aA<>^68r8oU*goBw-FLUi( z5=wS~`zF~sTyb8mYe10{bmtVe@n+k!84#c&+g(X;Nr2hV^iJ_j;SvmM-|Cspe|ewd z^2O}n!ymEEp{+f08pE_>0rPRd$1`#3=-Rx^5wm-e;ILsj$|q*3q`z!bUrm9_Vf|!& zjHk+o-cZuv@%+!0y5Mi2x}+e#rksfswVBoV9>!gIUQp!%injL>it&Y#CtZ0z9X`(4 z$qS#0jP|gGzg8zW(;S3j`hxXW)qnS#m_F^hpDwHI?aVW!18!$^yW4a(TBF?VA69+) zJpbBuzYRHVt{U}8~r-Fr|xi7_)wb{LMc^mfERG-v`*iu z^AqKW>3lS5E}b4nBUL~2M!?DPbsYLeRU6Y8?rP#1hJ08U4kK8&+FB=dS!&5&4Csms znrW$W)Z(IWA8(vJEuFRfG^VdEF+EwIf5=|F51eWfu&9m9k^QO-ui!B{r@>}ISrPc` ze1E!@c^is;z=qQO{s~N^CF1w5XgzO%6vXoWCMQ>f!0J}u8B^n@4QoLj6*(B{%_Sw* z)V8KX-2Fa{F!_pupA(RrYQ$d?cL5j)*jC=^E_N$bTP-hwd-;wzd{*4+AFbF&vM z*L?SC`JAF1x;($*OF0Sq*4ueuCn_;_H|o-H^E~-DIV}|-;}{i}+)81V#NWbz_^V_2 zT8hmBh`&$B?F3#=7C8q*R(zZ$WS##+CADcL4cY0snNzw6V?CXrJ&v5 z+Ce$roocL3SN%#gRPTeUgfF<5na6r%8OQqi&?1OD7Oj!kSS1I1yQbq#G>qG;V`*8R|I3yE=M zt%6i2SZI@~A7pDESVuaN!QH}D6~;NJV@oGJpftYq!b8EUdZ>0M%QVYe=BbkV!{)3W z>-|9U2i2hYd_W6jL(4OBUzbg(os0+9%DuecDfC8tCc!TwVMpi`I)wxSt%v9AjNMbb z6uvHrCf7b~Kf*@|Q++LSCZ#v3We9cZDPVZAZ0D~}#4gQnVVTHtiMYGx@4_@n+&O0X zq=1#98sW7vUS`80Uh$3KXWdU$tb3|D-{4hH!L`XM|_TO%y`T>d`|2 zbPkFTf8eK!Ok}}cpG?Jpq_DumX#(n-mmf~5r3Tdk}xy$j^Wp1b!F1ry2UGMGP)i0 z#NcyrxjY-~}Cb^K$lheE2l{ zwbUaneIMuUNcnF2`-?HQH3JXeBzeX%>$-^L<;J;Y7r?3wM@43mHQPw~Fu9|`Hspx^ zF2moWEk!{pp8C-5CphGP#smMc;*K^@B^bkMdaeAMH4(#JdA$lt8JS7oK}>Jq!W4&X z+S8cdCI|LzX8b0$;@Dxixkc(;-7efts0#kLk2C6aV@eWV@Z5qvcbmzr%s=235v#w7 z-ww&er)4)ptOq~KK=TZ{+5*M=VvNLm8FTW^5DZKVgU=eAdI{>;z2Lb2JxTvujL`Os*T#>RMr-w`yE5(ze}-5$6+KPx zPs%Nl(JtL~*&!XbC3yx+T7~YFq{DQ#=UZb0mc_%6wL?Z;-L&9FWe=`?BSg8RxwLO@ zMg=!qSdzFU+*%h0)^*aw5t`nRoB}FUS5cHiMs*qwAMry2uT0jgWNNy;C-akGB-n+v zKQ2J<$W(aTxq0u%V$hX!%Sx5+K5P=kJ^+=4KEB~*=TL{%6;#Gl2%a~o@_^=g?&TfJ|S+LU3ackoU)F*`$Fx`rFd>|VLIDty}6v z9ejGwDMbyYeG(@H+kS+i={DAwF{E!Z*~%=~!V}MSgDEj@q5W9BCb0f-FPzTCKFCRq zCG{fnwH6^HdI;+(yk8-_!sD|tP12}@o;5w*%qOJuJF~1WH^$_N#^eJSA*i_tw`;x+ z^8}C;VQC(346fW2kIaVGpm^y+C;f~ zF9F?75DBNDZKa9yL=2>Uja$LNXz+~kiU{?>35%xNkpR*Yi_)e~)Ode&8`ne~3@ z73ipg)kADmzYAB3!W5+hnUgS?>76XbCU=RWCRoGISTy=~$&&jH9W3%KFuyQM0$FPc) zlo%vT@z%juFuPqxnboffEC8Kb>Pr473FOJ;w2^M#jvUp-dfOY_KH2U@GG?$ZZdEFo zY^!+slau(!H^f2CeKu+*zN+vbZOfW*tb8Q+cq0@#NN{xN&A1%li->V{>1`%PDXa_5 zKCV&HfeJUFTK#^6hqmt`TYVc9A*#riec0s}iF|CW_>Dea43i6&S_9v9X(1+P>gdAS zO5ZZJcHK$b0J~Jspb&*6!CPl>X#8z38p%F44NS+x=eFqG1B$6gp?$f_=hkId`e^^; zxjn4S@S`^0bmyGkNeZIu&)Fa)G>N!jMi!N{6iGd;TymCVG>jmM6nhZ%5DF+SECGKQ z?vNAMepxG-ge4MJMpmRiHS1PcWOGcL>pG!L%_^$eJGM>gxUL^7Av@&j94O~u?fdn2 z^t_}zvX}SyH2qZ74Yan`_r*8S%3N$yZ?n7Q-*1&$Sx)1i^!lcv3{L|oTXPe6WVMCQ z4Yg?Hq0$BY(RE2S#$v1-Yfk>tV!CNEg@4d4uup74u`<|1|Y~y9dRdo*IWjkvq_ktirsy0x^(nn!bn;k@y+HJhs*oqH0^LY1o zfOihAF^%yE)nM2(L z8`g?WK{C==x|9xaVR=&L&NS{d2Keh>DzO`$oK^W|5#OuIO1fIAo^F20|@8A%jL z%ajch6(Cc;#EWm)0L8xwki5+IbGBKW>A3MN7cd-hSlfQYsGGkZ+(E?>hLy&%8x8@t zJ*@Q{=n?Vq?uc|TJGoD3l>GAJT8{aNnt81ktc?zd{2(99u=LRfcE!><$GJ)eKOdq1 z@Z@c>M}GOFxf_@G1nZFPi2U!y3hTcVmx!5(mGM6rD_?8m*4UA{AJxm+ROHDa5CKFi zu80?`+4q0swYO;Tv7(x}eo{&l-CC4>b`jld_ZOHVnNZZpDZTO21#BR~8kiHBd4%l? z@S=)-NHk<_oR|Ju`Nc5`S4b&Fm7}{cC5kshn?si=L7S~>TYbdVrJ?`M{(4{)R z_V<^wck3CkjE3_`ysv$mS%QHZM;glza_Ra`r_aPnFbeX)ypXN{-UH#?LMP=NVpQD9 zLz;U21sPQKeMYz<@CNGJU?7!<8s-^7ED41_huiVE9_~c%PfjCB%QgZ8F--w`2ys>` zdSVxHiFfWs9>yJn6{qtw;~%6#AtFEcaKwkCaw{=C+o0{Rj=u4^daiN`9WYe-H+4>- zip2aJpmRvt9^Cn$Pg`Ttj))kV$k&rKbrU8f0Y9i*;iDigKeNZAGb;~^X2YB{sS@Zg zP}q;W#mx|nh)jv$wa8Y4P z`1{?_NP{cyZ5)}9M84z`#EI>yooK{d?g}tfNDNe6^ zKR$Y|tHf<9EB71^A^M7Rwf8{RNCXS~_`C7*Av}Pm=xRbiCJt|iVs=EuAZS*UNE8ba z+r$_+n_y_~72diNZQ5YExfuW9SXs67u&*RqngJ3xGj}zoK@n2-`tkDj4$QC}dDq7N zGfGdN7TeHS81qF~pm$$@4{4T|XiEvFA9tXywUcVhrsLfykSXD=@r^8d>Cw~q=Y;*^ zu!wIB!R76XUytH+l=S=Lyu?CtYe&sO;f9}b%}28ugZ+c&SH)_n*A7kxFelZMGK(Li2#Re}Hn~E_Y%(9nZ1j9N%`P4fUi$Lc z=+`hlS$%}ri)>_(>yuYrb#z_x4)rG1&fdGL^(Z53L_ABMH}S2(6G~D}E6NtE7v!34 zaY-&_gI8h^vo?=IaB0of&tc`!ik54?ZyngFu zxSQ!m`KCCLD3t{MeFKkAjm8WdB#^W?G!e>hNM#+N7GxVo6|SM*CKH*s0hK-sI%~rh zbep!7FoCr{4N{sGX{t1|m=(nYMe?kPuS= zW^`95ULMLklXJ>4)CES~*eq=>a@m6&yqCXi?SEyH{w@qb-9kQVjs>}FrsVJn*0$}i z|3U2m**j%pP6wN@LqvL;W}MDx`%5=FGnohP=L{(QJ`I+_oC)qn02<;7d9mV{t^#Rc zODf3OK|mWsZ`fI|?a!{qkMjk{{-`nly2?qAw1n$;8L%;y#kSMdnM9swq0N^0G2x#odof#WP z8YA5zHW{Rz9kk(ry0q z^?pO=LvW2T*YjCZZmm;_62*^6OwPUTzf1Zm@zM*sVi!n;bQJaQ@E zj;5;T1kFPispwF%VqIH@;gy}E!ECHM)R3Ikdj@Kxbn&VP)!|0@D#KWU^b<_hwba`0 zylc|a5yvX%wYvDR1R0`jD-nlkD0au#yu77vF*Bs^w!KYrKOi|a8 z-=QFoM`EDTW3#K)>*xgqhE_+^GqRykj9V?W?Ei{R&O?ry`gNZsjrIN496`NXP+_$+?cJ|eT^1(#V~&lzg8wE8n_ zJrOe?m+dXGeDtQH8^wWL6`V6wNnYu%-2A5lSiksEfJi;)a6J;c96F~7o)QFtW8rBp z7qTJ>Bzlm@u}SiFyvwYT!|>{fb>H-=F9lCft5iiFF)=>L6bOeLAE!x{UKZaQSu2Up zu|bAv^PaIU+YWc>*^mA`d4VJ$c{h^$AL=+MWYj!Tldt}McLEoF!F~UOh4LTLZmD=W zm@;T67+IMbyD%ub8oB&)E@f+IZpxr;Y4VkQi-nV&LDJOH+`{E65f?jyh`o)yld^-M zu_=S7shg#-sf3fECxfu1i}QC=ClPyF2YWkHI~N$vuV4Sk;q~3n$=3NRyVrj$K*agK zFgX)3{R6n#+ByFlrSDFrCYHu7_D)31{QUp#Il*9)xgG5G!N ztgk|p7b_U#fc4aYzh85Nu~g-lg9F{-Z5Qji$oB4>udQQW zS7bo93hjMP#1}2c>W*mCsNhpIw`Z4D{KGv%+UG_z(1k-`-2!qCz5{}E-?TJa02?tt&>ws;>8BAf|j;|{!Z*$LNcJAw*pTHq6u{adjz`$ zI`QH1BgK=(A1M>NVDllzQ!v`D=TtJOZl4P<0! zvCDpd6BgW5hMvY#aLmU9%mSzG$4`v!AOW{PjE)!asns@UP)~KEE#!G-Wp>bC zXqV-jn^6irP8y#l30{@6sv(m|ztD~!i z{3|*@@C=>O^SbCaEND7F&lC>~s?jR&7y56y8z@P%W0!GaK1$_lGsJY~{OgLpcwnBN`L0EJwbn7-Y7*J0@N~*7Y zR<=sSmxO`tkPa~;M}9#!h5X3MU6@}znaE&YInYn2|IG}sr9k}!l{<;5V~EbSv-+XN z2g7S<%9HAq!^U=R!PM3BX|f>^cG-9qICzXTZi{@*6bbk&Y`ck;5WQVJbRX6oy=f=o zS^Par&7qe$!BP1TM%5OYa%A_?B@Yn!m4J@^=girr;T;woSHW1>G#lMVx{pq0f8nDE z1!)Sxy*Qi~DYbgv!QO0=r)u3IJCOvV$>kq4_zIK5TEDf@snS=qhHKf;8VdW5CRBA1 z?C=%BM8}=5zxT<-pf|9Uj8gMJ9r)0zS=RWeY`xm30B_R=$SAr+A|Gz>*I9W;WrH9O z_nC|h)aA#w3x6+L_Xv(VTKaJij)q&Ko=_|{COs1b9`W^&{L9OYZ}rANbL#DvozZ}; z2aELmdGS?J?Xxq)95 z|6nTo2miDG_UKoV5N1%8Gjz5lV*SUWP-6JMFeYIBF(&>8tKeTX8(98lvjK*Q?f+yq z5HYc_{AW+OjTy&G4YYur^=RqqhTmd;hS-x(++d|K-4H$1kt<1lyJPiYjp`sA`)!F( z+zd_`@cK^)2}|3qeSk#V&9#8U6AOlcm_Wr7gJ1(ppuS*i!15y1^_HKfr>C#4E5i0k zS5MFMdM$E#zIE{C=4KYLhZhyO40f$PGjIfnNCf1cLjW8oGmuC`&{w`2ytZpezbDQQ z%Kzhim=&lo_Fs_yJ3UUK$E1t-nJX@>n=n!nC=+!zI@2#K{~2R#^#HH$%-mWp>lgBX zVjCst^3UOB+hM|+7>FMVB5iDKLZ@IhN%;@r?g6#MHcmX_hB&kq?>%n(x!E8FO>lqR z>m0o(mRd?Ivp@{8twr|Egf=7&y@9pzVLFKrZgoj9=7fbvwTfYILW0*y5MMO@YYqNy zFZpLv2xKT_JZClA`tE_uAzjbU{h1hH5ugOEWPzWo)MaNjD73V2x}G8WI!d|+=*o%& z6ZpERQu=pVFK*XBV_#Rn9h9tln`-$6pr_PlB|Mi%8tXk$62fMW zFghY;k+;oC#w2JGwyq2@s30;6mUOtNX0SCE|EdzWZ3#u>gv0y_(uaL3iETgycA66g zu@|S!8V~>{h4^(&ofD=L4-r(F@51uI*Xt&;(yu-QNtsMsV*-)%@E89901S~62^O2s zg8#!B$aRYqFoLEq=fzr5 zD)7DE4BHz0Q`QWJ`o_u}WGg#NCl{hQGYk!KdGFtZ`d=3~2gXui{V%5lVLbyvsF8S( zFCv0rcE8deeZl*glQ`;yB4@+L4|ahd#ntex@a-SmIblvY86}Q@0Ft@yn?p7xg8ND- zxcfKE24}^x|0a3=vFrXTlK;Q^`TwDCXf}-RMv~Hp?^<*BOmE5D_a31=0f0?oQWHn_ zkf25wND8Ozr^17Kqt`>zy}qu1M(h&t6}QOi`h2xerB$d)XKc$4%aLSDgGiF4FbHh7 zd>p8>up&r}cCHif>kt`i!8awhqQL7tB`@;eo$dVKQi0Re*vANgg_3;fgWM@;f@1Rvj9vvdp`@J-s<;M=?O-U=_XWUA0qiJCd7epRJUN28>kRFwD)FL=0uYQNh zJ`v|yW2|LA_PPjcvN87%9aBs#o<7C-KF!q@3b`SB2eRqLzFsIO3dv_u+#1{uIS59O zqT0?05RY|}yg!J^V~459^@fBDAhavz?%|D)-@Pq7-PRE?b_KuB0Mf>j*HV)mwgZ*abgK5 zf?zylB69pMd?G|2P0oOhS-E~eBkxzRx*pv%LIa)_f!@u*lempB)rlp`=d1_c^oFrk z!D@ET4d>PvPu;tS4_WO@u)4jtjp?DHbe9~y3K!__%tfAi()B?^@i}~&>_Ml9rlP25 z6*elqPpv|m9odg7W`aiTOXTZb!a+u9dIUeW@0O+|kuF|{p$jewFDl$Uu-Jd7RAGhS zaYW5`$;)&sTx*7$1(kj$cE>qe)xo%d?;~J1BjP3zw3h*|APTeqGm^s=?NE;>bmd?kmY`*28k7mL z2{}(QNu21w?I&n}?iEv>t4NCthLYGzWPC{2j*;YVb z`ybXnc1xHKaEoGN#KEq%PSXau-8dFUzhGq`RM*r~KGvIEEu}TUoOx{_=J|!;3mGU% zJ(=4JP&d`~Ze~oDP!zwDHqHbTM*i6b&f9B~yEL6b{2f^44?Ui0!u>szlZ2FL^?C6_z@Lghv1hH)99WPTZnUxOJ))zaZpj6#93X zvD5{WvXbQsln55xys;km+7p++w6h_GLAS1_;APEvF0nH*xm{zXiF3q`o?Y7;+_$z& z1q!(I(w7bNW=4er8_#U@9_NzdUum=V6=Q*!Rn6Lvhr9-onmmk1&RuO`%TxGR23uy% zzG|;5nbwp`9c^w8<1p0>!ggQ7af`Y-m?4d?QmP+2ahDCrN~S9{K>p7M0k;!er2j#Y z{)c#W{}(R>|9=``WM*ahPl;nLHf+DEEMY@lo3EfF_d~Fw^ifEvF{59OA%Q#0ZA#26qfpabo$v^M03AXBv8?8+xDykhVv0v*eo-UQM-C zIEb1FQUC~$2m};L5CrfAdcgyb1iwy!|Lq`4Ymitm3&D}^mZ3mYNVc%<#A8*u0^D~U z^X7}K5aS1JNfKYGs8v(BtcUhUnPgBng%SJ9of+Vpj>?D01y+c(^|N(9C1}Y(9<99=ZCt+hfE1GHQAAz zptv4yX}W16uK6e5wJhK-{o&D3{Du7hJYl2D7WTDDo|_hHU}AD2-Xf0wpIy&HN`j`j z0_e2YN6d|9M9_KpsBZ?J8@~1#JdNQ>4ok*2zzV)gZ z@ctMZcNpTtOiN&eMy89ls*Tpf|FA3Rne5dV?viKnTL3yXkU$9Z1Pyye6{;3G#L8}+ zyb2b$45ato>Zcr}cJP`30cwEHX7wDCN(X>s28e&QqXMEE6o2VO3ugiDW(k~Ke0hKX z8^8fgT!(Tn48RAl$#$u71Ov(*xE^AXOP2$RWPqBMb+0^HUaS2D)>@NRj%a{?Ec)Ef z$wN6*Lv{jEIL!RvK!2lS%gJldgnkiuI|7}%bFLujrTFuvIpv8L$pucPWo?TH!~$2* zgppcnhxn@No9nRU?Q5^Qhql&A#fM{a0r#;!5|V_Vzx2p)=l9l9o$SO^-`Y!3s0h+{ z{cN$ooN@R}1=GP02HOV0G|US`P)DGRJAK}6cGx%@CC8%I+Dkq5{k;@AP!u`-_xq}c zau?a4{aV=FBT)XB!9nbz@#HbEr_-Vn9hcRBc=~aelB}S2Gkw@A@>ZPxdaZ>2!SbQ+ z1?;N^M7mq!eTBfJl^+?s{9n|sdj)$30b^u@7td9bUmT!Z`-BD$@e&D;%hOqUHs$}i z6md4O*v;)I(Dc=r4344lRE0sDiT_UdUkg zi9&~pU~qUC-#%Kka_mv$2YqEjCy(_@N7~MWmCJlKm$Bsdx|^G;Woi6(+rnRLoA*lY zm=nW;d;+?t-;P!|nj`WDK20r&h~Rwnak<{}n4yGz6*}P4p)ev0P?kEr;iaHE+!1dZ z#i5m7?sLh(Y^uPcfL1;D)Rjphe*-xTQ+_c0T3@ zMJ<)+vpdO|b6^-^kt)l>6?VCv#6@E{I6+HH4B06=y=vWPoHSvz-Y~y`6{u&b@aIyR z;GHi}oOlKZGe4;nsn`^+>wi?F+_9AJm2E3_m_W=nz7l%sdIJn21PMgPPV7C&*YiUL z7@MF4fdmIwHG?DjeLF<`^EAnS<8&hZ)m$ByD#z@EcC;@E#q6xmJGS$H_yQrDA>S%W z-N1mHN5b;AUK62Dz?`KXjIUd=tssh_r>gPurg|hN)*l{F2}tmopSXcOpG!#BmLdA$ zlqoa% z7=Zir$3r|n9d9129#rS4(EWt9G*~7W*=K{(@rI*f>?sA4)h#(GB|KLv%?;2m(UdQ_ za!6jlnv&+^RMA$a)8G1Ede;$1eYn`FTy^vF>2BYo=M2F-iLeGaNO3H%j ze_N3pN+B!!f2e!MAYB3_O}Kg5wyo2)ZQHhO>$Gj#wolu(ZQI_yGqExE?%vs$@8=is zMn?Urx2h7AmHFh8-juW1n)Y$wu0QAGTY6aIEZk&hY|1^@(_Yib-gk3W<^&l)c(Hf_ zZbt_qMP+L~j+-{Jl4+M;-iTG6)wLJXI;ziN8hV8LJ2zXa(%QBK!Xt zU;i`SC-mq)@+vcxJ7EItL2_*;l;yka&zXaVazV1Al!~BH3;6NtDecmLxPi)bM$4bX zA)_mEzyR8V^4w;43ErpKpE7~e5(fT1UK{`QE*TgAq9qYm+{f=B!~gV{Z9%DF7VwkS z(`n@W3^pL>A+5bDVx<`IWc<;W%Ih}L4J3*8WuxP~;3rgqE#!ODu%_qy1+E9O$B2># zaSOv`3`;&iBX=a$^WSxbB1MAE?yc5=V&TY~foW z^=gq3TkOqlGOkovSmXYq?OHj$o`nDSRm$(PEw$#nx?95xsH+O6_ntkp%8U!`=ohgu;K^vW z@p3qUoRRfC1w`qQ?cBu9zv4tFRE|PDJwX!)%Z_Kmh4Mj!54mG#0}9AnF<( zfT)9sZj)@W2>kHD1OD^(vHXGc7?8~UZ<0#(|C)vVf7PP@k$e9Cq881@%<|6=z{|~D z`#ll#UwSuk0iUY-gbTu$5)k72r+rrhS@1)cmdI7`5%BNg7xy2nZFZTo0@=&gEkKvI zUOadJdw<;_0O&zN3H}e^S1;rL{q+9+etcZw2ta%N{_c4Mj1@=kG@4seLu(4Ivvupn zln6-6oj7^C5hObeG;J+-tUCu58b)vm3<77&sPFX3jI;VC`X80BMT3(gNO_HvwPt4^ zzod|Q9)otJv1w91Xuu2hU{cMP-yjESrq*Uo&J%<6!`@%7)79VK-=F7jWV5f#iGa*7 z#sCK3@PhwatYjpl_)*{RU|NI!oWbC~7dxj*uYW#2bof}#03e$P)_;tMo~csc7*9tf z_d$*&O?0#7$p&<6P|oD!VcI;M^gE)16E8Gx9fN5s-LhCrPW-V!$ z1#OzWKSZ;0g{B^lo1M4PgFCp&U0ji*uFS&M3l<2w3v+5Ok63YQ< zB=D1NCa?|uMYtZDgoED&W6sBCgax!BgyleM!G{H8VJ-NX6`Y8VPZ}J&pV~nS)GL?< z0Ayew_686qsLmVVjz$TY~`4m{`Wk zX9q1UV+v3d!q5aB8kx6SY}f}LiZONvHG6Z`m7xY~32PkTDD(yp)13FgPt{2Y-UDfU zf=~{BBZt*~&SUy~rN7NvWsXS(;HFtI9?4)v8b8&|!^88_ZwS)Xd>_895(Wq<*|HTw z2ZU?N19e;tM0)|GcPbbMN7FME#OM*UK8f9UornNUjLsXiyb)pSk^8kU8{CNdbBhD; ze&|3tTTv~vu)O#tP2k{Wf?G5oLPN3Bp@6;gOdDzal%NC9#^vxo7BL3~9!(I4UYnFB z#R$}AVCIxy?l(ujQ1qkVy$}Y!WBUR)Jx_Y4v_8^jOe873S(ZfFO=Wt=9AUrygSDBP z0;A3hUGmOKQg1&2Yq1Rg%Hf#+*~YD=*ahCUf85-NwcveH$@~1o%2~J4Ka_WqjKRT< zVCX5V*M#0aej9QEsDd@tuHbmxcYgzvrUZl=o@aS$Pn|k9tj!4=4r>e`i!lb!XK=FS zM4IiFFPH{ug3tC3?ePR(dDt@bywMZ;`2pE%d)Gk`6=2A51dAw_c90Y-Ly>bN0$Lf6 zbE*;lSVZm+OCccOx`p6UiT|9n*cAX4&e#Cbj~W3JZ3IIO(mQcMeh#2msDRZPU?A}E z8G?gdU+JO&0qGNMUL2_-=R617J*i@Cn<$M7umZ*Keh7Nc91o6uJ&n7lfv_1}O~kdy zaeHatNu6$A;+g-Wmm=dDBsn!tT3}jl)MR}Q0$|J9PiRUbxg2O^2*-sf_?k76&UBNQ zXT={UZmWCw2%0=B=hG`6;D;!P!6$_!QPT@-Cdh|lE%pr9XHeSFukMj0Ne38YFakE< z7hehU6EglQnEW?KpqaSehy~tbBF~bJ+l2VVFyeT*TF~OydXCm3)<*tbC3oLO-ERNk zW?Uq})t8s_n0x<-ZUAT({+}&*U60V`(@noYYJH&9!+${=|5y~f;QuGl^NZVZd1?0- zfAbZ9L`&W*sqqsPut9MBJsd6lkKqBZ%N%}>ay+NPue!rf^l>1e3;cTsvt2jQ%BlD}1Nd zPcgr>X8w1uQS9k^lI$&w!Ll4_U^&~?c<)jhdUr$vRqzlm>)C6Xx-#yfI)JOAOC}0_ zaudNnhwaYQ8IiAb{)(#i6$#6%AX3SJo9L-RFaO*7Hv_-&Ove>hze5^qwS& zktj6}`f5DAt0WR~+$+7X1#rwA#2Wl6yBQg~k)Y3MHUW?C6or0yWB|T0L5S6GkV@tK zIqV+B?B6_n@^jvCpVQO-J6~Y_9|7@M8UCfrv#261yUqvS`K)>|D?eJ#`K}!%DO^^% zAfeQT0846*PaZ}9EBx^u-5H@iJi{U5Sn5~Xk?o$wYRkoW;BVJ=6M_W%GCpD?jvHE= z&S05Yn(aT7Wio~^TB;Zf{V8tl>D6^`z(j_2a36}DW8XLXhh0X5v5(nVAR%ujSz_jA zDX5gpeaWI8csR-ODxvS)_@s3+u3dsrYZ8t4{v@%k^-)EJ6|+0+(CH%~Rp7Tb2VBVO#J8?V#=4irOz+|e)+<9f8)Ny%bj_oK_x|f@ zDxRQ)f?SmO@3Jf+dQgTouU>OcfW+})EY<6EDDj|V>GulR8vA6xtv~SUp)DF+1Lp=z zgJtpMVJaqOP}MlWaZ2S?bVp5Ci@$hVdoX_!g*MxY=qq!A-7mssV&>VCnzdQ=R4G!W zcF*qxC;}Isa?0q0jlR_oKDB#uBI~c2$K&+zIojw`M)DIovbtL)CFbGhb^M*uOA0IA z*Vc7sZ&+|x7g`t8osllBUi&THv~q_ttlUx1YCK$VM%DMeV$eiczI$nO3wsd>QR8sn zx{#59f(*?x+m2lAtoaHf%;|)k5JQWKhF)BeEqy%rN$8DB_B_93zm$$CBJCdB+9;Tr z9t0HgL3;j|{DuaDEGDJ10;ngbJT&&X8nUPPx`I&PQVzv$xuGU}{D>x`EosZr8_0sbw$}>`Pay=%zj2O#!hnjHTR9m!(27{;I~o5c{(@G@ z*v9k+{K>}p1E+v=baF7(w}y0EYf{~|U895d+18C4&V^Y%)~%y_G@j$Iw#{%0w2&Z} zQHrf4-faB#k+BNc{2@am%$2_An10^On(o?h1pr*a11HSyW>dQgm~PlP()r~V*9RG} zsxd8l&RQL?YJs~oyv~p&6^2g*lFBvFWvL!+p}qmWV`Aljo(UwJiLt4E8_(1bprKzY z_J?I(*W~jYDvCg?pcj)rI18mp+%JuThQ5jL>a8%XcPn)m?D@u@@&-@@VOAmqG2a#; zKoVjXHjhJ}Zm)N`=F+h4v_u@7U!wNci6%>$0}K=IWvT`yr7p~Xx%(LWqCxgY|K;q| zT2B-+f~IH2aA4<{@P6)Qk9VVU+_lHeLvYn3$-FD4ypAFK(l@~-|sjiNjQ=1&LMaz+F zrGmoq&rJqN7yDhS$a};n$bnvDe`lS))t_3%d61S8jlk#R48?X+miccot?>9D+f-i#qHYo+fr6_3tNo-&gdVX)Hjr zO?v@ctS=oOc%qJ$7I^mxV8pe`bY5NM=AMqTyUZcz=-vq@e-{ zjEM>ZQ^`-DB8u9o9~ALy;G*r0dpWHw`k5$lj-Zv`AdIPCgE{l9A!r*&UAjEria5@v zpfm{MG3biP+JX@fP2+LD~(}wMkxn53CDb6J%&xy~7E$&er$abSUU*%-2h#w5#qR z%=fjH5OBb322N~)zF4pXCgJ)|$N~^W?lQS_^X{C9Y;OemUJ)sqvMGb#8wx@|_PKRb z;fb|IN^asX8NQd%7h%Xs-uo&_;X@|0N`!j=ge)p%rcreMUSLx>~93l2~qfX1DE)}{gvgP7~cOkO#2_56?(z{9wm*>!uqdYm__aoYKqIv-(jhl^D1>D zxSn$s@fMa%9yl77HOl9exuI;iKr+yPgnt0^ar>|ZR1ksmgVFhp)cK7ZvddK(Wtu!R z7uIwvADde)FL^fl-@k0Z2G>fSJKwjyp|)T9Ry}KOTb6VzgG3{-#c$lWX4@yRSZnNZ zj+*r&DpciSQ);wMKT2REf>Nw+4WFa~aHb8(A_>)Q!Bq@~!$lnM9I3x2zK$8bKmyQj z@oHAH#SN`wuT^go+^~2_ryTHKh`@1skB#qnj=jgi zkMZRKMm!E)VyKryP<7N&DZwLs$PP)6zA0nM3g2`!J9cR`Oj;C4VDBKpFKa9N&pu;2 zcIINKh&7Zqkfev@No4U8ZtCR^{hZ!OJP0h-+0{Xw zqk+nEcIr;8Q86u2XOyZzAnt>DU8zc9sa|4#z>~OEzFn{8i}V?MYv{J|(=0-(Cx3UJ zlX;6+*2Koq5LJr365A$x9FF=!P`avnf3vpk4v>; z-Si=-3so~Y9&yCom9WCDOS;Ji8ixN9P)j5hK&V5gLn?ywG=RRRyvN+<507XFk&Z6< zSBCCSs9T_00z8t!p7kD%0mCf~eUe+u3le=`s`v!y5j-BEW0?DZf&oTdrW$`Gu?j-; zAEdf;JJKaYngNc!BsEzpd=|tEa8?7xx}X(_RwUd%WOXCKQwRgrTbe{$*teshe-J`M zKa2->FNRjcF9j~DBem%7B)>?%xO++Y(b~eTh`I|z6zUcpQ{r`Dy$=KBA4*SV4^Aqc zdJSI;C3HSd7WZr1yPgsPbNUJLx^Ir_ewf<5-8b^>OLWk>zK{}zGLa~@b~+K>e?1?) zvEoI-WzyLQRJnz@<#4~dT5E?UX&ZdPtOjY@y@>Kc3cFlCK*5~61JZKLWtu4o;)4u` z{Hby^2ym@%^+P%ou7=(djZLY4(Sm}QT4QoQa-lB352Ey80#X7bv08&-Zl`4|<8X+O zx0yNm8TYW@2VyuTXXOa=%@8uupA@%eR-1bgK{aALA+jOKif>>va15|a7h9ERHZEcp zXIs1TY9*bEtkWHe_F0ubPHg@`} zQP~#Y13{gzGA<55e%1hHb;SCx;Br5B`5~X%jhc{w<7_njvnRV039F_-7uWfuwd30H zK?09(3IeXdaaQoHv6#4lPcu^<9$;%H2mRvu^~<$-nZ?I7cT2&l3HPGeg%8bnuG_wf z4TNysU{9sWaBq>q->t#5+IH2XB{wv6W(VLp^>RnXp6Gf?v?jEsuk3Dom|{0tk+T}? z$q)1ndR5(Zn*KB?{11pURVWvq3RBDTL(m;A8`xm`M&#c38pq|AQz?^%gJs*KxfHoj zK!-mf?vcXB$yAJI7DA5W3hGJ94)DTz&PF?JFO>%GWghHyVS#KRvmm2$Yh`g&9fKO_ zuWLS6*X;*r0O?=GF=t>ZYVO^&9j6JZ&yUQT@@Nb{u%fl9+tYhxnd}^7GRCKqsWeWP z6ZDoe9T(b0vWN8%%2C}O>lcpeyX@)muIj5U56<@RG^T#f1S^Zu0uOd7AoIh6?A6I= zm@ZxK0QL?3^Q#q{BcM~soJE$UXP>uPKzTorUYN(j8J<-~hT7+B+KAGOXZhiqr( zEr%Dz327bVHYz8V(&PGPdVg&*Xq&cAluP=_GIgY-!A{&Y>~E8bVGDgnT9P@}wph=EXWr;EZCEG+o0ljNR9;&BOKDXfWVR_P%t=$d6Q&*Tx9)n_h5(U1*>Iy zOU4WKWjW$raguS?SqXt-Owm4ln&3rPYel0rP3l+dDlP9CVCfCT0wm;xwe)U zbUfhO^T^Kpe2r5{HZHOyA$;4No2#K@6rYnbk1hr(^h6s=$Q}n~PWtcJ8rXA(eDtX; zgk&BJ5SK_u+>EMm7^;X6^(!t0RZf2v5QUE;^IjA&rO6uHjd4okSyx@5YPvE-QF)Ye{r zT7WZEu?I12F<~A~X!Y+P$+LJ@jr^TwAjq#bDLF^qN#Wr+B{GHE3W3aey~G(R zvXA=}IYi`e_}DUVl`Gd_BPlU^8m}-OtN2ZH;1;>Zb3ikvi|vxmU|z9L=GdYuY%7+_ zZYk?y?ymT}g_|1;=ypyE+gFI>?o^#ltMwOeogHkwjS6htz55AZ@A1n4FiOC3MpX)D z6afRUJw~6x?PPmgVu^0()J>Iv7|_gA-Z>x>>8OGIhz6dZqQ_Kc#v^S!RzVurDM4`4 zc>0|Da&IZ4&(jRhL&#Hfm{eG3%t)S759;x0IRYLpgyh!sp&Z@j)!8n9DDh^<)f5Z1 z2jgt&PSMuBW#`7!jWP>gq3X4Z(d`{96cI&p$Y# zaA&Ob9)M)HuP+hY=i%b@!f4ntnxT7cI3rhGHzHu`{L94}o_7`J5uE%^hd0s8h&N#n zPTH4y=x9I=a>!+8`QzcKt=y+UazIf*MZRqw@8e^icJb{Ux!2aWGT>sX*b)%71u4Hc zbz?2SHVUF)B6)f!zb9>WK7BYyY^$cnN`>+Fn(g*$$2Z~_5%E16UuI=_y5fx=3%}%4 zBxi%#m?fc7`mkRd3kzt;?6g=BT3IP*z&odlLc%NRY*+^3EH99 zl)(w5lw63{4m`N2PzAdBV^Mt1j9O<6x2r|NtrLvEr$@yFHadp`cd0mC0hIIR_S{AL z;4dV?{S|#)VJqwdn$5+6fMS?yHhzI4sR~1bZhFI{3;UMQ1gy1HePqr}WM-8P1F;y&$tE68z<=n+ovZSUsq8mCG zt3fimHpFDP_q!GS`D(YCEizMNP!Ogslc+*+^Vgzfl^c;*I!-*J?G{q`-I-i{sd z#q`h<_VBiFTqJ+u>aR5HX7o!hk35eD9qDk3*?{b8b|8J>Qe&C`iI&&eYzeQ|b3U3c z;>zi0rmA+cl)hg&?z3l+0H%v8v^@C0bo=M&Gz6LmznfC+N|)WRN2#&%OL57ZX;&lE{TY zqqE@0YIbrarK#w``K>U-?IKGFX+S&k?b%%2ZzWAjM;Ofg>ys`b);D9&t`>BVe)j;> z5Y~ppp>E-j4PL5~V_<$!FSr^e2AH6PsDj{{0EJx4Y1!P_oFj{zn~nN6&TxQu786;N zC+G)(7dhm2n}W48?$T;?MCTpf2^T!Wfr94FXb5upRuF-OqS<;FTKj{fqD{)JpY(^Y zhM!vKu)+kZ!(gB&Ms*@L2VQq1*zA6bT3MhhBREfoTtdBe$31;U_b#?__$nLPepUCH zM0^$tOWRFR=q5kpW2ycPR+n_aRb)*j_WL5&q$xYXAZ;XU5@{}+?@cxO3qqPcBFoFG;_nQ^kF?+mN zDC?i}`;WBFbiyo@8mX5@9?Zx7zWGeK{N6=>jpGu{La3oTOd=};?%|;Z#q~1g3jI-E z(ETxeItv|;p}W#R;2ON0%S+MY_sf+iD^M8GhV;AWN!yjU7Kq_(rRW!==XMY-$WKeb z^nms~+;UrDW-{d|jNFJIGqJJs1Zyef9pgi;aEg)>2f^Y@~b1`{BO7?yPxLXJjt7CXP0vGK9>i$c~pBO{zq|(lq2#x#%eb zusDo%2EpvDQtSK^Ce$i^2>7Fzq;%|c`n$X|3I`QHu*C;ykLHN2V-~$o56&Udg2_C-_qQO z#|PQM8mS~Gn+H7_Z@RO${`$gwddD!84%2VF)yHb?#rDdhzSy!?wDMOlj1KFIx>Vy> zSyw-TN|fcZ3<1%onsoO39T9`(9TyYCk?59s=snai6Z5pyBzO(uHcxSsRo9`2MjW0< zCMGEpFTijj+oz!|wiX`mR9sa=-AM9E9{MDxETeuKqna8BGpXCJ3@IPc?IZaYhRZ-e zkk#5qOGH3EyJ$c`v7@^Yr}V3!qHtrx8S2SGiRCq!0B-uOcH z`d$Mo{x%kuzTpGMYIv3pub)>02K+Pg4l@ymYsjLj*|z=zAp zL`!^N>u1BC!`2;eepxE6w)MPMnzIwMs$fNfRFz7)(?<-IGo>AMtF^78Op{GpcZ0-CaS_X!dKE}_CztxZ<#8` zRdGQj7eKQXb`{D`BCN%WM%no@M!h5_bUI_pXs3>O0IoZd)s94iKDCmURp~9(&l;&9 zQ-d~(_05ys{L6VL8k3jFXCL)_l~xwq;RP*5#Dsp8_lQ)Y*#gtoB~zSBy1C z{}NPD$)>^DR>!e(lJ&GUHFU?q2CZnOYl_@k$||IFvCiyRvkZw4dVw3p5w+PcyX2xh z#dRt`@b!H;gF~xKBS)xrT*B!h^`9z#YMw)MjM|N_TI^(J;xguOeksN)dVqp*{8c`VzM2!qufsi&_5I)V$t=TJDTyP2as=wg@yb1=X4JgyZxrG|{xznS=QlW4lLa zwJXU2<+=W3((jJoKr}0vAp;9Y#6Znp5{DFc^$jcI>2&k#Ufqvl#9E-M7N(_+krm&> z>>$~9^sqf#f#7R*ey87Z#B;rL*?eoU3pG?Bic}?@n$=JHDX<)lcJh__P`O)ITTx}( z_S{;JzN9S$DLvAc=2Lp88v7fZ2Bz{Dd&V--*HJ;g5@nW`ev^6;RGJNYn`F6iwRxV^ ztcUN9P%Cm)g^IZDN z`g1jH4?qijcz{}C5JcyuS_i@>ci_8PtAB$uXzz!!1E*H4Z8&zZfw8f1#ywSVzdNY4 zqp)oZ)KWTpBVAOWM{JhF@9zN>&2BACe zc_u>CK2uCXN#01JuA0XBTGuhW+;)zA`aqP^$Gz1k=}q%X^S+h6gV;dA#fc4WSIyI& zhGQRS`n+B*!<>t0bqmCkk%0dD>w&`&9$mUX-|B^T(R=x1bpx<1;IdKnzyv}S8juHMJ<5MOBR+jLuMhQGn|oWBCYrW5u=ROAs&Oya>;Ut zVo4AVv!#WZsg>yP6!>&B3|0k5_ly)q+5CF}r7BMaA|XrDpKAM)+Wr?fjHaCpNZ|jOQ)8WL|#66uDZ?UiC zyEloJ{EyZ~NuvB&2Uc#1FEXWr@FZ3H-c@gTq=sgLf% zUL$|&AQGGfIxs4yRj=`pzB2g z;!DG8A6F@}Kv84~|4U<^S zX;YQsOwcK${^K<=JxMY9jG2n*@SEnU;C5K?TAyczsU*|9130tKx_Y`)a8lJX^Ff#fU)(fDNBvC4WBWfWx-^tzq{A48LirguT& zZ4gIBj+i7`ULeEX)m6SD{q?xBd#uhzsr2$WW-`A~VUlFLxtva5aq4Kx2#Z}|GE5%Lg8a5tJRZA>RTiFw1IfxEGU#FtH{eI9^T|OGg<_M_;^RJy zR<gON&JgES6`TVCBGiph=b7R2!~;e)>vjnou8?T_ z>Z0ska`!45chpeGZ6mLUs)J!y z0o{(fyk38F%hNJAlj z@`>fL0>R=FKmZDe?NJ-`fJ^oGW$m!JWUkdQx?D8d<64`h7iKk^C%7b)W;q=e+B0N* zoqn}8cusR4a~^YUbB_xwRSBw5p&rZ0^PgsCR*Ax*pxu!m`oK_3dpdQ8(~4v2hJM3` zeTSlKw*rPaD(?MVU~7(kA6-$!Qb3$0)A_DH9M?9-LLeUe)N@eY&e0kLOGQ~7pnB#` z4J$0dry`D8ob6V@vgd8$cMu z;Kg{KPeAMtlo(sqye|ymUm*mdBPjvS_0Fe%`W4XmlH3U@deiwQQtpn#Ew5ce0P==Q zfp3I-58*Po99S=;W~iMe$ECm_DrkoumPl!*3eP zkU(~x`!JRFSk_%J^e$(>{ad(7Fj+N@5E=uZk%z6b(_8A;$BE_TYGmxAZ}FBS29oO4 zoIW+gT3s(H?2u(rp7tOB_HZ#D#EoIT8+)%0yNO=_C`Tz-UrJ+aX>Z!&%2$s%FL$+^Z|sR(ee=W7eh= zK+zoB;$@f*6G9hEwgftx8%1uJ3FaB3$3I#=QrF2&6+IwtDiwhYmsE1{7ESUN97b-a z6-yRX5|R;^9a%OM@ucCFNT6rf(baOl5rFphmSC9K=|alO{to_(fVRBtAXf?>CvUg% zJUqd?HB{@!P9RAZn?ejm2s&AZGUE)d*j$F)T-d3WV6k!IIx-fhhm6fO^6K|j#-oBV zI1QOxpYHO@mMo)uk$B@e{^Ic7;Ri;o$*u_2n1m9Q zf5Uj=(j=`QO7i&>b0S8>q6cC68%Z1BdZVs8@--wQqL?u;YNoTzI%_j$nrfyEJZff= zlT8UMplZieqd@$7Jgtz`U`j3pZ^LY6qvBX1Pry4>SJ;BNO;&0adxCxDG(?BV?9_VC z!f)n+U>a|a-~HYG^}{Dm@w zs$}(#?{q1r>AW8?{_FFsXsYbTTWpMuKyoqT`Nx2ZYlS`vIm>Q6QW^)*9&!a^9ZK|w zUXSM-qFu6g&kA-Kweljkf>Zce7+qd(YinSvwA6rS=goAcPF0u{t!xB+R86obj6;dv zi=o$Y$7eUrY&A0o6FBxVd;mBskLGP&BLt9eNQCU_e>p|2dolyFI)CODmvn#yWurV? z>C>@W>RzJJDeWR`^hHFOs`c?g45O0vOkq`Qf`xvyo1f0SZ#df7Tbb|91qpND@Cfr# zaDOwkBJt#IuNQcXMnXV_o6;bEeqye7$%b-32LN z{;@Uo#x829)s(m(R1}tCwNCR_X5)5q`MU6OL!IhLXRELHZUy7qu>|j-cvvh_JZ@88 zmf@FT&EG}3~-ReK^F9H{EI#L)~chg5C9*ZzehP~i&-ap?gwizvk_j- z9a#fT%<~HV*86sV-67@cWBHvlQK{PBZ5Y^GwMt{d*xb^*{;>ooN-Nc?McnQc(FJyY z`0#1fdPHm&yd$(DWaNy{01~87#1DrJ%=DZpn4D|gOp^bOoT0AW#l?dSItB2cp&k4) zQ1(4@((FW^A_M@W|0QbyXZV!VSXp~J9i9->13qYB&hx^AN+&B5@)p>W7La$=L)7IZ z73=GTN0Cg1AT`C3Vh&`;AR~lo_8XZNrmpgsc2lg0dlZp`-jHGbrn51&ytsN2W~3g*75e2#|Hs4Zl$j|sDVt<-uZRsJ z)9To{3#vZPW}3LEs%%TgI7Ft8tRN2DTJM&PwG>;e3qPi>9Lv~88_&xPX_iXz3%g3Z zTb}J<;05K)gkJI$Aid7d7K~&=cKyMJRNPr>P$!BocKE`fTNmuwbJx zwny(e#_bD@d$IR;DTlUqPc`EjQxAPWm*V~$dmRVssRaN%`Go-Rr#u(ZIgkErxspl4 z>MRI0VmSAqHwPN2t7Vq-4EUPL7^#er-tNQb@=pROil+$lvL+a9zOH78F4HIWtOPJQ z6TG(vuZwopu+YPuif{^oXQow(r)%YK$fXwu) z{|r4;j_I{Ul!qUB?rpa^l~`PXTZo zhY2sPTNR`M4Jr^7<{Ak04d0pmFfkZ7>N&o2W`I->@=D6MZ5wY3&|eP?(9`r_N79Vl zfe}TvbTqh2n#rw=Gx)ZympGRUq3=DY;{{0JROAyk?8WPGWUnUGfI3 zHnDqd9f2L2Ks0YMJPw0EOOLQN?^+`Gs|~fh2V|U|A9(0TTk+z1Ckf^gNOA9$sr*xs zsml`(j=fs=Dr5+F5MTQdne0*0qP`JQcQpIwr)RVHv!J?>M4XQw7cm+1XA~{JTf@26 zTLW^EKIEV0kC)UADLZJ-wlHm2vEG|H`$Y_MDzi3Rmsy{0u)IQDEgwm}nOe`QS#K>r z!g`-I#y6b&H@}o(J$FO3p$hW)ts}jb-!RHOqSaJ zjbZ)MUYP%}VKK4%%a#~JBRze6JtLz7XJ~t92&ZM2Cm04M0Ekr5@2mI4w}!CC5T<@O zj3K;wDc*xr-_V8;20A(~RFJru7ybiaK=?99Vsu$>`dT^$heQ=;Omy^f40Lq%V>BgH z<6_f9ax-Gf-{=||>F4C=80c!h*^Y`)jY-LlC|*dDjS7!QlL6S-A$wm()5=JaATe1m zNJv0c-rf!m4?V)#20dPdPhHYEAP>_>Fd+HM2Frwv%P1giUfoF`eZtzxAoWG`(Hov zzyS;ZdI$fFf&A0R;Q!b_nAw^Bg(EIV9YRgXc%7%;;V3kG>~v+u0oL5)FkU^~67V-< zIB7094aiv6XxBC8bnP|gNVFJv>wbJIv@vtKM)I1fLbHaquJ&|YO7*#Ki10~84PG## z<5Z@5&ZW=wu@5?^pSWDOCkla=#^ z$dQ2eKuCR=@)rtBqyNqFFhk0rAGO?LhE75NMK}5(n}c^3~e6uOK$nM0{hfMz=~GI3sTHknCy>Njnh&W z(y+I*H^VO>F^dqzeJs024~z31xGi3PMVO^gOf0O{J_g>%II_JiN3CVI24M|fFCSTbt3tbEI#X9hC}MY!P04a@rm^~A!&BFLnDE9HyGOp5s- z(d03-iCFmfooygkc(p3VsHdg^fvzrgZ2MrICD&Uzy3O@xACFGwwNq?DjreGgGl_uq z_K7s2AC+2?l9b=u!dK`^JKAG(ta)52i`yC-O>!7v76dA2HEj`c2}xM%6Qw@A(9(f0 zdt^i8`pCMfsVGK*Agk%BSY~qm3M&h0#sAfG|MpzwKToGQ0gE8 zkX^lv-9IdyA9?rofEERlNy00}$EWy9hUN!Q0b!+H$`Icj1f&ieFoo{M-}hr_-cl>+ zBRG@Zd3(E)c|ggb=q8rImTRmds6|hZD4X-E11{LL&9sXWE2f<3frgjP0K!nk+DI>|e z`FSL+(^V-3K@3@44;O*5Ka3+%EVx{poOumO18Ho6>JqvVLw@tftw=fZ!(dSXCfEAM z+yp*6HdXvM20X~6Q1ymZt|G%FWF|tz{A_572+GboDXwy|*bKCuJPh7ZIE>CwpYwC` z54S4aGl$Cu`=|%!=Ub?5J937e9cEM=yqVmQ<#J+S;!#Ad-?a)wLZ*Pkj&UgRO$OY^ zN(U*sn;|OY0TRr71g4p}aZt?R^BP=Iy}L1Jpc`yZcw`;}dMxe%E3r}CvBUCkFg|@` zGa`+@5k~G=2Fwm6u$cOeZ`m&cv6gGP_)H>(a^s?y&7@e3F}2MNGiGq1XZL{G!mIv> z@X`Y*?9cCQqH>Z78Htz%84CcQDP^e;Eb+;H)d_Cw)Ps(l=-oV8{(*#WTn!g7OK`F@ zF_W5t)r(!y9XB26;uc7#|8>^MML@_$EKbGyIG1*9i+g$WV!L(8d5h~cv|D&=gJ@{b zXmD!qocyP}{ZpBmFtIp^1Vt&6ZPf?2l{4qULpXq0CZh^R41cv$LPAD5P;IIO;kPgk z+;s!jvb>xVUw&He#q*4~p@Ws)Jl`q+runm(yDvKkHE3(|eY~^g_Bu7%4$f8ZA()Uj zY1OL!;U>B!r&TRi6B|)U=O-pI;Pb9|%qHT?pxYJHBLwu=!$_lK4B*YN7gp&Y5|!@9 z&cqMI{*sj{_NnKb#GmZ`4)QK9*)p^g1`;CbR{f>lBr_o9`}~Ww9h;~iE~l8iE3W{R z9m5s6#GT}8%%u?7BMi`ruF!b!XNSaH$8QQ)28yA-5ejR<6GV~JoXLC6f)q>MYW2cL zOLl!>#vObCYS4YU(9X9lmUeL>_OcP`jfGuiWFH@IF#}=`AjindakaipKEMU!`n89E6-dfxgyuYdpc0bv?giW#d#>dtME zQWX21l^)8D@w5u_JtYC=lW_zXF4!zPcpa^C zKJVZwkscJy<|u_81XT2AU|LqJd2nyJ$Mro!Fr;0OhMDQT@*Q*w494W_6OUTF5n6UA z=fhlF!YmWB7_suPFZ;ee47W^IHNZzj^dCfE4$@zOV%mp(jM{mOYO^#kAjbRO2h4zv z3S$7~fpO*)3lIEGR*QwvF~WoAra}G7Sy3*bG01h%=WbTkrlgsbCB2LXl<><{p3WSn zu{8(xrLAAC-Q00B|El3=zthgYqu~WLO^md&*&q$vg{;~4XS#EFqJOCy;%Fmc`)|Pf z%)wVD-T=u8^~x%TX1G^K(dBJdgLer}r?Y-Yfsza?l*-bRq|la4m~)Pbwj_fPEneLLAGGB(nh6i+qP}ncBO6Gwry0}wr%rI=hS_eneOSHyYA}q zcGfyi5i3r7-;N!73!B&)D0n32$v<0pM=QOeUc@A|KcMs*Mr|jWYV)_>AGh?z4HeBH zD`C#uZw2&-BGqRuGNNn6HKf|ysc#Ua!G4EM@bsbQlhra5_`4LfK%W;B=T{?I$pFNY z#iAtR6VS3mZsK_>iHWJQjhACgc9hFnak4@%n)isqn^PD;lm${SGicC-n7IBS4 zAN*rn%bGU|ik5fR7vQC;Olk$o+G3sj%ny6cy>u1m_CZ^_rNujhqhU?QNh83IU|foH z$%S*kbX-KdA+NcfJfYoCtkDX>f>CqGO9@%;Q;d*~$|s}l;BOSsjxRq?ToOeW{6~uY z@^71Vo4YfvsK}vp1@)1&6Z&Lx9UEH#mf;nP_hBMXRUEW^4aX+^hI_u8SBKPs1{U5T zL>VnO=mU6m^h2&~Xs7t7Rml#G4+HGxTGU-y`!wRI@OH@Gl@0=r_%WX{?S+`^K5kJ92lO_s zpxambdxY0NafEbcfLWF&$ge7#iXSr zCZ)n=I`Qt4wHvm7kpeJapUa*l@*KIG^kKbOml%v#Be}JzOVNq%ae?)9gXxi#6WSZ+ z1(%k|CVZZQ8VZcf&n6BI0dugw70n1x*petk^s|XaeP;^|@fk_8?Npyucv1T-?kTSw zJ6*D~sdUs^%h0_df)+@!B3f8Dm{V?7bsh|0(JPDd-dXGA|4l>WV&~`cRuw zbIVY=wj4+xVhCQZ&9h-aG7=dcX_%}*XBusHh`={62JD@3n}lLUlTNii3JU{b$UxDw zWJ;umpCCaew91Rr1_wo`6RAdDC?~VTf9vq9V0Zp9-X5JflDx9uUs7$7kD7L2mCsS) zKwc5DiLhPcb4tdk*bHlJFX+XL3s(~bSsSe%$mumK=A{&sxN;4BEA2JI1ibUefvkVB(Nkw&`rK%h zB3+?Po_#d)l-o&Gh@>(#37CeWm8`)Xj<&*JZiW*h{pfJBquiFAFSPG9Y5=>G)7XU* zJLW^vpHK8;$I&~++4Xb|!2pu$@XFN9T#PeOHCHuN{Qx?JGTcX2q%0yVkEtyEd?*Cn z_RTy4_zT|@d4U#ndwNXem;m}JJSsd3#Uo(UqqEzp+yop`~eg`I9 zI?z7P$wA%if{?b?_axxxpCGkplVjQFBH*Rw1ET1%QzjMN??QjUu}0!Ir`K(!pHc56 zhw$?e-}rAQ==I`kz?O|WB}+||90tAFa0Dwpl-r_u>BN%Z=1Zu2-r+tZH=k5DXf`c8 z?oi%$J}eA7-|nPGd0zBh7H1*7{(pcN4^GL!PK(ixS3J4C7Le!Z)} zP~DGr4#tyI@LC(4C$B1~FMIlsU6Gw+jVaf~OYY7Hp(Mk9Yp^DcA-MKt8KBIxEokj~ z^U2W_zQGpvxVB}_eh)h~#y{J+)_6zR2@Pj=1gE{?Fg;iO_CxvDlW>-%9<_h+U$eXC z(q1p0-0}97-Q&J?r~l*gTxt!vtKZ}F+@t3Oq08a$b~yQ(J`%i3ev1niCe;|796o2O zod`k^mYx^;9XQBrqYLLk*!3;Wlp~YPoF$X+N@w)>=uDA+aikt|V3kc6kJbA54+9e>~+I6g+~`Fz%`i_|u!4g*=3-=8i1>2TE9WEdHr zHRQ*N+Y}oiU)RPL$V%61ZfkP$BfTCZd0^7g;qb%UZNG9~FMc)(UXhEsY!3Ln*pfy6 zpp40>uLku&ywMg8wU^v78Fd(weug}osrz?Y+g1+hs)p(|5;9hu0cu{dU=JeqSWxsH zCy!~_h`l-l%x=C8yMn{(YW3SMqB{iBMKpJ31xI~P>4(X|dd(y}=*R|_awyIDGdei< zq1qE@Y?^MCc4nLhbpdAU>k=PM;#0`kLfR_Es)E{fj8^&db~8^2R%iKpK`o-1_&qSE zsp$|sE$LL`TWTl7cyy-M+2m9W2~!Bn{ISh!mW|(2CitQd6v7IdI%<#00n`FADm3#f ztf<~Szn;FZhBka5j(Mb>-=4cuNC%>;hlq${>y`a1&J~Y)P<_owcji2d)Lduq+vRXB z!}%CEO9Z*sy^Z3kvI$ykRMPLe-^r#2)H z>!#!rgh{ye2isDVsJu7{a1NV|C9o`S-Q3+~vqv+gMy%2n?*oRL&BqZJLg4`Ov~_wS zEjfUH&}7`W%oz^{t|Kj>sv%*K+&4zvb5H!VSKa2g;6?P4uJ!$GPnrW?heD~Bwh#Zo z=e1Qpe;OllGMV_>fm-!UYH-Fe(eS$+el~H~q?YiT>#BGf4eYN-= zb|XU`T>57$&y`@Zs`R(}D!;By?pJGu#aRdbXf3S{^u2;RHS;Kz$M83bZ2h_<#$|JW zNckimTwB5h{jgo=v%z_q9JR&u$sT!__4PXU%BHCdsv5u!sH&^6!K0lN$EsdAo1Ed0 z_5VREm?5{ft(f3dO{zRdG}K2$xxotz3Fqn?gP1GUw`dGWj#6 zgaD=Y&U)c%WB*|8SfAqT4$vdG0sBbI*S1_fCk-H;cp5e|)B;PnSg6&DbIzb`hJ-=b z;$=OW4|AbjSo^&oVlRkNfOWys(=<>xM5Em`gt(^{))a$Gwx8(u)1~PY=0n1q*2}eW zeUkv|HWP-oYQM$DMF0=@`M#g#H>-Y&TR6{SxE+4zp{I`mXaeIxh;03+n~{rN;n?1} zHb8hrc4=|=mTi>5R|a6ugN~>gHYSM8`)}Uvx%qGk`?>||l0~alhLA!#B~jd!8cw#q za2rP7Y-p$?+DrAEJ%N_8*5gZYm0!H6Ewc&no#P*3#uOsEdvl8vJWP8d@pK!V*Ky{3lC@w2N>&7c*X!~J8sMxx8?uEtM zEJVu<0q4xjm%*J4`4N>x-+khx@`Ogk51+zytv5*8k+43`(P;7jMrK20RZ=gWZsxcH zh=&%Y3z7ch%8*9E0_wdFi!M0~IYN>JO6VOXfHI6Q5V@oPD52F7ouzF^ve}mO%jqop zZjCqaTKjI_5kIPVszcN>ysS*at1MBnRg#s`6&Z1ql_P!hYTQxGV}n~FV?Yexke;-3 z;Z!(&5OGuKH1H3R6C^v`jE!6pM{ze%k+3eD?PcokP_ac+ZD9I|?mSc%3J<6~T2}=h z1o`6a9BdLD37({S{X3mn8(vjnzbfoQAu4o@gH%w=sK?P3u+eiCC{bLAI`ZIHxvqQkIi?WVijV{ zSU+N0TqP`E5k$6^t2Zhca)UY0Q}=@!@f7kJwVKcOWMbuFU9HBe(y*Eq5D|O9h^JCk z+-&-+{78(wB`g0`Y*x%a>uveFh&M3Eo*dU(^Lhw(Tx3uFy{XRC-3DHTGHk#)KRI)C z=+J?zwbyQZ8Cwe1k^5J4{tHthNp7FOOv$gCQ>bWNdEc33XouXHyx4h2N^&_0A|r+K zsL-BRMN)sjy#=jp`ON`KtGzCn1qRJty;s*!YMTM4#w1&TsE(>Xg|vgT+QMWHk-<`^ zpM*G_MbWr8$D^D{zvg4SYI-`4rJ{+ByG=m1h|agH$Ya5zA!;U?Ee!9 z17^1W?30_K{zpey{l(9);}2EgLv+Y&^ey9JEZSwDs<`E7P2paoYuy3zfSklYYOrjA zsuO+`Bn7fSV!bp75)2*gWppcUT3n!T_IGl5U#pu-bu4bq$Ht^LpEC+#_RJJM%0oxq zEGZzzYX;yw3&<{r)T!;-vea^P`DRal9X!=S%w;jqFQ@ zT-pg)UB$3&>p=c}5H^G#bE8Zt)og;SSauzF)l1j^4Wa`D+_G+`&Z8fj6TPTmM#AJP${S2+n)Bc;T*<9$Rg)CWFfwm-U z2!$wlQBvZbX2_W$|0Y*}Wz9%b*ja+Lf@e+B5}++jRm4}IE*G#OZHa^~3>;6gE_Yq> zeDH>BxFc+d*pRuhDQQ*QtiW9oUy?I&Mqr%|K~}U|%2MgD=qy)x%9+&pT~sy3y3{hz zGHM%RJNE^zLH2@%ZTTB(VRh7E^pk_l;A+@WdL)B)#giolfS1RkcQ=&rwB7usA%f9iuON zoWOe&vlAvn%Exg;=45q-x^o+FjnZ$-aIcSB&f8M+*-JzS`({QJugM>NA-Ei@+ zI&Oe!1(HFyoBLH2nH+`TuC z6ddut`g7;rLzJl*9)&j=-0G27bDL-EdAdwX_roM~;$$UkNK*A((AwN2xcA;v+`{pE zz^t@G_c>DpzYlE99&Zz!dB}lKq{8@b^gECFST;U1LP2jVjArjtkk^yE_z{VD2 zCS|-(!T_K zTR8to$N>s`$e&HXYmPYuB7tgaU&-cA{xS)NjU!8f_-j&E8gTe40`5@>*hTPS{8`-Yvm!`wl%vUgE&=W@JXh7$O!HHrM92Fy z)WshHw#>Wz`+#{KDB~TZR+Hn4npKG2-uJhb$!&a}BUnore&lr#p`|JVB?C7>w@5R< zOtuIHY!JWPb(tbJ!}6dViQX4#UjXlCDN;(#-KV+*^!wYoINTNpi)`Sdz;gejU49rc7lP4es{9bJuNta^`C9k*Sb1~o;DW17{lwTmCEj7#y$5q!-A z>^X$fK@jdvjWrIp57O&851cE zQmKRt)}t63Oz4H%q%yT}6+rMk2O)Ll)L`wt{V+4=oRd-k>KJYOID_Rety;Bf-zr^n z)~_KonDuzL1%l>kNpEeZxlcxm|Mx)P~A~U13k_N`L%)YbDFkKzx zeg)ya*(W2lii8%5tfON@!~=)2k#^Sj(g=KppBYNem8d7tx#?i5Do_&zMn{i}y(?Dz z(C>tA22cytAqN!3YKY(nl&$%+*b8{`)mW;J3c(5+moT$vsp6|&?SGy*Us5j@9`m-g-Y zRIvsLYCgsAktwqj1|n&std(jmx-jT+uJmjvW_Rby7H_KJV>wu3>&J)(&0)ojPYrXt zo1jdw9Vez9mPp~-sEkMVjV^BM$wl@i4NA4k=6_nAWFBYh{O~!_*j(ix7{1Crto@<{ah%57z^-P36-u3XQklUKQU@CKQJ}fT2!4D;=}NN zaSNxXyd$?8KBmso`;+pzgLD!ulgPsjf2T;I+h}2;Hdg@pduI9j+`gLPL#oMBH|J(; z%11GW{@w(n10S*f_4tYU3^N@eTlm+ggxyS&7kxq&eRxNkwSKwI*O@xN&v8q7uJ7{- z8i1cgUr&8m@*7}|%pDyU!nWm0cOSXV~;d2jL_orJ6dK3Sk@gYSuB2 zYnUDP8R~-r8$Pww--X)rdA?JM&uH7Q_=M*DE`MX2#_0uum<5wkTteNZ3-)udsMwgC1rp zm9;91O;yi`9m2pO3Zj3&4%<+&Xw{7ZUqw|AVCD^1Gx9;xbQM=mRl$+5ifSD$=5{Xz z>K??Qti6URt0g1nCK#(i9~AsLm3Oz046cZi{VeoI(Zs##26R(kT&N0662eWD`0;S@ z7&k$PTPiJeU>4ERJusjqz{}(IQ2ps`NIX6t*!shNOQM2MvDpBL zNdi~3`L5WCwa|Yz1qEM{pK*XB`j^=rSlllB-o$MfxglvE{?8k7S-^P@Qky-(lQ;KP zUJclZb+Mk%wM?kO{?*L6O|mekb2w0s7(EO;_|zL9)toZWMOK!k5*5!7x{itQT<|5%N2Zzg0UwA&7K0fN-Y=WeFvxfdrK_DHV2UV&E*jGf=G%GR@I1 zqLQQr;@uloI!;BO-RE*U!cVoNVo_BvZ}CXCpm?9@0$^7|ZHd2vpAgSq{W1>}C+tf< zr{c~$*Ve1#1+;(@9CE+hA+}vQyo24xa`(=(c3`ZATEaybLGHn&G7K9JDL-s%Lfx$7)q?0~Tx%>%1$FR{rN~MxPhqUZY8Y>_7v_rD1Me+ag^1tq zT0(56sX%Phz5U}VDg7|2QG=%;y*rj=aZDdpHmtgU7F}5tn`OZwDZTHGC2C4Q9BV== zoZN~I(TGfzT|O+$Q+=?PNUT37!$5ILFq87e{kA((XfLEp4Z@!J@YC)5)>g+H86N2K|!! zH#v~4q0WDE8U3HECH=dM{zp#g|4kiChIDvxaekP8xqqIXon&X3gOie_pO&Nn8PE8N zH+&_Wd=-v8594`608i!L@1y^m`dJ>Nn*96sP8Cta_W&Z{7EGX+HQvDGw~@g=vkb)P zTDuz>nrV7T+L6lgh5=zrR( z>u<-y>lx4ye<-2#JbOK%ecz4+`endlK6yflm!gNVSwcQpLgJSoL*@)t^9{fO1V3~B z2C}>^tAnq;Z=xL$oC4;Im7o!BzsSVI(06aGUwi#%K6*9M^!?hp1lZum#ij1idKnXkoTrRg8O0F#23GftZyX>NJdPYdS-=er9CbKA_wW@APu#x=}oQ#cWuh`+O2*!kFe zr9aaECfkqaHv3onQw^jfWS>k8ZZ{7d_K%H<6g%`n^78p1C})(6r(D(%W^si*-2vVT zOqN@Z7KT$MD|*u-jnskPBMN|jpX+x9%pSO<@sa#keX14eFGvGLuLR>HDFc!w=eu7JfQHbQ)!$PF%lHEJ7idP9*DxU_LeGp%P@ zyouh0yGGA}Z2g%wB^nwF``C)d9HkF`nlU}vje(TavYV(Ba%uQoi!k<-|0T9j65LY) zIbw(ic&vsi>||E^jl)noM2QyMG;u;}ab)c;q#d_Z`vCorBNwLyaALA7H2$H#T@@{= zi1VwT$F!zBI1I_#*EgHs=dP&52iS(3f}Htc;d<1W5XnOe?1{7RnQv2;jfI?5!iPvS zBFiz{bJ!g;pPnao;WUT~ejCuPe5@6aZsL$IgG)fq_7$Gcfrhr@o+5kQ5la zrdbL!8ap;?2A0SBk?~upwi*^X1lR#8KI8H{G@hXMg?9zxq+TqsS$&>LPdi3;Kt(u5 zj2fwCGb;l=B>uL#vF2O_3tFZwPWOsyKG0}a01yhiE&p?vVa)+urxTmxK6(9MSBlwf z@Q6@w{$qjv>%FJpiWNkogA0XuQ+a}!s?Bz0O}jVO#4|_JDY*LCe|vXp6V%sV@J|7nlada)_c}`s1bb*;0GR-bZ@PfzRs(n$wXnJ*{jS`*>Hn9RqiD zZ!EQbbM7xsZ;IQ$vFdrFI)d=(dcQPJ65&Zj(MX`@w6VDp2LNKfXtE_mSL`e zn&sCOofKT_uhy;4^@-p;ACRTY_BIN>v1U)n<@7?LTzGcqI~{Z4JJ%GRP=j!mOY05eep0F}xT;CA9|9+h&mTF) z!0SVJ4)ihqll-jmC5s>6N;;r*S58Vp9htGRSIuqa_z1D){*gNK#E%s7CL5q`Mw*rk zcd%xclEE?0Gcvz_pV*XkdW3P3-kcN`{wg3m5%o4qbd@Rmu{(e|n6Hi4m38H&FzTV-V#zhR(8aJJi; z{C11vcr2BelT5^)ZP!Fz9NV6-atWeZ1Cm@J}ql}|Gn1J6coNCiipQY7b zc2K0zMmFBl>#kr_#WWcu9PhV|)KN-5HGfOznqh zw^)vOV?4X({@9P%qEhhhM6LVcOW7^Ao%0Wk{cA8cGOik^tqQ41pvjVzI}=shFcXE} zb&srnJMWSVOk0tVbWt1js|l6&k*ZiQ)=M&)3`0mhsdvokL2-~K|S_bwrn(N7CX8 zjm1k@!R+1MPoAVjZ%YF>3xX}B1l%}oQ`fISg_c65@( zn;^wE49Q4Q^8Q{}6mnvf&&Y~E-yc|FuDpX1-CvOeA11n<@JyB+5PRsRZawCMcg3O? zf_JcgE^q943H+?eANhtl-OX_}GiFfgpN|oE98guBST7Ld`NvPn%bisjsN-QE66K8Z zTLr0vT(=>*ilWE#8N(gzTSXPjNP&bFvP?&qB~lQ97`SQY-<&Rm!|Ka!eN&j?1ct@- zK*N28?WA=XA+~6MzG(dh!K3#=jZzuLDn^bz6&2bMmC+mRll;K@Yjzflc5jjM*vd8s zn(C~PEu?RC*Y)Z5Ir)kKp4?x6F)%3Q_f_w~;reO*?_Yb>hC|maGVw!&w@lOl?XOcm z$3_bU%)TZkP40o*1JnI+a(}qbfBH88A&MXY!_maguk!DEm;x$k{c}{1j^ukvi}APY zU#*jSW%O5gKH#&2FXRW{L+`ECfA{CViWr`ZFY^TDb~eJ2<(Wvg0^)rCc*352$7cTH zm#KuUe=}sFoJ4;keLcq&7c`9i83ZpdPY)ApDB#o8wYXm`ovYg^c-q{$ekEqi)oUfm zDaW0|QW0xfwg5rc*4{6tM8l<<#z4|DpIUvx&B=9LyqPYK06a>!W;o7ohEXDtgNxiKoBN5hU(TvleTPS~+!~ zSGY<8A653KPTb3uubu763R1qh%zp8Y;?t{EpdOUI! zy0d?Y-!aavzal9Jo>}a=Ix+L*gSdT4`q5U8ip0S^a%EhM5fYwQ>%M}~@(WIY+GS(2 zr>N$1lYS7>lZQHe{3>W`umoI7|9PBcEEL%>MrT*mc0mBmV)%W-<`XqfWheB#u`;G4 z9mYy)4OEQ`@>kV|_o@DlkZK8IP zj?IPrc3tr`@{!v@Hxe$b2=6+Iy2y4Bds3;9W5~6QD_mjjwLr2s_AAg0%W_31f%S50g_=R1Htg@>Ldd|9;Wx3% zu$;VS-4}dp4zFKlZ00@%Kuk=I)ilb)^Aq87JFD6Z@5{8m<(GSg9E%B;$HGCn?b%~{ zg3S*!co1MxV`@HggEed8U9d7@M0Zx(rC zdx=xC<_T^AAGOt_gq$R(sp`4Y3{(Ut6Cn?S%c2iCB2K$Z6KBm3HMq6xUtpyLI?|p7 zpo~#2_L%&)a&Gx0%1U7pK!U#jEE}d4XOo-|lHu>@w1VS-5{f_g)*HA6#UUb1t{kS7 zab-^PL06Y;BRF*fl*BR8#7QSA;8LCLDA4l6LVTFBaW3$J_^@1YZe@qKpDpf$8{8$x zYz=Sx^YT1IsY^;~QkmmnXD~arTr(0 z3y)bFE<(T-`GVw|{-FFyQOXT)@ed!qcQycv-8oDm+Bnu`Rm)~6wB$v!nuV9t_{S*( zK_A*^y?^qA$j$x`efn#Sv$+>zEl7eJCYMleo;|{Q1QYoP8>Ut*z33Nbfp|4Vw0oSs zcDsLxJp^|mWqwg*!9$1uH^}?RI*K?Kz&quO>8TKmSIsP>AulKWGWAUwKL*FYR&`4q zd$@F`6-8hPgf;`^~ngJoPjI0?1 zQXe>f^#_9Wv9GhpPCY5(sdwBUBT>uL4oVsNqA~Pcr#skBeex&#gX$)3-RJW!cd<_4 z>mGuhhxg~Gu3BxyQlzPNgh0Y&&y2QsZx~luaCF8E@+O)|j@DW}U%38>HPz!?V46Rj z0=OsmoHagQgjxLhB0Sx@w;h9*Ci+PPSraFuS=#z#*BU0tx(%~+a&TcMm#pjz&pG^> zd>vOB`^b}U-=&0oQ+t&YWM~2P-pvC7*KATG2RIvW4_hs!cw98O?{Mgx>`uOCy8ux_ zB&Je3%L!M~1OfShQeq4QzEo03EYsXA9`1Xn+?Lt1md>11UjldgM}jU#tqHOM_nK{L zYOFqjXSYC??S({yy^VtUVgzqT6ls?M{?|}R5PspQzBqpL&dbWEenA2K?Zc|!9A)#v zMe@_XrOK#EZV6U*R@@f1M4F>bFIl;^)ywB3&H*^O7|qghb; zrMvHm9d@*pVr|3ajo$3~Ujo9iNgZu!f3BX&S|0ZV9$cog_k>){yo%jKCZ{u^AhW-&$!p(U$k&cfFC1alV)FOdR`%;P-@0!Tc7{k20(Nx{ zX&xnFB@Hdp$M4%Hx4FXg62f{@Jfi^H=8IKBS+6Lu)?q!)xb@&NA=**)2Zmv zRUOM4W|yRkOA4l0Qanw9{a8$(1*+&4m(MOC=dD|iZCh%!h}F{k6ZHboS%SL-AsO8j8X8a% zej)~V!fH#JJsa-9K-H|v)=@+jUsKhz5i`&G_QmsM^tdW;w`=RL5g79$iUWC4_*;6^ z3Mt8NrZCDGSc{XTomELq(+{d9tpJzH$LG>mP1u$dN?OFxpY-?S?MM7>TdP(t9=ohv z(bKt%yTS8rg|tU}wpc84bn?#Jmt+-rRW`DdQ*}=f6~8~etPd7H|p@zG=KdH-3=sofZz}RBmyF;2>>f< zLIlMoF7mfwDgs2PzLS!fnW3kjnNg9Ll2*K1cwAP#o1}+;HlwmQI;A8jF(WxCraUU63@#R<2>#Xe z3!J(g;w|hKnDs@$ACQsfN%{%dDd5gXMO=wyW(G#4Mh-vyLBN;sIzab0nt#Ag2PtQ) zx8BpPLI+#h&D>a0+HJ+&JYr@fHuUCKZ00zt^pTny;5MDZd?r8>;uP;JYm2?a92!D@ zuo*uWrFT>A_R=uv&gVJB9vIIlc^ThFr+^v`eq(xDXcXEPvC1Pp+7W?^NR%&X#Wj~*qDso=Yd}|to=!4s|+Lre5NoGjm){1&2 zwM`H~DN8WZ7@VKVZr>%TxO`CN;!IZZ$$6hH>v77ceQz`Uh}QRYnkU3}YJ<<9zkeP0 zMdQ56pn7NDAP+n9)+3fAK04qeb@+g=vX+lEi=T4f*YRJ2$?+c?<^GS?$r)MLnEzuX zsH)g1sFeRjQe9(hhV z@zYM1tYS~!hSJz<+4%ZQ-$rb+^rq*j_0?1(0n|gUafLqj4@`11N5`XwN5@p0k~tHO zpX(tL@B2X$T>lj3~c<@-f(^SZvY_4bsfIWU_3~7DFq(g2QY_e6p5RG#Xb` zCUDB!e{3=1MC8oCSJ286X**_9_4G1N>YY>^tKJzRHdXIQ!ZKOdK8wHl5MJ}W$4|G z8)A1H;*E|@QL-zO`h@O*{!V}Nco}R_iW8pbfAYv(W40UzAyhZK>LaJAi zNcKZ2iW3u=h7&XHu1@qCwn$yMh2!)lfVBkC?N!()W|-X9Eo(Exacp;{2gye{!fl5f zY)4`T2SHR=;{4|$_IE5(yAc+-#FlLGGTEj`C!bXyR-Q7D)5NduP6F7Y3wzL2cV_*w z4f99YZ`+V54$Cpw%~_L1{jyRNmHsYoX zluLZ{Q}^hhW01B(aK85HXd~Xm`|~?Ssjko@WGVc<)L$J!Mk|!j8POq5YE0XGI8~Q0 zj+ZYL@Tgb}dJIe_x)+Aqj@V~|OgVg5vIdg`-B8`myTVvELJ z1ZMsk7xIiyK`u^nFOL0;()LC80|dcAQnKdt6Wn&?N5Vus72uq#;;9tj-%{95e!Fkr$$Y9 z96)Dr5<31mfWZLc3LUiPq@>B#M>!r*rr`a`tNXD1Bch^C4)HQ|SR?a8GWSqJdH%Gv+^AmAiBYB$gWxq1r>Yzh`>yL>Z53003tY zHjv!A(g|@<&Prc`evn*BWP6u?xA$uE!cTogMY30C8qa@^wpnTFer(|EU<#y9#Sh&p z4^{)=!d?V(%wqGyJ*d%;e7|WmswZhMmmBt#^+UwY^77qUFc1dtKDs(Dw;V$`-<=Hp zfE1d`{QNh)fa(8jtpCTofSrN!KehrNC2a{*MT}g{ZO4V_1z83qZhOk}+E+ECLe0z+ zx|Hprk&LD$h*8eNDb1I_tZIw(Tv-}=-FUXMKtv=-5-{GSDBdTP9`x4><)_A`8WrWITwIy%k?g1{K0Fuh|qN=3Br@{xXMODDMz%f8>zYd zqk|iq{c7h`Cy|%ey~FoWTV2QEjaIC4PL0Fe5*b9Cz1i5cfkJazqH`BVZq+{iUEM3f zr&P}t5Er5fBV@2@1yVB$JNxhY;Wh+pMwALdkZ)ll*QoSzewlobfld%v0U<<}m!|-^ za$)6#HJQFp69PoX4^p~i$k1LC)&Y!8#yksBJJO~3FN== zWz8om(qo{B6OQgAc+g{;Qv90KbaTQ*#|zYu(mX(;ShShm66a@NCZBXKY$GH1vm;kWsd)!} z{J;KdVQ~J3!ubDp7G+}kPm_4vf5tz946s|zXgG@n^;ZSDV4xwOpm^^BIo|#>^RfQn z$RvO6c2||6VR0n_#qq|Cm*GwWWCAb9IarMX*W=+awy{tLf};r4*z;qg#MQbR7n&+R zlE0<3f}th1Z6lvApBGl`^BsLv=(EHvV!b)yv}G(HGI1gMfhu=>G-M2e7Q@_7dQGml zEnq{@Idr=k2o5j4aA}o5W;R-*tME@L${0N>7$mgfp=PuZeRi2hzUtf_WiG$o9WGv@^5)rx;FaS}SjI{QmCk6WVRffj_fbzrAt^y+lWc z2Hz-|yz3_+^2i!uanow;^Ti*RGs1>|Exx@1({8MG_L`ZWPuP!S7!V#nBM0%*LP0{r z6#4gvA|(WZ1tL{M^rK=XGN6L>j8PPV3}_-EPD7m%l4~K+3CWV|BM;*ELECVAtB{0` zG`WF*=@}|uH1ClW1Sn=&@PyHjAU_o(%z+fQOOAq6p2b6=3v~Kd5~%&M9s2kAT%tvN zGUA1ZM0t>5$oUMF1qy>kDModGfCLn(mcn65vI3#MK?x=!16wd8sNhua(E7NLsEj}| z7z#=U8v$ZI2++QPKUsQ#j0NNrVl+~IKIsmZt$}(t8<2T70;ud(_n1LC7*4RE2nZ#K zAPSd7feb1L>eO#T2_h&`)cRuuAw#TW#=kKz6u>$}49S1-aD?FCh$(*iM<^H^|C3$B zc?~8=*$Fb}XMk6n%lUl4-j*Hhu+HX;&Ysf+7xoq(1lwg)*m3`xeBC89-OLlY)txgqKai{T*-tc(2JUUE zgP!7Et62c&?PF0@pY5#TRSbsWEVAY?@QmX4p&k&ss#byJ?BK}-q=vCkcMYlYj8wq>OQJ_2V?`k2wyd1*;)TZO?Y7Ig^lCP_Q z%S$)UU6Jd9AkqU_;ch$fIIhI7nj<9_;YW%J-ofXPTho27^&792DS)D|Z`UpBtyt}5!)hgQhj-(1nzX0Ihh%rgjxL8XNb+woWYWQ!h?qy0hYJF}rqd&@#NBx8v2>X$){Yo2eS(XY zNtrLpSvkENZT6^|B9qvGRdC0|*tWy1-i_}(0}6Ro_5rk>cQ}+jrkBf0p_%y_T>Gc3 zqbMhKnFne6al?(aCu6g?(l-XoK?eK(tFUtqXF}oQI65cCa#t1^bD2?Q2pfqqjI)|M zxfW)*Zkh>6uXuZyQ5+!*k5n|*h%%RQTsFz|Q_DOr)LnWlXXA}664-XoH#1^)C9oQ z&maET5zRK$G|B1IU^!m^T|c?;MAi$n1L@h*S;b}CaP)Bs#Z`%Lra8;kfBsx@!e2kI z-+|9q~a4LL|VQQec8UvnI7#dePLjCldkT$|&6ZLWnRI5Ee<=6Uq*Wwlb8vlec}?&znP zsA3_1Z<7pfxL1?OO0c}z+|8cN@>U$Uyrc6+!<<><{bC{UZ> zl-Fw{^_9Wb`CB=>w}}*z0)qYi76Dy~wOYS@htFFaV#gsfb{%fj-~8=YD*-c{c(@yf%V$(C&>(j; zl<&$H+|MSFb`JPk1ixzja=ZP=5aqb;ne4!1?s z-f=K*+<9;MFch*lbv`TKYeot;CQ{&T(3_3B&pF`rZSAfjd{Qe)&058A!%8ft!6aPt zNiPtpcD&%Uvs<;4Ep2N;LrZ?p`IB;aIC#}OtsG}DPzjorvl)@tl6T z#8j{?n;HJ*FJLo$^A93*O6p+2m(wfo$Mq?hSkchJ6BK~C-QxF!gT8}Hs~4qPia7Q2 zlB~3LBshN9KZ`Y<6F>w1;9OSPkw%L zQ>(S5&I`&4S+Eo=&r#oP{FB4Hk*to2>Y0 zQXROh`!zupQT5aFbG2DrT{Y`$_Pr0kuO_6?-8EOKzbK_?*Ebni+d>-3uIftRPQ`S` znKP_6p((r{Ny=lZd;6}95s41km^^m-!|7&~nb~oeN3uJN8LK9}B}AxYg7(!iK!3!z zH_vPv3?J*h^kN#%Ld%SOWsoeVrxJy!XQplrZUCP-FMF4q_vjlMEi{6KUcQzu-;ox3 zD$npS;2KML=0ik}A0*}7<07jT&!Q&JqA|}$6X2@0_rx=Gc$pG9qoeNgb#W+pq*$mP z<#ayR-H`h-%6iUX!(%V?;A3LxmQ}~hWPG&Bp}h=y4?HDFG@yyy*1NV==mPZj9%viJF(IrU1?~`DMDzq@F1X zP3c@zt556JR!-@;dJSRhL8*z4$KLU?{QlX3_|-CAd>G8=BF*=3UJ>|Uus`9PRG;N1`sx;GE2tQ(*`=NLhXz5r=?&2c8Haq7aw=ES)ZEy!|GLVVRzLx zNu|B|x!h1QIPfV{xR~ynvx}=dASkuyMjOFnS=&c8#Tyy0|FYX?asY`OM+(LR5C%vi MBme@jb+iNg3)7%C8vp