This tutorial is probably also available as a Jupyter notebook in the `demo`

folder in the polymake source and on github.

Different versions of this tutorial: latest release, release 4.12, release 4.11, release 4.10, release 4.9, release 4.8, release 4.7, release 4.6, release 4.5, release 4.4, release 4.3, release 4.2, release 4.1, release 4.0, release 3.6, nightly master

# Tutorial: Patchworking real tropical hypersurfaces

Viro's combinatorial patchworking method takes as its input a regular subdivision $\tau$ of a dilated standard simplex $d\cdot\Delta_n$ (where $\Delta_n = \mathrm{conv}{e_1,\ldots,e_n}$), and a sign distribution on its vertices $s:\tau_0\rightarrow\mathbb Z/2\mathbb Z$, and builds a polyhedral hypersurface (a pure codimension 1 polyhedral complex), that is of the same topological type as some real algebraic hypersurface of degree $d$ (i.e., a real algebraic variety $\mathbb RV(F)$ for some real polynomial $F$ with $\mathrm{deg}F=d$).

We present an implementation of this method using real tropical hypersurfaces, with the induced regular subdivision of its Newton polytope taking the place of the above mentioned triangulation, as well as an efficient algorithm to compute the $\mathbb Z/2\mathbb Z$ homology of the resulting hypersurface, which also works for non-regular subdivisions (see below).

For the math, see for example Viro or, for the case of tropical hypersurfaces, Mikhalkin. This polymake implementation is discussed in

- Joswig & Vater: Real tropical hyperfaces by patchworking in polymake, in: Mathematical software – ICMS 2020 (Bigatti et al, eds.), Springer, LNCS 12097, doi:10.1007/978-3-030-52200-1_20.

## Nomenclature

In the case of a real tropical hypersurface $T_s(f)$ (i.e., a tropical hypersurface $T(f)$ together with a sign distribution $s$ on its support), patchworking works by symmetrically gluing together $2^n$ copies of $H$ (one for each orthant of the ambient space $\mathbb R^n$), and then forgetting certain facets of these copies (this depends on $s$).

The quantity encoding which facets are remembered in which orthant is called its *real phase structure*. We call the resulting polyhedral hypersurface the corresponding *patchworked hypersurfaces*, or simply a *realization* of $T_s(f)$.

## Basic Functionality

Naturally, we'll want to load Polymake's `tropical`

application first:

> application "tropical";

The simplest non-trivial example builds a polyhedral line from a tropical line. So let's first create a tropical line:

> $h1 = new Hypersurface<Min>(POLYNOMIAL=>toTropicalPolynomial("min(x,y,z)")); > print $h1->MONOMIALS; (3) (2 1) (3) (1 1) (3) (0 1)

The line consists of 3 rays eminating from the point (0,0,0). This gives us one vertex. The points where the rays intersect the plane at infinity are also considered vertices.

> print $h1->PROJECTIVE_VERTICES; 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 > print $h1->MAXIMAL_POLYTOPES; # the facets of the (original) tropical hypersurface {0 3} {1 3} {2 3}

The property `MAXIMAL_POLYTOPES`

is an `IncidenceMatrix`

. An entry $k$ in the $i$-th row of `MAXIMAL_POLYTOPES`

indicates the vertex (represented by the $k$-th row in `PROJECTIVE_VERTICES`

) contained in the $i$-th facet of the tropical line.

We can now add a sign distribution on its monomials in the following way:

> $h1_pw1 = $h1->PATCHWORK(SIGNS=>[0,0,1]); # a real structure on $h1 > $h1_pw2 = $h1->PATCHWORK(SIGNS=>[1,0,1]); # another one, why not?

The property `PATCHWORK`

represents a multiple subobject to a `Hypersurface`

object (whether we deal with a `Min`

or `Max`

tropical hypersurface is irrelevant for the patchworking), parametrized by the property `SIGNS`

with type `Array<Bool>`

, which represents the sign distribution on its support. This subobject carries the information about the real tropical hypersurface.

Note that this allows us to create multiple “real structures” on the same tropical hypersurface object (as we did in the above example).

> print dense($h1_pw1->REAL_PHASE); 0 1 1 0 1 1 0 0 1 0 1 0

The property `REAL_PHASE`

is an `IncidenceMatrix`

, representing the real phase structure of the real tropical hypersurface, with the following semantics:

Each orthant $o\subset\mathbb R^n$ corresponds to a subset $o\cap{-e_1,\ldots,-e_n}\subset{-e_1,\ldots,-e_n}$, whose characteristic vector is the binary representation of a unique natural number $0\leq N_o< 2^n$. E.g. in the plane, the positive orthant has binary representation $(00)_2 = 0$, and the negative $(11)_2 = 3$.

The $j$-th entry in the $i$-th row of `REAL_PHASE`

is now $1$ iff the $i$-th facet of the tropical hypersurface (represented by the $i$-th row of `MAXIMAL_POLYTOPES`

; see above) is remembered in the orthant with binary representation $j$.

### Realization as a PolyhedralComplex

We can produce a realization of the patchworked hypersurface as a `PolyhedralComplex`

with the user method `...->realize()`

:

> $h1_pw_r = $h1_pw1->realize(); > print $h1_pw_r->COMBINATORIAL_DIM; > svg($h1_pw_r->VISUAL); 1 Undefined subroutine &Polymake::User::svg called

Note that the realization is only unique up to combinatorial equivalence.

### Some classic curves

There are convenience functions to produce some classic algebraic curves:

> $harnack = harnack_curve(6); # harnack curve of degree 6 > $ragsdale = ragsdale_counterexample(); # a counterexample to the ragsdale conjecture > $gudkov = gudkov_curve(); # gudkov curve (degree 6)

These return a `Hypersurface`

object with a unique `PATCHWORK`

property attached, to access it simply use `...->PATCHWORK`

.

> print $ragsdale->PATCHWORK->SIGNS; > svg($ragsdale->PATCHWORK->realize("uniform")->VISUAL); 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 1 Undefined subroutine &Polymake::User::svg called

## The $\mathbb Z/2\mathbb Z$ cellular homology of a patchworked hypersurface

Naive computation of the homology of a patchworked hypersurface is computationally expensive, since its size depends exponentially on the dimension (we glue together $2^n$ copies of the tropical hypersurface).

Shaw & Renaudineau describe a way to exploit the symmetry of a patchworked hypersurface to compute its $\mathbb Z/2\mathbb Z$ homology directly from the triangulation + sign distribution, without needing to construct a polyhedral complex realization; cf. arXiv:1805.02030 or the published version here.

This leads to a straight forward algorithm, which is implemented in Polymake, and accessible in the following way:

> print $h1_pw1->CHAIN_COMPLEX_Z2; <0 1 1 1 1 0 1 0 1 > > print $h1_pw1->BETTI_NUMBERS_Z2; 1 1

## Non-regular patchworking

It is possible to use this implementation starting with a (possibly non-regular) subdivision $\tau$ (i.e., without the data of a tropical hypersurface).

The usage is similar, you just have to define the hypersurface via the `DUAL_SUBDIVISION`

property (even if mathematically no such hypersurface exists, i.e. in the non-regular case), instead the tropical `POLYNOMIAL`

.

Here is such a non-regular subdivision of $4\Delta_2$, the “mother of all examples”:

> $moae = new fan::SubdivisionOfPoints(POINTS=>[[1,4,0,0],[1,0,4,0],[1,0,0,4],[1,2,1,1],[1,1,2,1],[1,1,1,2]], > MAXIMAL_CELLS=>[[0,1,3],[0,2,5],[0,3,5],[1,2,4],[1,3,4],[2,4,5],[3,4,5]]); > $moae->VISUAL;

**Explode**

**Transparency**

**Rotation**

**Display**

**Camera**

**SVG**

> $h2 = new Hypersurface<Min>(DUAL_SUBDIVISION=>$moae); > $h2_pw = $h2->PATCHWORK(SIGNS=>[0,0,0,1,1,0]); > print $h2_pw->BETTI_NUMBERS_Z2; 3 3