a central role throughout the rest of the article. In Section \[sec:bitrees\]: *Clusters obtained from sets of *binary* trees on ${{\mathcal X}}$* we show how, given a set ${{\mathcal T}}$ of binary trees on ${{\mathcal X}}$, and for each fixed $r \geq 0$, it is possible to construct in polynomial time all binary phylogenetic networks with reticulation number $r$ that represent all the clusters in the input trees. We also describe <span style="font-variant:small-caps;">Clustistic</span>, which is our implementation of this algorithm built on top of already-existing software. In Section \[sec:wit\]: *Witnesses and a natural lower bound* we further develop the theory surrounding the ST-set, explicitly relating it to the computation of reticulation number. This is used extensively in Section \[sec:casseverything\]: *The optimality and non-optimality of <span style="font-variant:small-caps;">Cass</span>* where we give both positive and negative results for the [[<span style="font-variant:small-caps;">Cass</span>]{}]{} algorithm, and in the process develop a number of powerful generalizations of unification results from [@twotrees].

A theoretical polynomial-time algorithm for constructing level-$k$ networks {#sec:theory}
===========================================================================

In this section we prove that, for every fixed $k \geq 0$, the problem of determining whether a level-$k$ network exists that represents ${{\mathcal C}}$, and if so to construct such a network, can be solved 