This was almost certainly my fault, but as I look at the implementation of Sets.cartesianProduct, I think its `contains` method made the assumption that `ImmutableSet.asList().indexOf` was O(1), which is no longer the case for Android.  It should probably get a specific `contains` implementation that actually is O(sets), not O(sets*setSize).
return delegate.ceiling(e);
    }
    @Override
    public E higher(E e) {
      return delegate.higher(e);
    }
    @Override
    public E pollFirst() {
      throw new UnsupportedOperationException();
    }
    @Override
    public E pollLast() {
      throw new UnsupportedOperationException();
    }
    private transient @Nullable UnmodifiableNavigableSet<E> descendingSet;
    @Override
    public NavigableSet<E> descendingSet() {
      UnmodifiableNavigableSet<E> result = descendingSet;
      if (result == null) {
        result = descendingSet = new UnmodifiableNavigableSet<E>(delegate.descendingSet());
        result.descendingSet = this;
      }
      return result;
    }
    @Override
    public Iterator<E> descendingIterator() {
      return Iterators.unmodifiableIterator(delegate.descendingIterator());
    }
    @Override
    public NavigableSet<E> subSet(