uncross_distinguishers#

tangles.uncross_distinguishers(search: TangleSweep, sys_ord: SetSeparationSystemOrderFunc, agreement: int) tuple[ndarray, ndarray]#

Uncross the efficient distinguishers of tangles of at least the specified agreement value.

This is done by adding in suitable corners to the separation system and the tangle search tree. The corners we chose are corners of lower order than one of the previous efficient distinguishers which also distinguish the tangles distinguished by that distinguisher. Thus the previous efficient distinguisher is replaced by the new, more nested, corner.

For this to work we need to have two requirements:

  1. the order function must be submodular and injective, otherwise there might not exist a corner to better efficiently distinguish tangles in the uncrossing step.

  2. the agreement function must be such that no tangle contains an empty star: a triple of oriented separations such that the tangle contains two of those oriented separations but also the inverse of their infimum.

Parameters#

searchTangleSweep

The search object we use to manage the tangle search.

sys_ordSetSeparationSystemOrderFunc

todo: dont use sys ord

agreementint

The minimum agreement value for tangles who’s efficient distinguishers we attempt to uncross.

Returns#

efficient_distinguisher_levelsnp.ndarray

The levels, in the tangle search tree, at which the efficient distinguishers appear.

efficient_distinguisher_idsnp.ndarray

The separation ids of the efficient distinguishers, sorted by order, the same way as the levels.