Tropical solutions to the scattering equations for \(X(3,7)\) (Example 8.1)

[1]:
using LikelihoodDegenerations
using HomotopyContinuation
using CapAndHomalg
 ┌───────┐   GAP 4.12dev-1006-g1acc687-dirty built on 2021-07-26 13:31:53+0000
 │  GAP  │   https://www.gap-system.org
 └───────┘   Architecture: x86_64-apple-darwin14-julia64-kv8
 Configuration:  gmp 6.2.0, Julia GC, Julia 1.6.0
 Loading the library and packages ...
 Packages:   AClib 1.3.2, Alnuth 3.1.2, AtlasRep 2.1.0, AutoDoc 2020.08.11,
             AutPGrp 1.10.2, CRISP 1.4.5, Cryst 4.1.23, CrystCat 1.1.9,
             CTblLib 1.3.1, FactInt 1.6.3, FGA 1.4.0, Forms 1.2.5,
             GAPDoc 1.6.4, genss 1.6.6, IO 4.7.1, IRREDSOL 1.4.1,
             JuliaInterface 0.6.0, LAGUNA 3.9.3, orb 4.8.3, Polenta 1.3.9,
             Polycyclic 2.16, PrimGrp 3.4.1, RadiRoot 2.8, recog 1.3.2,
             ResClasses 4.7.2, SmallGrp 1.4.2, Sophus 1.24, SpinSym 1.5.2,
             TomLib 1.2.9, TransGrp 3.0, utils 0.69
 Try '??help' for help. See also '?copyright', '?cite' and '?authors'
CapAndHomalg v1.1.7
Imported OSCAR's components GAP and Singular_jll
Type: ?CapAndHomalg for more information
[2]:
LoadPackage("images")
SetInfoLevel(InfoWarning,0)

We compute the tropical solutions to the soft limit scattering equations for \(X(3,7)\)

These tropical solutions are discussed in Sections 6 and 7. The computation below is Example 8.1.

[3]:
Z = X(3,7)
***********************************
[3]:
Realized matroid in dimensions (3, 7)
3×7 Matrix{Expression}:
 1  0  0  1   1   1   1
 0  1  0  1  a1  a3  a5
 0  0  1  1  a2  a4  a6
With equations
Expression[]
and 0 vanishing Plucker coordinate(s)

First, we construct the maximum likelihood equations for \(X(3,7)\); also known as scattering equations

[4]:
ML_eqs = maximum_likelihood_equations(Z)
[4]:
System of length 6
 6 variables: a1, a2, a3, a4, a5, a6
 29 parameters: s₁₋₃₋₄, s₁₋₂₋₅, s₁₋₃₋₅, s₁₋₄₋₅, s₂₋₄₋₅, s₃₋₄₋₅, s₁₋₂₋₆, s₁₋₃₋₆, s₁₋₄₋₆, s₂₋₄₋₆, s₃₋₄₋₆, s₁₋₅₋₆, s₂₋₅₋₆, s₃₋₅₋₆, s₄₋₅₋₆, s₁₋₂₋₇, s₁₋₃₋₇, s₁₋₄₋₇, s₂₋₄₋₇, s₃₋₄₋₇, s₁₋₅₋₇, s₂₋₅₋₇, s₃₋₅₋₇, s₄₋₅₋₇, s₁₋₆₋₇, s₂₋₆₋₇, s₃₋₆₋₇, s₄₋₆₋₇, s₅₋₆₋₇

 s₁₋₃₋₅/a1 + s₃₋₄₋₅/(-1 + a1) - s₁₋₄₋₅/(-a1 + a2) - s₃₋₅₋₇/(-a1 + a5) - s₃₋₅₋₆/(-a1 + a3) + (a4 - a6)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) + a6*s₁₋₅₋₇/(a1*a6 - a2*a5) + a4*s₁₋₅₋₆/(-a3*a2 + a4*a1) + (-1 + a6)*s₄₋₅₋₇/(-a1 + a5 + a1*a6 - a2*a5 - (-a2 + a6)) + (-1 + a4)*s₄₋₅₋₆/(-a1 + a3 - a3*a2 + a4*a1 - (-a2 + a4))
 s₁₋₂₋₅/a2 + s₂₋₄₋₅/(-1 + a2) + s₁₋₄₋₅/(-a1 + a2) - s₂₋₅₋₇/(-a2 + a6) - s₂₋₅₋₆/(-a2 + a4) + (-a3 + a5)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) - a5*s₁₋₅₋₇/(a1*a6 - a2*a5) - a3*s₁₋₅₋₆/(-a3*a2 + a4*a1) + (1 - a5)*s₄₋₅₋₇/(-a1 + a5 + a1*a6 - a2*a5 - (-a2 + a6)) + (1 - a3)*s₄₋₅₋₆/(-a1 + a3 - a3*a2 + a4*a1 - (-a2 + a4))
 s₁₋₃₋₆/a3 + s₃₋₄₋₆/(-1 + a3) - s₁₋₄₋₆/(-a3 + a4) - s₃₋₆₋₇/(-a3 + a5) + s₃₋₅₋₆/(-a1 + a3) + (-a2 + a6)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) - a2*s₁₋₅₋₆/(-a3*a2 + a4*a1) + a6*s₁₋₆₋₇/(a3*a6 - a4*a5) + (-1 + a6)*s₄₋₆₋₇/(-a3 + a5 + a3*a6 - a4*a5 - (-a4 + a6)) + (1 - a2)*s₄₋₅₋₆/(-a1 + a3 - a3*a2 + a4*a1 - (-a2 + a4))
 s₁₋₂₋₆/a4 + s₂₋₄₋₆/(-1 + a4) + s₁₋₄₋₆/(-a3 + a4) - s₂₋₆₋₇/(-a4 + a6) + s₂₋₅₋₆/(-a2 + a4) + (a1 - a5)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) + a1*s₁₋₅₋₆/(-a3*a2 + a4*a1) - a5*s₁₋₆₋₇/(a3*a6 - a4*a5) + (1 - a5)*s₄₋₆₋₇/(-a3 + a5 + a3*a6 - a4*a5 - (-a4 + a6)) + (-1 + a1)*s₄₋₅₋₆/(-a1 + a3 - a3*a2 + a4*a1 - (-a2 + a4))
 s₁₋₃₋₇/a5 + s₃₋₄₋₇/(-1 + a5) + s₃₋₅₋₇/(-a1 + a5) + s₃₋₆₋₇/(-a3 + a5) - s₁₋₄₋₇/(-a5 + a6) + (a2 - a4)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) - a2*s₁₋₅₋₇/(a1*a6 - a2*a5) - a4*s₁₋₆₋₇/(a3*a6 - a4*a5) + (1 - a2)*s₄₋₅₋₇/(-a1 + a5 + a1*a6 - a2*a5 - (-a2 + a6)) + (1 - a4)*s₄₋₆₋₇/(-a3 + a5 + a3*a6 - a4*a5 - (-a4 + a6))
 s₁₋₂₋₇/a6 + s₂₋₄₋₇/(-1 + a6) + s₂₋₅₋₇/(-a2 + a6) + s₂₋₆₋₇/(-a4 + a6) + s₁₋₄₋₇/(-a5 + a6) + (-a1 + a3)*s₅₋₆₋₇/(a3*a6 - a4*a5 + (-a3 + a5)*a2 - (-a4 + a6)*a1) + a1*s₁₋₅₋₇/(a1*a6 - a2*a5) + a3*s₁₋₆₋₇/(a3*a6 - a4*a5) + (-1 + a1)*s₄₋₅₋₇/(-a1 + a5 + a1*a6 - a2*a5 - (-a2 + a6)) + (-1 + a3)*s₄₋₆₋₇/(-a3 + a5 + a3*a6 - a4*a5 - (-a4 + a6))

Note, the maximum likelihood degree can be computed by explicitly finding all 1272 solutions to the system above

[5]:
ml_degree(Z)
<span class=”ansi-green-fg”>Solutions found: 1272 Time: 0:00:30</span>

<span class=”ansi-blue-fg”> tracked loops (queued): 8904 (0)</span> <span class=”ansi-blue-fg”> solutions in current (last) loop: 0 (0)</span> <span class=”ansi-blue-fg”> generated loops (no change): 7 (5)</span> </pre>

textcolor{ansi-green}{Solutions found: 1272 Time: 0:00:30}

textcolor{ansi-blue}{ tracked loops (queued): 8904 (0)} textcolor{ansi-blue}{ solutions in current (last) loop: 0 (0)} textcolor{ansi-blue}{ generated loops (no change): 7 (5)} end{sphinxVerbatim}

Solutions found: 1272 Time: 0:00:30

 tracked loops (queued): 8904 (0)  solutions in current (last) loop: 0 (0)  generated loops (no change): 7 (5)

[5]:
1-element Vector{Int64}:
 1272

The quickest way to do this, is by using monodromy in homotopycontinuation.jl

[6]:
MonodromyResult = solve_ml_equations(Z)
<span class=”ansi-green-fg”>Solutions found: 1272 Time: 0:00:28</span>

<span class=”ansi-blue-fg”> tracked loops (queued): 8903 (0)</span> <span class=”ansi-blue-fg”> solutions in current (last) loop: 0 (0)</span> <span class=”ansi-blue-fg”> generated loops (no change): 7 (5)</span> </pre>

textcolor{ansi-green}{Solutions found: 1272 Time: 0:00:28}

textcolor{ansi-blue}{ tracked loops (queued): 8903 (0)} textcolor{ansi-blue}{ solutions in current (last) loop: 0 (0)} textcolor{ansi-blue}{ generated loops (no change): 7 (5)} end{sphinxVerbatim}

Solutions found: 1272 Time: 0:00:28

 tracked loops (queued): 8903 (0)  solutions in current (last) loop: 0 (0)  generated loops (no change): 7 (5)

[6]:
1-element Vector{Any}:
 MonodromyResult
===============
• return_code → :heuristic_stop
• 1272 solutions
• 8903 tracked loops
• random_seed → 0xf970960b

solve_ml_equations returns a collection of MonodromyResults, each containing the solutions and associated parameter value. Each MonodromyResult corresponds to an irreducible component of the realization space of the associated matroid. In our case, the realization space is irreducible.

[7]:
S = solutions(MonodromyResult[1])
P = MonodromyResult[1].parameters;

find_valuations takes a realized matroid, and the parameters/solutions of the maximum likelihood equations. It then embeds these solutions into the soft limit equations, and takes the degenerating parameter toward zero. By numerically monitoring how these 1272 solutions approach their limits, we obtain the tropical solutions.

[8]:
T=find_valuations(Z,P,S)
Solving for 41 parameters... 100%|██████████████████████| Time: 0:00:40
  # parameters solved:  41
  # paths tracked:      52152
Numerically computing the valuation of each path from this data...
Progress: at valuation number 1000
Tallying...
[8]:
Dict{Any, Int64} with 16 entries:
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 0  …  0, 0, 0, 0, 0, 1, 0, 0, 0, 0]        => 12
  [0, 0, -1, 0, 0, -1, 0, 0, 0, 0  …  0, 0, -1, 0, -1, -1, 0, -1, -1, 0] => 12
  [0, 0, -1, 0, 0, -1, 0, 0, -1, 0  …  0, 0, -1, 0, -1, -1, 0, -1, 0, -… => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 1, 0, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 0, 0]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 1, 0, 1, 0, 0]        => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 1]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 1]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 0]        => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 1, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 0, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 1, 0, 0, 0, 0]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 1, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 0]        => 1092
  [0, 0, -1, 0, 0, -1, 0, 0, -1, 0  …  0, 0, -1, 0, -1, -1, 0, 0, -1, -… => 12

Everything we did above is automated in the function compute_soft_limit_valuations

[9]:
T = compute_soft_limit_valuations(Z)
Solving for 41 parameters... 100%|██████████████████████| Time: 0:00:25
  # parameters solved:  41
  # paths tracked:      52152
Numerically computing the valuation of each path from this data...
Progress: at valuation number 1000
Tallying...
[9]:
Dict{Any, Int64} with 16 entries:
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 0  …  0, 0, 0, 0, 0, 1, 0, 0, 0, 0]        => 12
  [0, 0, -1, 0, 0, -1, 0, 0, 0, 0  …  0, 0, -1, 0, -1, -1, 0, -1, -1, 0] => 12
  [0, 0, -1, 0, 0, -1, 0, 0, -1, 0  …  0, 0, -1, 0, -1, -1, 0, -1, 0, -… => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 1, 0, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 0, 0]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 1, 0, 1, 0, 0]        => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 1]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 1]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 0]        => 12
  [0, 0, 0, 0, 0, 1, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 1, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 1, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 0, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 1, 0, 0, 0, 0, 0, 0, 0]        => 12
  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 1, 0, 0, 0, 1, 0]        => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 1, 0, 0, 0, 0]        => 12
  [0, 0, -1, 0, 0, -1, 0, 0, -1, 0  …  0, 0, -1, 0, -1, -1, 0, 0, -1, -… => 12
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0  …  0, 0, 0, 0, 0, 0, 0, 0, 0, 0]        => 1092