{ "cells": [ { "cell_type": "markdown", "id": "c5fe29b4", "metadata": {}, "source": [ "## The differential equation for the two-loop Ice-cream cone integral in general dimensions" ] }, { "cell_type": "markdown", "id": "ec38c9a8", "metadata": {}, "source": [ "\\begin{equation}\n", " \\omega(t)= {\\textbf{U}\\over\n", " \\textbf{F}^2} \\left(\\textbf{U}^3\\over \\textbf{F}^2\\right)^{\\epsilon}\n", "\\end{equation}\n", "\n", "with\n", "\\begin{align}\n", " \\textbf{U}&:=(y_1+y_2)(x_1+z)+zx_1,\\cr\n", " \\textbf{V}&:=k_2^2y_1y_2(z+x_1)+zx_1(k_1^2y_1+k_3^2y_2),\\\\\n", "\\nonumber \\textbf{F}&:= (\\mu_1^2y_1+\\mu_2^2y_2^2+m_1^2x_1+m_2^2z)\\textbf{U}-t \\textbf{V}.\n", "\\end{align}\n", "\n", "In this worksheet we present some numerical cases for the $\\epsilon$-dependent differential operator with respect to $t$ for the ice-cream cone graph" ] }, { "cell_type": "markdown", "id": "5686a177-a066-418d-9240-a2d3818cf08b", "metadata": {}, "source": [ "This is the generic two-loop Ice-cream cone differential equation with $\\epsilon=0$ derived in [arXiv:2209.10962](https://arxiv.org/abs/2209.10962) and [arXiv:2302.14840](https://arxiv.org/abs/2302.14840)\n", "The differential operator is\n", "$$\\textrm{PFIceCreamCoefficient}[2]\\,Dt^2+\\textrm{PFIceCreamCoefficient}[1]\\,Dt+\\textrm{PFIceCreamCoefficient}[0]$$" ] }, { "cell_type": "code", "execution_count": 1, "id": "e1d4d002", "metadata": {}, "outputs": [], "source": [ "PFIceCreamCoefficient = dict()\n", "with open(\"PFIcecream-Coefficients.txt\") as f:\n", " for e in f.read().replace(\"\\n\", \"\").split(\";\"):\n", " if e:\n", " name, expr = e.split(\":=\")\n", " name = name.strip()\n", " expr = SR(expr)\n", " if name[0] == \"c\":\n", " PFIceCreamCoefficient[int(name[1:])] = expr" ] }, { "cell_type": "code", "execution_count": 2, "id": "ce41e90b", "metadata": {}, "outputs": [], "source": [ "from ore_algebra import *\n", "OA, t, Dt = DifferentialOperators(QQ, 't')" ] }, { "cell_type": "code", "execution_count": 3, "id": "35fb9cf9", "metadata": {}, "outputs": [], "source": [ "Dt,t,epsilon= var('Dt t epsilon')" ] }, { "cell_type": "markdown", "id": "7cd502e4", "metadata": {}, "source": [ "The all equal parameters $m_1=m_2=\\mu_1=\\mu_2=k_1^2=k_2^2=k_3^2=1$" ] }, { "cell_type": "code", "execution_count": 4, "id": "f1c18f5d", "metadata": {}, "outputs": [], "source": [ "PFAllEqual=dict()\n", "PFAllEqual[0]=(-24*t^3+38*t^4-16*t^5+2*t^6)*Dt^3+(-60*t^2+206*t^3-132*t^4+22*t^5)*Dt^2+(178*t^2-232*t^3+58*t^4)*Dt+(-64*t^2+32*t^3)\n", "PFAllEqual[1]=(-12*t^3+7*t^4+11*t^5-7*t^6+t^7)*Dt^3+(18*t^2+95*t^3-26*t^4-37*t^5+10*t^6)*Dt^2+(48*t+53*t^2-242*t^3+5*t^4+24*t^5)*Dt+(-12-48*t-112*t^2+64*t^3+12*t^4)\n", "PFAllEqual[2]=(24*t^2+29*t^3-17*t^4-17*t^5+5*t^6)*Dt^2+(-71*t^2-130*t^3-23*t^4+28*t^5)*Dt+(-18-64*t-48*t^2+56*t^3+26*t^4)\n", "PFAllEqual[3]=(-12*t-40*t^2-36*t^3+8*t^5)*Dt+(-6-12*t+12*t^2+36*t^3+18*t^4)\n", "PFAllEqual[4]=4*t + 12*t^2 + 12*t^3 + 4*t^4" ] }, { "cell_type": "code", "execution_count": 5, "id": "6ee30c14", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1, 1]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPFAllEqual0=OA(PFAllEqual[0]).factor()\n", "[x.order() for x in facPFAllEqual0]" ] }, { "cell_type": "code", "execution_count": 7, "id": "2ae7fd70", "metadata": {}, "outputs": [], "source": [ "PFnum=(PFIceCreamCoefficient[2]*Dt^2+PFIceCreamCoefficient[1]*Dt+PFIceCreamCoefficient[0]).subs(m1=1,m2=1,m3=1,m4=1,p12=1,p22=1,p32=1)" ] }, { "cell_type": "code", "execution_count": 8, "id": "0098fdf1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPFnum=OA(PFnum).factor()\n", "[x.order() for x in facPFnum]" ] }, { "cell_type": "code", "execution_count": 9, "id": "3594ba84", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPFAllEqual0[2]-9*facPFnum[1]" ] }, { "cell_type": "code", "execution_count": 10, "id": "6e144f96", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "18*OA((t-1)^2)*OA((t-3)^2)*facPFAllEqual0[1]-facPFnum[0]" ] }, { "cell_type": "markdown", "id": "3131ec46", "metadata": {}, "source": [ "The all equal mass case $m_1=m_2=\\mu_1=\\mu_2=1$ with $|k_1|=3$, $|k_2|=83$ and $|k_3|=71$" ] }, { "cell_type": "code", "execution_count": 11, "id": "b2d04d8e", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loading epsilon order 0\n", "loading epsilon order 1\n", "loading epsilon order 2\n", "loading epsilon order 3\n", "loading epsilon order 4\n" ] } ], "source": [ "PF2IceCreamAllEqualMass=dict()\n", "with open(\"PFIceCream-All-Equal-Mass.txt\") as f:\n", " for e in f.read().replace(\"\\n\", \"\").replace(\" PF\",\"PF\").split(\";\"):\n", " if e:\n", " name, expr = e.split(\" := \")\n", " if name[0] == \"P\":\n", " _,num=name.split(\"PF\")\n", " print(\"loading epsilon order\", num)\n", " PF2IceCreamAllEqualMass[int(num)] = SR(expr)" ] }, { "cell_type": "code", "execution_count": 12, "id": "ec2afadc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[3, 3, 2, 1, 0]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[OA(PF2IceCreamAllEqualMass[i]).order() for i in range(5)]" ] }, { "cell_type": "code", "execution_count": 13, "id": "e739a426", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPF2IceCreamAllEqualMass=OA(PF2IceCreamAllEqualMass[0]).factor()\n", "[x.order() for x in facPF2IceCreamAllEqualMass]" ] }, { "cell_type": "code", "execution_count": 14, "id": "b8589927", "metadata": {}, "outputs": [], "source": [ "exp1=facPF2IceCreamAllEqualMass[1].leading_coefficient()" ] }, { "cell_type": "code", "execution_count": 15, "id": "d4adf259", "metadata": {}, "outputs": [], "source": [ "exp2=PFIceCreamCoefficient[2].subs(m1=1,m2=1,m3=1,m4=1,p12=3^2,p22=83^2,p32=71^2)" ] }, { "cell_type": "code", "execution_count": 15, "id": "4f29a016", "metadata": { "scrolled": true }, "outputs": [], "source": [ "norm=(exp1/exp2).simplify_rational()" ] }, { "cell_type": "code", "execution_count": 16, "id": "3649dffa", "metadata": {}, "outputs": [], "source": [ "PFnum=(PFIceCreamCoefficient[2]*Dt^2+PFIceCreamCoefficient[1]*Dt+PFIceCreamCoefficient[0]).subs(m1=1,m2=1,m3=1,m4=1,p12=3^2,p22=83^2,p32=71^2)" ] }, { "cell_type": "code", "execution_count": 90, "id": "1f654f2d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPF2IceCreamAllEqualMass[1]-OA(norm*PFnum)" ] }, { "cell_type": "markdown", "id": "d782ce0c", "metadata": {}, "source": [ "The all equal scoop mass case $m_1=m_2=1$ with $\\mu_1=59$, $\\mu_2=5$, $|k_1|=89$, $|k_2|=2$ and $|k_3|=11$" ] }, { "cell_type": "code", "execution_count": 33, "id": "eb8258a2", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loading epsilon order 0\n", "loading epsilon order 1\n", "loading epsilon order 2\n", "loading epsilon order 3\n", "loading epsilon order 4\n" ] } ], "source": [ "PF2IceCreamScoopEqualMass=dict()\n", "with open(\"PFIceCream-Scoop-Equal-Mass.txt\") as f:\n", " for e in f.read().replace(\"\\n\", \"\").replace(\" PF\",\"PF\").split(\";\"):\n", " if e:\n", " name, expr = e.split(\" := \")\n", " if name[0] == \"P\":\n", " _,num=name.split(\"PF\")\n", " print(\"loading epsilon order\", num)\n", " PF2IceCreamScoopEqualMass[int(num)] = SR(expr)" ] }, { "cell_type": "code", "execution_count": 34, "id": "585bf961", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[3, 3, 2, 1, 0]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[OA(PF2IceCreamScoopEqualMass[i]).order() for i in range(5)]" ] }, { "cell_type": "code", "execution_count": 93, "id": "c5080c69", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2]" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPF2IceCreamScoopEqualMass=OA(PF2IceCreamScoopEqualMass[0]).factor()\n", "[x.order() for x in facPF2IceCreamScoopEqualMass]" ] }, { "cell_type": "code", "execution_count": 104, "id": "b1262655", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1/168541804117202286244069376" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp1=facPF2IceCreamScoopEqualMass[1].leading_coefficient()\n", "exp2=PFIceCreamCoefficient[2].subs(m3=1,m4=1,m1=sqrt(59),m2=sqrt(5),p12=89^2,p22=2^2,p32=11^2)\n", "norm=(exp1/exp2).simplify_rational(); norm" ] }, { "cell_type": "code", "execution_count": 109, "id": "a3d4d55d", "metadata": {}, "outputs": [], "source": [ "PFnum=(PFIceCreamCoefficient[2]*Dt^2+PFIceCreamCoefficient[1]*Dt+PFIceCreamCoefficient[0]).subs(m3=1,m4=1,m1=sqrt(59),m2=sqrt(5),p12=89^2,p22=2^2,p32=11^2).expand()" ] }, { "cell_type": "code", "execution_count": 110, "id": "ea0377cc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPF2IceCreamScoopEqualMass[1]-OA(norm*PFnum)" ] }, { "cell_type": "markdown", "id": "78eb149f", "metadata": {}, "source": [ "Generic mass configuration $|k_1|=43$, $|k_2|=5$, $|k_3|=89$, $\\mu_1=53$, $\\mu_2=23$, $m_1=7$ and $m_2=47$" ] }, { "cell_type": "code", "execution_count": 35, "id": "8c72e781", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loading epsilon order 0\n", "loading epsilon order 1\n", "loading epsilon order 2\n", "loading epsilon order 3\n", "loading epsilon order 4\n", "loading epsilon order 5\n", "loading epsilon order 6\n" ] } ], "source": [ "PF2IceCreamGeneric=dict()\n", "with open(\"PFIceCream-Generic.txt\") as f:\n", " for e in f.read().replace(\"\\n\", \"\").replace(\" PF\",\"PF\").split(\";\"):\n", " if e:\n", " name, expr = e.split(\" := \")\n", " if name[0] == \"P\":\n", " _,num=name.split(\"PF\")\n", " print(\"loading epsilon order\", num)\n", " PF2IceCreamGeneric[int(num)] = SR(expr)" ] }, { "cell_type": "code", "execution_count": 36, "id": "2fda24b9", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[4, 4, 4, 3, 2]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[OA(PF2IceCreamGeneric[i]).order() for i in range(5)]" ] }, { "cell_type": "markdown", "id": "49b86465", "metadata": {}, "source": [ "This is the factorisation of the $\\epsilon^0$ term" ] }, { "cell_type": "code", "execution_count": 7, "id": "72b39df3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "### Trying to factor an operator of order 4\n", "Degree bound for right factor = 891\n", "Current order of truncation = 72\n", "Current working precision = 250 (before monodromy computation)\n", "Current algebraic degree = 1\n", "Starting to compute the monodromy matrices\n", "loss = 19\n", "1 matrices computed\n", "Trying to guess symbolic coefficients\n", "Trying to guess symbolic coefficients\n", "loss = 27\n", "2 matrices computed\n", "Trying to guess symbolic coefficients\n", "Trying to guess symbolic coefficients\n", "loss = 32\n", "3 matrices computed\n", "Trying to guess symbolic coefficients\n", "Trying to guess symbolic coefficients\n", "4 matrices computed\n", "Trying to guess symbolic coefficients\n", "5 matrices computed\n", "Trying to guess symbolic coefficients\n", "6 matrices computed\n", "Trying to guess symbolic coefficients\n", "7 matrices computed\n", "Trying to guess symbolic coefficients\n", "loss = 50\n", "8 matrices computed\n", "Trying to guess symbolic coefficients\n", "Current order of truncation = 144\n", "Current working precision = 450 (before monodromy computation)\n", "Current algebraic degree = 2\n", "Starting to compute the monodromy matrices\n", "1 matrices computed\n", "Trying to guess symbolic coefficients\n", "Trying to guess symbolic coefficients\n", "2 matrices computed\n", "Trying to guess symbolic coefficients\n", "3 matrices computed\n", "Trying to guess symbolic coefficients\n", "Trying to guess symbolic coefficients\n", "4 matrices computed\n", "Trying to guess symbolic coefficients\n", "5 matrices computed\n", "Trying to guess symbolic coefficients\n", "Found rational coefficients\n", "Concluded with One_Dimensional method\n", "### Trying to factor an operator of order 2\n", "Degree bound for right factor = 39\n", "Current order of truncation = 18\n", "Current working precision = 150 (before monodromy computation)\n", "Current algebraic degree = 1\n", "Starting to compute the monodromy matrices\n", "loss = 1\n", "1 matrices computed\n", "Trying to guess symbolic coefficients\n", "Found rational coefficients\n", "loss = 2\n", "2 matrices computed\n", "Trying to guess symbolic coefficients\n", "loss = 3\n", "3 matrices computed\n", "Concluded with One_Dimensional method\n" ] } ], "source": [ "facPF2IceCreamGeneric=OA(PF2IceCreamGeneric[0]).factor(verbose=True)" ] }, { "cell_type": "code", "execution_count": 8, "id": "7d49bdeb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1, 2]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[x.order() for x in facPF2IceCreamGeneric]" ] }, { "cell_type": "code", "execution_count": 128, "id": "5648761e", "metadata": {}, "outputs": [], "source": [ "#19, 7, 5, 61, 31, 61, 31" ] }, { "cell_type": "code", "execution_count": 134, "id": "8c460e63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1/2204860064909649374857218750" ] }, "execution_count": 134, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exp1=facPF2IceCreamGeneric[2].leading_coefficient()\n", "exp2=PFIceCreamCoefficient[2].subs(m3=61,m4=31,m1=sqrt(61),m2=sqrt(31),p12=19^2,p22=7^2,p32=5^2)\n", "norm=(exp1/exp2).simplify_rational(); norm" ] }, { "cell_type": "code", "execution_count": 137, "id": "1219ad9d", "metadata": {}, "outputs": [], "source": [ "PFnum=(PFIceCreamCoefficient[2]*Dt^2+PFIceCreamCoefficient[1]*Dt+PFIceCreamCoefficient[0]).subs(m3=61,m4=31,m1=sqrt(61),m2=sqrt(31),p12=19^2,p22=7^2,p32=5^2).expand()" ] }, { "cell_type": "code", "execution_count": 139, "id": "86e2c1c4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "facPF2IceCreamGeneric[2]-OA(norm*PFnum)" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 10.2", "language": "sage", "name": "sagemath-10.2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.1" } }, "nbformat": 4, "nbformat_minor": 5 }