This SageMath file accompanies the paper "Enumeration of general planar hypermaps with an alternating boundary", by Valentin Baillard, Ariane Carrance and Bertrand Eynard (more specifically the results of Section 5 on Ising quadrangulations)
Definition of the variables and of the potentials¶
var('x, y, A, B, t2, t4, tt2, tt4, c, t, z, g, a1, a3, b1, b3, D20, D11, D02, D22, w, f00, f02, f20, f22, fh');
V=-t2*x-t4*x^3
VV=V.subs(x=y,t2=tt2,t4=tt4)
Parametrization for the monochromatic boundary (Section 5.1)¶
We apply Theorem 8.3.1 from [Eynard 2016] to our specific choice of potentials
xparam=g*z+a1/z+a3/(z^3)
yparam=g/z+b1*z+b3*z^3
eq1=(V.subs(x=xparam)+c*yparam-t/(g*z)).collect(z)
eq2=(VV.subs(y=yparam)+c*xparam-t*z/g).collect(z)
eqcoeffs=[eq1.coefficient(z,i) for i in [-1,1,3]]+[eq2.coefficient(z,i) for i in [-3,-1,1]]
eqcoeffs
[-3*a1^2*g*t4 - 3*a3*g^2*t4 + c*g - a1*t2 - t/g, -3*a1*g^2*t4 + b1*c - g*t2, -g^3*t4 + b3*c, -g^3*tt4 + a3*c, -3*b1*g^2*tt4 + a1*c - g*tt2, -3*b1^2*g*tt4 - 3*b3*g^2*tt4 + c*g - b1*tt2 - t/g]
sol=solve(eqcoeffs,t2,tt2,t4,tt4,t)[0]
sol
[t2 == -(3*a1*b3*c - b1*c*g)/g^2, tt2 == -(3*a3*b1*c - a1*c*g)/g^2, t4 == b3*c/g^3, tt4 == a3*c/g^3, t == c*g^2 - (a1*b1 + 3*a3*b3)*c]
Explicit master equation for $\widehat{f}$ (Section 5.2)¶
Construction of $Q$ and $E$¶
To write the sytem given by $Q=E$ on the functions $f_{ij}$ (that we want to eliminate) and $\hat{f}, \omega$, we first compute $Q$ and $E$. We have: $$Q(x,y) =\frac{-\widehat{f}}{c}\Big(V'+cy-f_{01}-\frac{xR}{\widehat{f}}\Big)\Big(\widetilde{V}'+cx-f_{10}-\frac{y\widetilde{R}}{\widehat{f}}\Big)+ \frac{1}{c^2}(\widehat{f}\omega +cxy)\big(c^2f_{00}-\widehat{P} + \frac{R\widetilde{R}}{\widehat{f}}\big)$$ with $R(x,\omega):=\langle{\frac{V'(x) - V'(A)}{x-A}\frac{1}{\omega - BA}}\rangle$ (and likewise for $\widetilde{R}$), $\widehat{P}(x,y,\omega):=\langle{\frac{V'(x) - V'(A)}{x-A}\frac{1}{\omega - BA}\frac{\widetilde{V}'(y)-\widetilde{V}'(B)}{y-B}}\rangle$
R=((V-V.subs(x=A))/(x-A)).full_simplify()
R
-A^2*t4 - A*t4*x - t4*x^2 - t2
We remove the odd term (that gives 0 since $V$ and $\widetilde{V}$ are even) and rewrite the others with $f_{ij}$'s
R=R.coefficient(A,0)*f00+R.coefficient(A,2)*f20
R
-(t4*x^2 + t2)*f00 - f20*t4
RR=R.subs(x=y,t2=tt2,t4=tt4,f20=f02)
RR
-(tt4*y^2 + tt2)*f00 - f02*tt4
For $\widehat{P}$, we use the fact that $f_{11}=\omega f_{00} -t$
Ph=(((V-V.subs(x=A))/(x-A)).full_simplify()*((VV-VV.subs(y=B))/(y-B)).full_simplify()).expand()
Ph
A^2*B^2*t4*tt4 + A*B^2*t4*tt4*x + B^2*t4*tt4*x^2 + A^2*B*t4*tt4*y + A*B*t4*tt4*x*y + B*t4*tt4*x^2*y + A^2*t4*tt4*y^2 + A*t4*tt4*x*y^2 + t4*tt4*x^2*y^2 + A^2*t4*tt2 + B^2*t2*tt4 + A*t4*tt2*x + t4*tt2*x^2 + B*t2*tt4*y + t2*tt4*y^2 + t2*tt2
Ph=Ph.coefficient(A,0).coefficient(B,0)*f00+Ph.coefficient(A).coefficient(B)*(w*f00-t)+Ph.coefficient(A,2).coefficient(B,0)*f20+Ph.coefficient(A,0).coefficient(B,2)*f02+Ph.coefficient(A,2).coefficient(B,2)*f22
Ph
(f00*w - t)*t4*tt4*x*y + f22*t4*tt4 + (t4*tt4*x^2*y^2 + t4*tt2*x^2 + t2*tt4*y^2 + t2*tt2)*f00 + (t4*tt4*x^2 + t2*tt4)*f02 + (t4*tt4*y^2 + t4*tt2)*f20
Q=((-fh/c)*(V+c*y-x*R/fh)*(VV+c*x-y*RR/fh)+(1/c^2)*(fh*w+c*x*y)*(c^2*f00-Ph+R*RR/fh)).subs(f00=fh+c).full_simplify()
Q=Q.expand()
For $E$, we have: $E(x,y)=(V'(x)+cy)(\tilde V'(y)+cx)+ \frac{1}{c}P(x,y)- ct$ with $P(x,y)=\langle\frac{V'(x)-V'(A)}{x-A}\frac{\tilde V'(y)-\tilde V'(B)}{y-B}\rangle$
P=(((V-V.subs(x=A))/(x-A)).full_simplify()*((VV-VV.subs(y=B))/(y-B)).full_simplify()).expand()
P
A^2*B^2*t4*tt4 + A*B^2*t4*tt4*x + B^2*t4*tt4*x^2 + A^2*B*t4*tt4*y + A*B*t4*tt4*x*y + B*t4*tt4*x^2*y + A^2*t4*tt4*y^2 + A*t4*tt4*x*y^2 + t4*tt4*x^2*y^2 + A^2*t4*tt2 + B^2*t2*tt4 + A*t4*tt2*x + t4*tt2*x^2 + B*t2*tt4*y + t2*tt4*y^2 + t2*tt2
We remove the terms where the powers of $A$ and $B$ do not have the same parity, and replace the others by the corresponding $D_{ij}$, noting that $D_{00}=t$
P=P.coefficient(A,0).coefficient(B,0)*t+P.coefficient(A).coefficient(B)*D11+P.coefficient(A,2).coefficient(B,0)*D20+P.coefficient(A,0).coefficient(B,2)*D02+P.coefficient(A,2).coefficient(B,2)*D22
P
D11*t4*tt4*x*y + D22*t4*tt4 + (t4*tt4*x^2 + t2*tt4)*D02 + (t4*tt4*y^2 + t4*tt2)*D20 + (t4*tt4*x^2*y^2 + t4*tt2*x^2 + t2*tt4*y^2 + t2*tt2)*t
E=(V+c*y)*(VV+c*x)+(1/c)*P-c*t
E=E.expand()
Elimination of $f_{20}, f_{02}, f_{22}$¶
We will now eliminate the auxiliary functions $f_{20}, f_{02}, f_{22}$ from the system given by $\{[x^iy^j]E(x,y)=[x^iy^j]Q(x,y)\}, 0 \leq i, j \leq 4$ (some powers do not appear)
- the coefficients of $x^4$ and $x^3$ (and in $y^4, y^3$) are already equal
- the coefficients of $x^2$ and $y^2$ give a system on $f_{20}, f_{02}$
- the coefficient of $xy$ gives an equation on $f_{22}$
E.coefficient(x,4)-Q.coefficient(x,4)
0
E.coefficient(x,3)-Q.coefficient(x,3)
0
eq2x=E.coefficient(x,2)-Q.coefficient(x,2)
eq2x
-fh*t4*tt2*w/c - t4*tt2*w - f02*t4*tt4*w/c + f20*t4 + t*t4*tt2/c + D02*t4*tt4/c
eq2y=E.coefficient(y,2)-Q.coefficient(y,2)
f20s=solve([eq2x,eq2y],f20,f02)[0][0].rhs()
f02s=solve([eq2x,eq2y],f20,f02)[0][1].rhs()
f20s
-((c*t2 + fh*t2)*tt4*w^2 - c*t*tt2 - D02*c*tt4 + ((c^2 + c*fh)*tt2 - (t*t2 + D20*t4)*tt4)*w)/(t4*tt4*w^2 - c^2)
eqxy=E.coefficient(x,1)-Q.coefficient(x,1)
eqxy
fh*t4*tt4*w^2*y/c + fh^2*t4*tt4*w^2*y/c^2 - fh*t*t4*tt4*w*y/c^2 + D11*t4*tt4*y/c + f22*t4*tt4*y/c
f22s=solve(eqxy,f22)[0].rhs()
f22s
(fh*t*w - (c*fh + fh^2)*w^2 - D11*c)/c
Master equation on $\widehat{f}, \omega$ with the $D_{ij}$¶
We now replace $f_{20}, f_{02}, f_{22}$ by the above expressions in the constant coefficient in $Q(x,y)-E(x,y)$
eq=(E.coefficient(x,0).coefficient(y,0)-Q.coefficient(x,0).coefficient(y,0)).numerator()
eq=eq.subs(f20=f20s,f02=f02s,f22=f22s).numerator().full_simplify().factor()
eq.full_simplify()
fh^2*t*t4^3*tt4^3*w^6 - (c*fh^2 + fh^3)*t4^3*tt4^3*w^7 - c^8*t - (D11*c*fh*t4^3*tt4^3 + ((c^2*fh + c*fh^2)*t2*t4^2*tt2 + (c^4*fh - c^3*fh^2 - 2*c^2*fh^3)*t4^2)*tt4^2)*w^5 - ((c^3*fh + c^2*fh^2)*t4^2*tt2^2*tt4 - (D22*c^2*t4^3 + (D02*c^2 + D02*c*fh)*t2*t4^2)*tt4^3 + ((c^3*fh + c^2*fh^2)*t2^2*t4 + (c^4 + 2*c^2*fh^2)*t*t4^2 - ((c^2 + 2*c*fh)*t*t2*t4^2 + (D20*c^2 + D20*c*fh)*t4^3)*tt2)*tt4^2)*w^4 - ((D02*c*t*t2*t4^2 + D02*D20*c*t4^3)*tt4^3 - ((c^3 + 2*c^2*fh)*t*t2^2*t4 + (2*D11*c^3*fh + (D20*c^3 + 2*D20*c^2*fh)*t2)*t4^2 - (D20*c*t*t4^3 - (D02*c^3 + 2*D02*c^2*fh - c*t^2*t2)*t4^2)*tt2)*tt4^2 - ((c^3 + 2*c^2*fh)*t*t4^2*tt2^2 - (c^5 + 2*c^4*fh + c^3*fh^2)*t2*t4*tt2 + (2*c^6*fh + c^5*fh^2 - c^4*fh^3)*t4)*tt4)*w^3 - (D02^2*c^2*t4^2*tt4^3 + (c^6 + c^5*fh)*t4*tt2^2 + (D20^2*c^2*t4^3 + 2*D02*c^2*t*t4^2*tt2 + 2*(D22*c^4 + D20*c^2*t*t2)*t4^2 - (D02*c^3*fh*t2 - c^2*t^2*t2^2)*t4)*tt4^2 + (c^2*t^2*t4^2*tt2^2 + (c^6 + c^5*fh)*t2^2 - (2*c^6 + c^4*fh^2)*t*t4 - (D20*c^3*fh*t4^2 + 2*(c^4 + c^3*fh)*t*t2*t4)*tt2)*tt4)*w^2 + (c^6*t*t2 + D20*c^6*t4)*tt2 + (D02*c^6*t2 + D22*c^6*t4)*tt4 - (c^8*fh + c^7*fh^2 - c^5*t*t4*tt2^2 + (c^7 + c^6*fh)*t2*tt2 + (D02*c^3*t*t2*t4 + D02*D20*c^3*t4^2)*tt4^2 - (c^5*t*t2^2 - (D11*c^5*fh - D20*c^5*t2)*t4 - (D20*c^3*t*t4^2 - (D02*c^5 - c^3*t^2*t2)*t4)*tt2)*tt4)*w
eq.degree(fh)
3
eq.degree(w)
7
Explicit expressions for the $D_{ij}$¶
- We directly have $D_{20}$ as the coefficient of $x^{-3}$ in $cY(x)$
- We split $D_{11}$ as $(1/c)\left(t^2+t_2D_{20}+t_4D_{4}\right)$
- We split $D_{22}$ as $(1/c^2)\left(t^3+t_4D_{20}^2+3tt_2D_{20}+(t_2^2+3tt_4)D_{40}+2t_2t_4D_{60}+t_4^2D_{80}\right)$
- We extract the coefficients of $x^{-3}$, $x^{-5}$, $x^{-7}$, $x^{-9}$ in $cY(x)$ from
xparam,yparamby Lagrange inversion (we actually perform Lagrange inversion between $x^{-1}$ and $u=z^{-1}$ as it is slightly simpler)
var('u');
Upsilon=c*yparam.subs(z=u^(-1))
Uprime=diff(Upsilon,u)
Phi=((xparam/z).collect(z)).subs(z=u^(-1))
D20s=(1/3)*(Uprime*Phi^3).collect(u).coefficient(u,2)
D20s
-a1^3*b3*c - a1^2*b1*c*g - 6*a1*a3*b3*c*g - a3*b1*c*g^2 + a1*c*g^3
D40s=(1/5)*(Uprime*Phi^5).collect(u).coefficient(u,4)
D60s=(1/7)*(Uprime*Phi^7).collect(u).coefficient(u,6)
D80s=(1/9)*(Uprime*Phi^9).collect(u).coefficient(u,8)
D11s=(1/c)*(t^2+t2*D20s+t4*D40s).subs(sol).factor()
D11s
-(a1*a3*b1*b3 - 3*a3^2*b3^2 + a3*b1^2*g + a1^2*b3*g + a1*b1*g^2 + 5*a3*b3*g^2 - g^4)*c
D02s=D20s.subs(a1=b1,a3=b3,b1=a1,b3=a3)
D02s
-a3*b1^3*c - a1*b1^2*c*g - 6*a3*b1*b3*c*g - a1*b3*c*g^2 + b1*c*g^3
D22s=(1/c^2)*(t^3+t4*D20s^2+3*t*t2*D20s+(t2^2+3*t*t4)*D40s+2*t2*t4*D60s+t4^2*D80s).subs(sol).factor()
D22s
-(a1^2*a3*b1^2*b3 - 2*a1*a3^2*b1*b3^2 + a3^3*b3^3 + a1*a3*b1^3*g + a1^3*b1*b3*g + 2*a3^2*b1^2*b3*g + 2*a1^2*a3*b3^2*g + a1^2*b1^2*g^2 + 11*a1*a3*b1*b3*g^2 - 4*a3^2*b3^2*g^2 + 2*a3*b1^2*g^3 + 2*a1^2*b3*g^3 + 6*a3*b3*g^4 - g^6)*c
Master equations for $(\omega,\widehat{f})$ and $(\zeta,\lambda)$¶
We now replace the $D_{ij}$ and $t, t_i,\widetilde{t}_j$ by their expressions in terms of $c,\gamma,\alpha_k,\beta_\ell$
eqwf=eq.subs(D20=D20s,D02=D02s,D11=D11s,D22=D22s).subs(sol).numerator().factor()
We then perform the transformation from $(\omega, \widehat{f})$ to $(\zeta, \lambda)$, with
- $\lambda=\hat{f}\omega$
- $\zeta=\omega+\frac{\gamma^6}{\alpha_3\beta_3\omega}$
var('l, zt');
We straightforwardly substitute $\widehat{f}$ by $\lambda/\omega$
eql=eqwf.subs(fh=l/w).numerator()
eql.variables()
(a1, a3, b1, b3, c, g, l, w)
eql.degree(l)
3
eql.degree(w)
6
We then take the resultant between the equation on $\omega,\lambda$ and the equation on $\omega, \zeta$
eqzf=(zt-w-g^6/(a3*b3*w)).numerator()
eqzf
-g^6 - a3*b3*w^2 + a3*b3*w*zt
eqzl=eql.resultant(eqzf,w).factor()
The resultant we compute is actually a square (up to a multiplicative constant), so we have to extract its squareroot
eqzl.number_of_operands()
5
eqlz.operands()[0]
(a3^5*b1^6*b3^2*c^3*g^3 + a1^6*a3^2*b3^5*c^3*g^3 - 4*a1*a3^4*b1^5*b3^2*c^3*g^4 - 6*a3^5*b1^4*b3^3*c^3*g^4 - 4*a1^5*a3^2*b1*b3^4*c^3*g^4 - 6*a1^4*a3^3*b3^5*c^3*g^4 + 6*a1^2*a3^3*b1^4*b3^2*c^3*g^5 + 6*a1^4*a3^2*b1^2*b3^3*c^3*g^5 + 20*a1*a3^4*b1^3*b3^3*c^3*g^5 + 20*a1^3*a3^3*b1*b3^4*c^3*g^5 + 9*a3^5*b1^2*b3^4*c^3*g^5 + 9*a1^2*a3^4*b3^5*c^3*g^5 - 8*a1^3*a3^2*b1^3*b3^2*c^3*g^6 + 4*a3^4*b1^4*b3^2*c^3*g^6 - 48*a1^2*a3^3*b1^2*b3^3*c^3*g^6 + 4*a1^4*a3^2*b3^4*c^3*g^6 - 40*a1*a3^4*b1*b3^4*c^3*g^6 - 4*a3^5*b3^5*c^3*g^6 + a1^2*a3^2*b1^4*b3*c^3*g^7 + a1^4*a3*b1^2*b3^2*c^3*g^7 - 4*a3^4*b1^2*b3^3*c^3*g^7 - 4*a1^2*a3^3*b3^4*c^3*g^7 - 2*a3^3*b1^4*b3*c^3*g^8 + 24*a1^2*a3^2*b1^2*b3^2*c^3*g^8 - 2*a1^4*a3*b3^3*c^3*g^8 + 72*a1*a3^3*b1*b3^3*c^3*g^8 + 16*a3^4*b3^4*c^3*g^8 - 4*a1*a3^2*b1^3*b3*c^3*g^9 - 4*a1^3*a3*b1*b3^2*c^3*g^9 - 18*a3^3*b1^2*b3^2*c^3*g^9 - 18*a1^2*a3^2*b3^3*c^3*g^9 - 24*a1*a3^2*b1*b3^2*c^3*g^10 - 24*a3^3*b3^3*c^3*g^10 + 12*a3^2*b1^2*b3*c^3*g^11 + 12*a1^2*a3*b3^2*c^3*g^11 - 8*a1*a3*b1*b3*c^3*g^12 + 16*a3^2*b3^2*c^3*g^12 + a3*b1^2*c^3*g^13 + a1^2*b3*c^3*g^13 - 4*a3*b3*c^3*g^14 + a1^3*a3^4*b1^3*b3^4*c^3*zt - 2*a1^2*a3^4*b1^4*b3^3*c^3*g*zt - 2*a1^4*a3^3*b1^2*b3^4*c^3*g*zt - 3*a1*a3^5*b1^3*b3^4*c^3*g*zt - 3*a1^3*a3^4*b1*b3^5*c^3*g*zt + a1*a3^4*b1^5*b3^2*c^3*g^2*zt + 4*a1^3*a3^3*b1^3*b3^3*c^3*g^2*zt + 4*a3^5*b1^4*b3^3*c^3*g^2*zt + a1^5*a3^2*b1*b3^4*c^3*g^2*zt + 12*a1^2*a3^4*b1^2*b3^4*c^3*g^2*zt + 4*a1^4*a3^3*b3^5*c^3*g^2*zt + 9*a1*a3^5*b1*b3^5*c^3*g^2*zt - 2*a1^2*a3^3*b1^4*b3^2*c^3*g^3*zt - 2*a1^4*a3^2*b1^2*b3^3*c^3*g^3*zt - 9*a1*a3^4*b1^3*b3^3*c^3*g^3*zt - 9*a1^3*a3^3*b1*b3^4*c^3*g^3*zt - 12*a3^5*b1^2*b3^4*c^3*g^3*zt - 12*a1^2*a3^4*b3^5*c^3*g^3*zt + a1^3*a3^2*b1^3*b3^2*c^3*g^4*zt - 4*a3^4*b1^4*b3^2*c^3*g^4*zt - 4*a1^4*a3^2*b3^4*c^3*g^4*zt + 4*a1*a3^4*b1*b3^4*c^3*g^4*zt + 11*a1*a3^3*b1^3*b3^2*c^3*g^5*zt + 11*a1^3*a3^2*b1*b3^3*c^3*g^5*zt + 20*a3^4*b1^2*b3^3*c^3*g^5*zt + 20*a1^2*a3^3*b3^4*c^3*g^5*zt - 12*a1^2*a3^2*b1^2*b3^2*c^3*g^6*zt - 34*a1*a3^3*b1*b3^3*c^3*g^6*zt + a1*a3^2*b1^3*b3*c^3*g^7*zt + a1^3*a3*b1*b3^2*c^3*g^7*zt - 4*a3^3*b1^2*b3^2*c^3*g^7*zt - 4*a1^2*a3^2*b3^3*c^3*g^7*zt + 20*a1*a3^2*b1*b3^2*c^3*g^8*zt - 4*a3^2*b1^2*b3*c^3*g^9*zt - 4*a1^2*a3*b3^2*c^3*g^9*zt + a1*a3*b1*b3*c^3*g^10*zt - 6*a3^4*b1^4*b3^2*c^2*g^4*l - 6*a1^4*a3^2*b3^4*c^2*g^4*l + 14*a1*a3^3*b1^3*b3^2*c^2*g^5*l + 14*a1^3*a3^2*b1*b3^3*c^2*g^5*l + 18*a3^4*b1^2*b3^3*c^2*g^5*l + 18*a1^2*a3^3*b3^4*c^2*g^5*l - 20*a1^2*a3^2*b1^2*b3^2*c^2*g^6*l - 56*a1*a3^3*b1*b3^3*c^2*g^6*l - 12*a3^4*b3^4*c^2*g^6*l + 2*a1*a3^2*b1^3*b3*c^2*g^7*l + 2*a1^3*a3*b1*b3^2*c^2*g^7*l + 24*a1*a3^2*b1*b3^2*c^2*g^8*l + 20*a3^3*b3^3*c^2*g^8*l - 2*a3^2*b1^2*b3*c^2*g^9*l - 2*a1^2*a3*b3^2*c^2*g^9*l - 4*a3^2*b3^2*c^2*g^10*l - 4*a3*b3*c^2*g^12*l + a1^2*a3^4*b1^2*b3^4*c^3*zt^2 - 2*a1*a3^5*b1*b3^5*c^3*zt^2 + a3^6*b3^6*c^3*zt^2 - 2*a1*a3^4*b1^3*b3^3*c^3*g*zt^2 - 2*a1^3*a3^3*b1*b3^4*c^3*g*zt^2 + 2*a3^5*b1^2*b3^4*c^3*g*zt^2 + 2*a1^2*a3^4*b3^5*c^3*g*zt^2 + a3^4*b1^4*b3^2*c^3*g^2*zt^2 + 4*a1^2*a3^3*b1^2*b3^3*c^3*g^2*zt^2 + a1^4*a3^2*b3^4*c^3*g^2*zt^2 + 2*a1*a3^4*b1*b3^4*c^3*g^2*zt^2 - 4*a3^5*b3^5*c^3*g^2*zt^2 - 2*a1*a3^3*b1^3*b3^2*c^3*g^3*zt^2 - 2*a1^3*a3^2*b1*b3^3*c^3*g^3*zt^2 - 4*a3^4*b1^2*b3^3*c^3*g^3*zt^2 - 4*a1^2*a3^3*b3^4*c^3*g^3*zt^2 + a1^2*a3^2*b1^2*b3^2*c^3*g^4*zt^2 + 2*a1*a3^3*b1*b3^3*c^3*g^4*zt^2 + 6*a3^4*b3^4*c^3*g^4*zt^2 + 2*a3^3*b1^2*b3^2*c^3*g^5*zt^2 + 2*a1^2*a3^2*b3^3*c^3*g^5*zt^2 - 2*a1*a3^2*b1*b3^2*c^3*g^6*zt^2 - 4*a3^3*b3^3*c^3*g^6*zt^2 + a3^2*b3^2*c^3*g^8*zt^2 - 3*a1*a3^4*b1^3*b3^3*c^2*g*l*zt - 3*a1^3*a3^3*b1*b3^4*c^2*g*l*zt + a3^4*b1^4*b3^2*c^2*g^2*l*zt + 12*a1^2*a3^3*b1^2*b3^3*c^2*g^2*l*zt + a1^4*a3^2*b3^4*c^2*g^2*l*zt + 18*a1*a3^4*b1*b3^4*c^2*g^2*l*zt - 5*a1*a3^3*b1^3*b3^2*c^2*g^3*l*zt - 5*a1^3*a3^2*b1*b3^3*c^2*g^3*l*zt - 15*a3^4*b1^2*b3^3*c^2*g^3*l*zt - 15*a1^2*a3^3*b3^4*c^2*g^3*l*zt + 2*a1^2*a3^2*b1^2*b3^2*c^2*g^4*l*zt - 4*a1*a3^3*b1*b3^3*c^2*g^4*l*zt + 14*a3^3*b1^2*b3^2*c^2*g^5*l*zt + 14*a1^2*a3^2*b3^3*c^2*g^5*l*zt - 14*a1*a3^2*b1*b3^2*c^2*g^6*l*zt + a3^2*b1^2*b3*c^2*g^7*l*zt + a1^2*a3*b3^2*c^2*g^7*l*zt + 9*a3^3*b1^2*b3^2*c*g^5*l^2 + 9*a1^2*a3^2*b3^3*c*g^5*l^2 - 16*a1*a3^2*b1*b3^2*c*g^6*l^2 - 12*a3^3*b3^3*c*g^6*l^2 + a3^2*b1^2*b3*c*g^7*l^2 + a1^2*a3*b3^2*c*g^7*l^2 + 4*a3^2*b3^2*c*g^8*l^2 - a1*a3^4*b1*b3^4*c^2*l*zt^2 + 3*a3^5*b3^5*c^2*l*zt^2 - a3^4*b1^2*b3^3*c^2*g*l*zt^2 - a1^2*a3^3*b3^4*c^2*g*l*zt^2 + 8*a1*a3^3*b1*b3^3*c^2*g^2*l*zt^2 - 5*a3^4*b3^4*c^2*g^2*l*zt^2 - 3*a3^3*b1^2*b3^2*c^2*g^3*l*zt^2 - 3*a1^2*a3^2*b3^3*c^2*g^3*l*zt^2 + a1*a3^2*b1*b3^2*c^2*g^4*l*zt^2 + a3^3*b3^3*c^2*g^4*l*zt^2 + a3^2*b3^2*c^2*g^6*l*zt^2 + 9*a1*a3^3*b1*b3^3*c*g^2*l^2*zt - 3*a3^3*b1^2*b3^2*c*g^3*l^2*zt - 3*a1^2*a3^2*b3^3*c*g^3*l^2*zt + a1*a3^2*b1*b3^2*c*g^4*l^2*zt - 4*a3^2*b3^2*c*g^6*l^2*zt - 4*a3^2*b3^2*g^6*l^3 + a1*a3^3*b1*b3^3*c*l^2*zt^2 + 3*a3^4*b3^4*c*l^2*zt^2 - a3^3*b3^3*c*g^2*l^2*zt^2 + a3^3*b3^3*c*l^2*zt^3 + a3^3*b3^3*l^3*zt^2)^2
eqzl/(eqzl.operands()[0])
a3^3*b3^3*c^12*g^18
eq4zl=eqzl.operands()[0].operands()[0]
The final equation eq4lz has degree 3 in $\zeta$ and in $\lambda$
eq4zl.degree(zt)
3
eq4zl.degree(l)
3
The symmetric case (Section 5.3)¶
Equation in $(\zeta,\lambda)$ in the symmetric case¶
We specialize the parameters to be symmetric: a factor of degree 1 in $\zeta$ (and constant in $\lambda$) pops out in the equation on $\lambda, \zeta$, so that the actual equation is only of degree 2 in $\zeta$.
eq4zlsym=eq4zl.subs(b1=a1,b3=a3).factor()
eq4zlsym.number_of_operands()
3
eq4zlsym.operands()[1]
2*g^3 + a3*zt
eq4zlsym.operands()[2]
a3
eqzlsym=eq4zlsym.operands()[0]
eqzlsym
a1^6*a3^6*c^3 - 4*a1^6*a3^5*c^3*g - 6*a1^4*a3^7*c^3*g + 6*a1^6*a3^4*c^3*g^2 + 20*a1^4*a3^6*c^3*g^2 + 9*a1^2*a3^8*c^3*g^2 - 4*a1^6*a3^3*c^3*g^3 - 20*a1^4*a3^5*c^3*g^3 - 20*a1^2*a3^7*c^3*g^3 - 2*a3^9*c^3*g^3 + a1^6*a3^2*c^3*g^4 - 4*a1^2*a3^6*c^3*g^4 + 10*a1^4*a3^3*c^3*g^5 + 36*a1^2*a3^5*c^3*g^5 + 8*a3^7*c^3*g^5 - 4*a1^4*a3^2*c^3*g^6 - 18*a1^2*a3^4*c^3*g^6 - 12*a1^2*a3^3*c^3*g^7 - 12*a3^5*c^3*g^7 + 12*a1^2*a3^2*c^3*g^8 - 4*a1^2*a3*c^3*g^9 + 8*a3^3*c^3*g^9 + a1^2*c^3*g^10 - 2*a3*c^3*g^11 + a1^4*a3^6*c^3*zt - 2*a1^2*a3^8*c^3*zt + a3^10*c^3*zt - 4*a1^4*a3^5*c^3*g*zt + 4*a1^2*a3^7*c^3*g*zt + 6*a1^4*a3^4*c^3*g^2*zt + 2*a1^2*a3^6*c^3*g^2*zt - 4*a3^8*c^3*g^2*zt - 4*a1^4*a3^3*c^3*g^3*zt - 8*a1^2*a3^5*c^3*g^3*zt + a1^4*a3^2*c^3*g^4*zt + 2*a1^2*a3^4*c^3*g^4*zt + 6*a3^6*c^3*g^4*zt + 4*a1^2*a3^3*c^3*g^5*zt - 2*a1^2*a3^2*c^3*g^6*zt - 4*a3^4*c^3*g^6*zt + a3^2*c^3*g^8*zt - 6*a1^4*a3^5*c^2*g*l + 14*a1^4*a3^4*c^2*g^2*l + 18*a1^2*a3^6*c^2*g^2*l - 10*a1^4*a3^3*c^2*g^3*l - 28*a1^2*a3^5*c^2*g^3*l - 6*a3^7*c^2*g^3*l + 2*a1^4*a3^2*c^2*g^4*l + 12*a1^2*a3^3*c^2*g^5*l + 10*a3^5*c^2*g^5*l - 2*a1^2*a3^2*c^2*g^6*l - 2*a3^3*c^2*g^7*l - 2*a3*c^2*g^9*l - a1^2*a3^6*c^2*l*zt + 3*a3^8*c^2*l*zt - 2*a1^2*a3^5*c^2*g*l*zt + 8*a1^2*a3^4*c^2*g^2*l*zt - 5*a3^6*c^2*g^2*l*zt - 6*a1^2*a3^3*c^2*g^3*l*zt + a1^2*a3^2*c^2*g^4*l*zt + a3^4*c^2*g^4*l*zt + a3^2*c^2*g^6*l*zt + 9*a1^2*a3^4*c*g^2*l^2 - 8*a1^2*a3^3*c*g^3*l^2 - 6*a3^5*c*g^3*l^2 + a1^2*a3^2*c*g^4*l^2 + 2*a3^3*c*g^5*l^2 + a1^2*a3^4*c*l^2*zt + 3*a3^6*c*l^2*zt - a3^4*c*g^2*l^2*zt - 2*a3^3*c*g^3*l^2*zt - 2*a3^3*g^3*l^3 + a3^4*c*l^2*zt^2 + a3^4*l^3*zt
eqzlsym.degree(zt)
2
eqzlsym.degree(l)
3
Rational parametrization for $(\zeta,\lambda)$¶
The discriminant of eqzlsym (as a quadratic polynomial in $\zeta$), seen as a polynomial in $\lambda$, has only 2 simple roots, and the rest are double roots. Thus, we can perform a Zhukovsky transformation
discr=(eqzlsym.coefficient(zt,1)^2-4*eqzlsym.coefficient(zt,0)*eqzlsym.coefficient(zt,2)).factor()
discr
(a1*a3^2*c + a3^3*c - 2*a1*a3*c*g - a3^2*c*g + a1*c*g^2 - a3*c*g^2 + c*g^3 + a3*l)^2*(a1*a3^2*c - a3^3*c - 2*a1*a3*c*g + a3^2*c*g + a1*c*g^2 + a3*c*g^2 - c*g^3 - a3*l)^2*(a1^2*c + 2*a1*a3*c + a3^2*c + 2*a1*c*g + 2*a3*c*g + c*g^2 + l)*(a1^2*c - 2*a1*a3*c + a3^2*c - 2*a1*c*g + 2*a3*c*g + c*g^2 + l)*a3^4
dblpoles=discr.operands()[0].operands()[0]*discr.operands()[1].operands()[0]*a3^2
discr.operands()[2]
a1^2*c + 2*a1*a3*c + a3^2*c + 2*a1*c*g + 2*a3*c*g + c*g^2 + l
ls1=l-discr.operands()[2]
discr.subs(l=ls1)
0
ls2=l-discr.operands()[3]
discr.subs(l=ls2)
0
var('H');
lH=(ls1+ls2)/2+(ls1-ls2)/4*(H+1/H)
lH.factor()
-(H*a1 + a3 + g)*(H*a3 + H*g + a1)*c/H
smppoles=((ls1-ls2)/4*(H-1/H))
The symmetry $H\leftrightarrow \frac{1}{H}$ leaves $\lambda(H)$ unchanged and exchanges the two solutions to the quadratic equation in $\zeta$: we pick the convention that will give $\omega\to\infty$ for $H\to\infty$, which imposes the choice of $\zeta(H)$, which is zHp below
zHp=((-eqzlsym.coefficient(zt,1)+dblpoles*smppoles)/(2*eqzlsym.coefficient(zt,2))).subs(l=lH).full_simplify()
zHm=((-eqzlsym.coefficient(zt,1)-dblpoles*smppoles)/(2*eqzlsym.coefficient(zt,2))).subs(l=lH).full_simplify()
(lH/zHp).taylor(H,oo,0)
-c
(lH/zHm).taylor(H,oo,0)
-1/2*(a1*a3^2*c + a1*a3*c*g)*H/g^3 + 1/4*(9*a1^2*a3^2*c - 2*a3*c*g^3 + (a1^2 - 4*a3^2)*c*g^2 - 2*(4*a1^2*a3 + a3^3)*c*g)/g^4
Rational parametrization for $(\omega,\widehat{f})$¶
The equation eqzf relating $\zeta$ to $\omega$ is a quadratic equation whose discriminant (which is quadratic in $\zeta$) is also amenable to a Zhukovsky transformation when $\zeta$ is replaced by $\zeta(H)$: we express $H$ as a rational function of the second Zhukovsky variable $h$, and thus the relevant root $\omega(h)$ of eqzf, as well as $\widehat{f}(h)=\lambda(H(h))/\omega(h)$, are rational functions of $h$.
disw=(eqzf.coefficient(w,1)^2-4*eqzf.coefficient(w,2)*eqzf.coefficient(w,0)).subs(b3=a3).factor()
dHp=disw.subs(zt=zHp).factor()
dHp
(H*a1*a3 + H*a1*g + 4*a3*g)*(H*a1*a3 + 3*a3*g - g^2)^2*(H*a1*a3 + a3*g + g^2)^2*H*a1*(a3 + g)/(H*a1 + a3 + g)^4
dblpolew=dHp.operands()[1].operands()[0]*dHp.operands()[2].operands()[0]/(dHp.operands()[3].operands()[0])^2
dblpolew
(H*a1*a3 + 3*a3*g - g^2)*(H*a1*a3 + a3*g + g^2)/(H*a1 + a3 + g)^2
var('h');
H1=(H-(dHp.operands()[0])/dHp.operands()[0].coefficient(H,1)).full_simplify()
dHp.operands()[0].subs(H=H1).full_simplify()
0
H2=0
dHp.subs(H=H2)
0
Hh=(H1+H2)/2+(H2-H1)/4*(h+1/h)
Hh.normalize()
(a3*g*h^2 - 2*a3*g*h + a3*g)/((a1*a3 + a1*g)*h)
(dHp/(dblpolew^2)).subs(H=Hh).factor()
a3^2*g^2*(h + 1)^2*(h - 1)^2/h^2
smppolew=a3*g*(h-1/h)
(smppolew^2).factor()
a3^2*g^2*(h + 1)^2*(h - 1)^2/h^2
sqdiswh=smppolew*dblpolew.subs(H=Hh)
The rational parametrization of $\omega,\widehat{f}$ for symmetric Ising quadrangulations:
We pick the solution whb of $\zeta(\omega)=\zeta(H(h))$, that satisfies $\omega\to\infty$ when $h \to \infty$
whb=((-eqzf.coefficient(w,1).subs(zt=zHp,b3=a3).subs(H=Hh)-sqdiswh)/(2*eqzf.coefficient(w,2).subs(zt=zHp,b3=a3).subs(H=Hh))).factor()
whb
(a3*h + g)^2*g^3*h/((g*h + a3)^2*a3)
fhhb=(lH.subs(H=Hh)/whb).factor()
fhhb
-(a3*g*h^2 + a1^2*h - 2*a3*g*h + a3*g)*(g*h + a3)^3*c/((a3*h + g)*g^4*(h - 1)^2*h^2)
Non-corationality of $(\omega,\widehat{f})$ and $(x,y)$ when imposing the "kernel relation" $\omega\widehat{f}=-cxy$¶
We write the algebraic relation $\lambda(H)=-c\xi(Z)$ with $x(z)y(z)=\xi(z^2)$: if we could have a joint rational parametrization of $(\omega,\hat{f}(\omega))$ and $x,Y(x)$, then necessarily this relation on $H$ and $Z$ would correspond to a rational curve (i.e. would admit a rational parametrization), since the parametrizations in $h$ and $z$ are proper.
eqHz=(lH+c*(xparam*yparam).subs(b1=a1,b3=a3)).numerator().factor()
eqHz
(H*a3*g*z^8 + H*a1*a3*z^6 + H*a1*g*z^6 - H^2*a1*a3*z^4 - H^2*a1*g*z^4 - 2*H*a3*g*z^4 - a1*a3*z^4 - a1*g*z^4 + H*a1*a3*z^2 + H*a1*g*z^2 + H*a3*g)*c
var('Z');
eqHZ=eqHz.subs(z=Z^(1/2)).factor()
eqHZ
(H*Z^4*a3*g - H^2*Z^2*a1*a3 + H*Z^3*a1*a3 - H^2*Z^2*a1*g + H*Z^3*a1*g - 2*H*Z^2*a3*g + H*Z*a1*a3 - Z^2*a1*a3 + H*Z*a1*g - Z^2*a1*g + H*a3*g)*c
discHZ=(eqHZ.coefficient(H,1)^2-4*eqHZ.coefficient(H,0)*eqHZ.coefficient(H,2)).factor()
discHZ
(Z^2*a3*g + Z*a1*a3 + Z*a1*g + 2*Z*a3*g + a3*g)*(Z^2*a3*g + Z*a1*a3 + Z*a1*g - 2*Z*a3*g + a3*g)*(Z + 1)^2*(Z - 1)^2*c^2
solve((Z^2*a3*g + Z*a1*a3 + Z*a1*g + 2*Z*a3*g + a3*g)*(Z^2*a3*g + Z*a1*a3 + Z*a1*g - 2*Z*a3*g + a3*g),Z)
[Z == -1/2*(a1*a3 + (a1 + 2*a3)*g + sqrt(a1^2*a3^2 + (a1^2 + 4*a1*a3)*g^2 + 2*(a1^2*a3 + 2*a1*a3^2)*g))/(a3*g), Z == -1/2*(a1*a3 + (a1 + 2*a3)*g - sqrt(a1^2*a3^2 + (a1^2 + 4*a1*a3)*g^2 + 2*(a1^2*a3 + 2*a1*a3^2)*g))/(a3*g), Z == -1/2*(a1*a3 + (a1 - 2*a3)*g + sqrt(a1^2*a3^2 + (a1^2 - 4*a1*a3)*g^2 + 2*(a1^2*a3 - 2*a1*a3^2)*g))/(a3*g), Z == -1/2*(a1*a3 + (a1 - 2*a3)*g - sqrt(a1^2*a3^2 + (a1^2 - 4*a1*a3)*g^2 + 2*(a1^2*a3 - 2*a1*a3^2)*g))/(a3*g)]