# Experiment 4: Equations on a Bott-Samelson variety¶

Defining $$B \subseteq GL_3$$ as the subgroup of upper-triangular matrices, $$GL_3/B$$ is birational to a Bott-Samelson variety. We draw a random complex square polynomial system on $$GL_3/B$$ from the Khovanskii basis

$\mathcal{B} = \{1,x,y,z,xz,yz,x(xz+y),y(xz+y)\}.$

That is, we consider the system

$\hat{f}_i = c_{i,1}\;1 + c_{i,2}\;x + c_{i,3}\;y + c_{i,4}\;z + c_{i,5}\;xz + c_{i,6}\;yz + c_{i,7}\;x^2z + c_{i,8}\; xyz + c_{i,7}\;xy + c_{i,8}\;y^2 ,$

where $$i \in \{1,2,3\}$$ and $$c_{i,j} \in \mathbb{C}$$ for $$i = 1,2,3$$ and $$j = 1, \ldots, 8$$.

We start by including our routines.

:

include("CoxHomotopy.jl")

:

trackPathRandom (generic function with 1 method)


We generate equations for random $$c_{i,j}$$.

:

n = 3;
@polyvar t[1:n];

#Define Khovanskii basis
KB = fill(zero(typeof((0.0+0.0im)*prod(t))),8);
KB=1.0+ 0.0im + 0.0*prod(t);
KB=(1.0+0.0im)*t;
KB=(1.0+0.0im)*t;
KB=(1.0+0.0im)*t;
KB=(1.0+0.0im)*t*t;
KB=(1.0+0.0im)*t*t;
KB=(1.0+0.0im)*t*(t*t+t);
KB=(1.0+0.0im)*t*(t*t+t);
C = randn(ComplexF64, n, 8);

# System of polynomials on a Bott-Samelson variety
f̂ = C*KB;


We solve the system using the Cox homotopy. We use the option print_progress to display some information about the intermediate computations.

:

@time homSols, f, toricSols, Fᵀ, x̂, K, B, data = coxHomotopy(f̂; fixSlice = true, details = true, print_progress = true);


======================== COX HOMOTOPY - OFFLINE PHASE ========================
Computing polytope information...
Solving start system...
======================== COX HOMOTOPY - ONLINE PHASE ========================
Moving the linear slice to the input slice
Cox homotopy: pre-endgame
number of solutions at τ = endgameStart: 10
Entering end game...
finalizing path 1...
path 1 landed on orbit.
finalizing path 2...
path 2 landed on orbit.
finalizing path 3...
path 3 landed on orbit.
finalizing path 4...
trying other representatives for path 4
trying representative 1
success! Landed on singular point...
finalizing path 5...
path 5 landed on orbit.
finalizing path 6...
path 6 landed on orbit.
finalizing path 7...
path 7 landed on orbit.
finalizing path 8...
path 8 landed on orbit.
finalizing path 9...
path 9 landed on orbit.
finalizing path 10...
path 10 landed on orbit.
0.157846 seconds (236.42 k allocations: 16.009 MiB)


The printed information shows that in order to finalize path number 4, we had to switch representatives in the end game. This path lands on a special divisor for $$\tau = 0$$. Points in this divisor correspond to $$G$$-orbits whose projective closure has subgeneric degree.

We compute the residual of the obtained solutions in toric and homogeneous coordinates

:

display(get_residual(f̂,toricSols,t))
display(get_residual(f,homSols,variables(f)))

10-element Array{Float64,1}:
4.973585016762915e-16
1.3036755790878446e-15
6.297441035829103e-16
1.9356305182076202e-15
5.990191925599055e-15
2.0104313355750125e-15
4.416668536118708e-16
1.0560882672741514e-15
3.886866048530707e-16
7.288395427869488e-16

10-element Array{Float64,1}:
6.708704089148305e-16
5.294540405624457e-16
6.67057469596285e-16
1.1683582544548875e-15
9.209842411159509e-16
3.6567161168619727e-16
2.3549586511150656e-16
2.9410409268023114e-16
7.812712464917738e-16
6.28427644045285e-16


We visualize the magnitude of the homogeneous coordinates and conclude that 4 out of the 10 computed solutions lie on the divisor $$D_3$$. This is similar to what we did in the notebook on Experiment 2. Note that, in particular, the solution corresponding to the fourth column is on this divisor, which corresponds to our observation above.

:

using PyPlot
imshow(log10.(abs.(hcat(homSols...)))) :

PyObject <matplotlib.image.AxesImage object at 0x14e11cc40>


From the facet matrix $$F^\top$$ we see that this divisor corresponds to the facet with normal vector $$[-1~-1~0]$$.

:

Fᵀ

:

7×3 Array{Int64,2}:
0   0  -1
0   1   0
-1  -1   0
0   0   1
0  -1  -1
1   0   0
-1   0   1