source
theorem Std.Iterators.IterM.step_drop {α : Type u_1} {m : Type u_1 → Type u_2} {β : Type u_1} [Monad m] [Iterator α m β] {n : Nat} {it : IterM m β} :
(drop n it).step = do let __do_lift ← it.step match __do_lift.inflate with | ⟨IterStep.yield it' out, h⟩ => match n with | 0 => pure (Shrink.deflate (PlausibleIterStep.yield (drop 0 it') out ⋯)) | k.succ => pure (Shrink.deflate (PlausibleIterStep.skip (drop k it') ⋯)) | ⟨IterStep.skip it', h⟩ => pure (Shrink.deflate (PlausibleIterStep.skip (drop n it') ⋯)) | ⟨IterStep.done, h⟩ => pure (Shrink.deflate (PlausibleIterStep.done ⋯))