theorem Std.Iter.forIn'_eq {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [hl : LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : (b : β) → it.IsPlausibleIndirectOutput b → γ → m (ForInStep γ)} :
forIn' it init f = IterM.DefaultConsumers.forIn' (fun (x : Type w) (x_1 : Type x) (f : x → m x_1) (x_2 : Id x) => f x_2.run) γ
(fun (x : β) (x_1 : γ) (x_2 : ForInStep γ) => True) it.toIterM init it.toIterM.IsPlausibleIndirectOutput ⋯
fun (out : β) (h : it.toIterM.IsPlausibleIndirectOutput out) (acc : γ) => do
let __do_lift ← f out ⋯ acc
pure ⟨__do_lift, trivial⟩
theorem Std.Iter.forIn_eq {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [hl : LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
forIn it init f = IterM.DefaultConsumers.forIn' (fun (x : Type w) (x_1 : Type x) (f : x → m x_1) (c : Id x) => f c.run) γ
(fun (x : β) (x_1 : γ) (x_2 : ForInStep γ) => True) it.toIterM init it.toIterM.IsPlausibleIndirectOutput ⋯
fun (out : β) (x : it.toIterM.IsPlausibleIndirectOutput out) (acc : γ) => do
let __do_lift ← f out acc
pure ⟨__do_lift, trivial⟩
theorem Std.Iter.forIn'_congr {γ α β : Type w} {m : Type w → Type w'} [Monad m] [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id m] {ita itb : Iter β} (w : ita = itb) {b b' : γ} (hb : b = b') {f : (a' : β) → a' ∈ ita → γ → m (ForInStep γ)} {g : (a' : β) → a' ∈ itb → γ → m (ForInStep γ)} (h : ∀ (a : β) (m_1 : a ∈ itb) (b : γ), f a ⋯ b = g a m_1 b) :
theorem Std.Iter.forIn'_eq_forIn'_toIterM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type w → Type w''} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] {γ : Type w} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn_eq_forIn_toIterM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type w → Type w''} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] {γ : Type w} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn'_eq_match_step {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x''} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it → γ → m (ForInStep γ)} :
forIn' it init f = match it.step with
| ⟨IterStep.yield it' out, h⟩ => do
let __do_lift ← f out ⋯ init
match __do_lift with
| ForInStep.yield c => forIn' it' c fun (out_1 : β) (h'' : out_1 ∈ it') (acc : γ) => f out_1 ⋯ acc
| ForInStep.done c => pure c
| ⟨IterStep.skip it', h⟩ => forIn' it' init fun (out : β) (h' : out ∈ it') (acc : γ) => f out ⋯ acc
| ⟨IterStep.done, property⟩ => pure init
theorem Std.Iter.forIn_eq_match_step {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
forIn it init f = match it.step with
| ⟨IterStep.yield it' out, property⟩ => do
let __do_lift ← f out init
match __do_lift with
| ForInStep.yield c => forIn it' c f
| ForInStep.done c => pure c
| ⟨IterStep.skip it', property⟩ => forIn it' init f
| ⟨IterStep.done, property⟩ => pure init
theorem Std.Iter.isPlausibleStep_iff_step_eq {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [LawfulDeterministicIterator α Id] {it : Iter β} {step : IterStep (Iter β) β} :
theorem Std.Iter.mem_toList_iff_isPlausibleIndirectOutput {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [LawfulDeterministicIterator α Id] {it : Iter β} {out : β} :
theorem Std.Iter.mem_toArray_iff_isPlausibleIndirectOutput {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [LawfulDeterministicIterator α Id] {it : Iter β} {out : β} :
theorem Std.Iter.forIn'_toList {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] [LawfulDeterministicIterator α Id] {γ : Type x} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it.toList → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn'_toArray {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] [LawfulDeterministicIterator α Id] {γ : Type x} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it.toArray → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn'_eq_forIn'_toList {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] [LawfulDeterministicIterator α Id] {γ : Type x} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn'_eq_forIn'_toArray {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] [LawfulDeterministicIterator α Id] {γ : Type x} {it : Iter β} {init : γ} {f : (out : β) → out ∈ it → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn_toList {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
theorem Std.Iter.forIn_toArray {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
theorem Std.Iter.foldM_eq_forIn {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [IteratorLoop α Id m] {f : γ → β → m γ} {init : γ} {it : Iter β} :
theorem Std.Iter.foldM_eq_foldM_toIterM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type w → Type w''} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] {γ : Type w} {it : Iter β} {init : γ} {f : γ → β → m γ} :
theorem Std.Iter.forIn_yield_eq_foldM {α β : Type w} {γ δ : Type x} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {f : β → γ → m δ} {g : β → γ → δ → γ} {init : γ} {it : Iter β} :
theorem Std.Iter.foldM_eq_match_step {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {f : γ → β → m γ} {init : γ} {it : Iter β} :
foldM f init it = match it.step with
| ⟨IterStep.yield it' out, property⟩ => do
let __do_lift ← f init out
foldM f __do_lift it'
| ⟨IterStep.skip it', property⟩ => foldM f init it'
| ⟨IterStep.done, property⟩ => pure init
theorem Std.Iter.foldlM_toList {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {f : γ → β → m γ} {init : γ} {it : Iter β} :
theorem Std.Iter.foldlM_toArray {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {f : γ → β → m γ} {init : γ} {it : Iter β} :
theorem Std.IterM.forIn_eq_foldM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] {m : Type x → Type x'} [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {γ : Type x} {it : Iter β} {init : γ} {f : β → γ → m (ForInStep γ)} :
forIn it init f = ForInStep.value <$> Iter.foldM
(fun (c : ForInStep γ) (b : β) =>
match c with
| ForInStep.yield c => f b c
| ForInStep.done c => pure (ForInStep.done c))
(ForInStep.yield init) it
theorem Std.Iter.fold_eq_forIn {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] {f : γ → β → γ} {init : γ} {it : Iter β} :
theorem Std.Iter.fold_eq_fold_toIterM {α β γ : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] {f : γ → β → γ} {init : γ} {it : Iter β} :
@[simp]
theorem Std.Iter.forIn_pure_yield_eq_fold {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {f : β → γ → γ} {init : γ} {it : Iter β} :
theorem Std.Iter.fold_eq_match_step {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {f : γ → β → γ} {init : γ} {it : Iter β} :
fold f init it = match it.step with
| ⟨IterStep.yield it' out, property⟩ => fold f (f init out) it'
| ⟨IterStep.skip it', property⟩ => fold f init it'
| ⟨IterStep.done, property⟩ => init
theorem Std.Iter.fold_hom {α β : Type u_1} {γ₁ : Type x₁} {γ₂ : Type x₂} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} (f : γ₁ → γ₂) {g₁ : γ₁ → β → γ₁} {g₂ : γ₂ → β → γ₂} {init : γ₁} (H : ∀ (x : γ₁) (y : β), g₂ (f x) y = f (g₁ x y)) :
@[simp]
theorem Std.Iter.foldl_toList {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {f : γ → β → γ} {init : γ} {it : Iter β} :
@[simp]
theorem Std.Iter.foldl_toArray {α β : Type w} {γ : Type x} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {f : γ → β → γ} {init : γ} {it : Iter β} :
@[deprecated Std.Iter.length_eq_length_toIterM (since := "2026-01-28")]
def Std.Iter.count_eq_count_toIterM {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] {it : Iter β} :
Instances For
theorem Std.Iter.length_eq_fold {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
@[deprecated Std.Iter.length_eq_fold (since := "2026-01-28")]
def Std.Iter.count_eq_fold {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
Equations
Instances For
theorem Std.Iter.length_eq_forIn {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
@[deprecated Std.Iter.length_eq_forIn (since := "2026-01-28")]
def Std.Iter.count_eq_forIn {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
Equations
Instances For
theorem Std.Iter.length_eq_match_step {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
it.length = match it.step.val with
| IterStep.yield it' out => it'.length + 1
| IterStep.skip it' => it'.length
| IterStep.done => 0
@[deprecated Std.Iter.length_eq_match_step (since := "2026-01-28")]
def Std.Iter.count_eq_match_step {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
it.length = match it.step.val with
| IterStep.yield it' out => it'.length + 1
| IterStep.skip it' => it'.length
| IterStep.done => 0
Instances For
@[simp]
theorem Std.Iter.size_toArray_eq_length {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
@[deprecated Std.Iter.size_toArray_eq_length (since := "2026-01-28")]
def Std.Iter.size_toArray_eq_count {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
Instances For
@[simp]
theorem Std.Iter.length_toList_eq_length {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
@[deprecated Std.Iter.length_toList_eq_length (since := "2026-01-28")]
def Std.Iter.length_toList_eq_count {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
Instances For
@[simp]
theorem Std.Iter.length_toListRev_eq_length {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
@[deprecated Std.Iter.length_toListRev_eq_length (since := "2026-01-28")]
def Std.Iter.length_toListRev_eq_count {α β : Type u_1} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
Instances For
theorem Std.Iter.anyM_eq_forIn {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.anyM_eq_match_step {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.anyM_toList {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.anyM_toArray {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.any_eq_anyM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.anyM_pure {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.any_eq_match_step {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.any_eq_forIn {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.any_toList {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.any_toArray {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.allM_eq_forIn {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.allM_eq_match_step {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.all_eq_allM {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.allM_pure {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.all_eq_match_step {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.all_eq_forIn {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.all_toList {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.all_toArray {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.allM_eq_not_anyM_not {α β : Type w} {m : Type → Type w'} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id m] [LawfulIteratorLoop α Id m] {it : Iter β} {p : β → m Bool} :
theorem Std.Iter.all_eq_not_any_not {m : Type u_1 → Type u_2} {α β : Type w} [Iterator α Id β] [Iterators.Finite α Id] [Monad m] [LawfulMonad m] [IteratorLoop α Id Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {p : β → Bool} :
theorem Std.Iter.findSomeM?_eq_match_step {α β : Type w} {γ : Type x} {m : Type x → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] {it : Iter β} {f : β → m (Option γ)} :
it.findSomeM? f = match it.step.val with
| IterStep.yield it' out => do
let __do_lift ← f out
match __do_lift with
| none => it'.findSomeM? f
| some fx => pure (some fx)
| IterStep.skip it' => it'.findSomeM? f
| IterStep.done => pure none
theorem Std.Iter.findSomeM?_toList {α β : Type w} {γ : Type x} {m : Type x → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] {it : Iter β} {f : β → m (Option γ)} :
theorem Std.Iter.findSome?_eq_findSomeM? {α β : Type w} {γ : Type x} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] {it : Iter β} {f : β → Option γ} :
theorem Std.Iter.findSome?_eq_match_step {α β : Type w} {γ : Type x} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → Option γ} :
it.findSome? f = match it.step.val with
| IterStep.yield it' out =>
match f out with
| none => it'.findSome? f
| some fx => some fx
| IterStep.skip it' => it'.findSome? f
| IterStep.done => none
theorem Std.Iter.findSome?_toList {α β : Type w} {γ : Type x} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → Option γ} :
theorem Std.Iter.findSomeM?_pure {α β : Type w} {γ : Type x} {m : Type x → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [IteratorLoop α Id Id] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → Option γ} :
theorem Std.Iter.findM?_eq_findSomeM? {α β : Type w} {m : Type w → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [Iterators.Finite α Id] {it : Iter β} {f : β → m (ULift Bool)} :
theorem Std.Iter.findM?_eq_match_step {α β : Type w} {m : Type w → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] {it : Iter β} {f : β → m (ULift Bool)} :
theorem Std.Iter.findM?_toList {α β : Type} {m : Type → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] {it : Iter β} {f : β → m Bool} :
theorem Std.Iter.findM?_eq_findM?_toList {α β : Type} {m : Type → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] {it : Iter β} {f : β → m (ULift Bool)} :
theorem Std.Iter.find?_eq_match_step {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → Bool} :
theorem Std.Iter.find?_toList {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → Bool} :
theorem Std.Iter.findM?_pure {α β : Type w} {m : Type w → Type w'} [Monad m] [Iterator α Id β] [IteratorLoop α Id m] [IteratorLoop α Id Id] [LawfulMonad m] [Iterators.Finite α Id] [LawfulIteratorLoop α Id m] [LawfulIteratorLoop α Id Id] {it : Iter β} {f : β → ULift Bool} :
theorem Std.Iter.first?_eq_match_step {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Productive α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
it.first? = match it.step.val with
| IterStep.yield it out => some out
| IterStep.skip it' => it'.first?
| IterStep.done => none
@[simp]
theorem Std.Iter.head?_toList {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
theorem Std.Iter.isEmpty_eq_match_step {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Productive α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :
it.isEmpty = match it.step.val with
| IterStep.yield it out => false
| IterStep.skip it' => it'.isEmpty
| IterStep.done => true
@[simp]
theorem Std.Iter.isEmpty_toList {α β : Type w} [Iterator α Id β] [IteratorLoop α Id Id] [Iterators.Finite α Id] [LawfulIteratorLoop α Id Id] {it : Iter β} :