   /// - Complexity: O(N), where N is the ratio between unfiltered and
   ///   filtered collection counts.
   public var startIndex: Index {
-    return LazyFilterIndex(base: _nextFiltered(_base.startIndex))
+    var index = _base.startIndex
+    while index != _base.endIndex && !_predicate(_base[index]) {
+      _base.formSuccessor(&index)
+    }
+    return LazyFilterIndex(base: index)
   }
 
   /// The collection's "past the end" position.


    var index = i.base
    for _ in stride(from: 0, to: n, by: 1) {
      if _nextFilteredInPlace(&index, limitedBy: limit.base) {
        break
      }
    }
    return LazyFilterIndex(base: index)
  }

    return index
  }

  /// Returns the first index `i` following `index` where either
  /// `_predicate(base[i]) == true` or `i == _base.endIndex`.
  ///
  /// - Precondition: `index != endIndex`
  /// - Postcondition: `i > index`
  @inline(__always)
  internal func _nextFilteredInPlace(index: inout Base.Index) {
    _precondition(index != _base.endIndex, "can't advance past endIndex")
    repeat {
      _base.formSuccessor(&index)
    } while index != _base.endIndex && !_predicate(_base[index])
  }

  /// Access the element at `position`.
