code: func (it *And) Size() (int64, bool) {
  	val, b := it.primaryIt.Size()
  	for _, sub := range it.internalIterators {
  		newval, newb := sub.Size()
  		if val > newval {
  			val = newval
  		}
  		b = newb && b
  	}
  	return val, b
  }
docs: // Returns the approximate size of the And iterator. Because we're dealing
  // with an intersection, we know that the largest we can be is the size of the
  // smallest iterator. This is the heuristic we shall follow. Better heuristics
  // welcome.