@classmethod
def shrink(cls, initial, predicate, **kwargs):
    """Shrink the value ``initial`` subject to the constraint that it
        satisfies ``predicate``.

        Returns the shrunk value.
        """
    shrinker = cls(initial, predicate, **kwargs)
    shrinker.run()
    return shrinker.current
