{α : Type u_1} →
  {m : Type u_1 → Type u_2} →
    {β : Type u_1} →
      [inst : Std.Iterator α m β] →
        {P : β → Prop} →
          (it : Std.IterM m { out // P out }) →
            (motive : it.internalState.inner.Step → Sort u_3) →
              (step : it.internalState.inner.Step) →
                ((it' : Std.IterM m β) →
                    (out : β) →
                      (h : it.internalState.inner.IsPlausibleStep (Std.IterStep.yield it' out)) →
                        motive ⟨Std.IterStep.yield it' out, h⟩) →
                  ((it' : Std.IterM m β) →
                      (h : it.internalState.inner.IsPlausibleStep (Std.IterStep.skip it')) →
                        motive ⟨Std.IterStep.skip it', h⟩) →
                    ((property : it.internalState.inner.IsPlausibleStep Std.IterStep.done) →
                        motive ⟨Std.IterStep.done, property⟩) →
                      motive step