Loogle!
Result
Found 1076 declarations mentioning ULift. Of these, only the first 200 are shown.
- ULift 📋 Init.Prelude
(α : Type s) : Type (max s r) - ULift.down 📋 Init.Prelude
{α : Type s} (self : ULift.{r, s} α) : α - ULift.up 📋 Init.Prelude
{α : Type s} (down : α) : ULift.{r, s} α - instInhabitedULift 📋 Init.Prelude
{α : Type u_1} [Inhabited α] : Inhabited (ULift.{u_2, u_1} α) - ULift.up_down 📋 Init.Prelude
{α : Type u} (b : ULift.{v, u} α) : { down := b.down } = b - ULift.up.sizeOf_spec 📋 Init.SizeOf
{α : Type s} [SizeOf α] (down : α) : sizeOf { down := down } = 1 + sizeOf down - ULift.up.injEq 📋 Init.Core
{α : Type s} (down down✝ : α) : ({ down := down } = { down := down✝ }) = (down = down✝) - instReprULift 📋 Init.Data.Repr
{α : Type u_1} [Repr α] : Repr (ULift.{v, u_1} α) - instToStringULift 📋 Init.Data.ToString.Basic
{α : Type u} [ToString α] : ToString (ULift.{v, u} α) - Std.IterM.count 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α : Type u_1} {m : Type u_1 → Type u_2} {β : Type u_1} [Std.Iterator α m β] [Std.IteratorLoop α m m] [Monad m] (it : Std.IterM m β) : m (ULift.{u_1, 0} ℕ) - Std.IterM.isEmpty 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (it : Std.IterM m β) : m (ULift.{w, 0} Bool) - Std.IterM.length 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] [Std.IteratorLoop α m m] [Monad m] (it : Std.IterM m β) : m (ULift.{w, 0} ℕ) - Std.IterM.size 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α : Type u_1} {m : Type u_1 → Type u_2} {β : Type u_1} [Std.Iterator α m β] [Std.IteratorLoop α m m] [Monad m] (it : Std.IterM m β) : m (ULift.{u_1, 0} ℕ) - Std.IterM.Partial.count 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] [Std.IteratorLoop α m m] [Monad m] (it : Std.IterM.Partial m β) : m (ULift.{w, 0} ℕ) - Std.IterM.Partial.size 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] [Std.IteratorLoop α m m] [Monad m] (it : Std.IterM.Partial m β) : m (ULift.{w, 0} ℕ) - Std.IterM.all 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → Bool) (it : Std.IterM m β) : m (ULift.{w, 0} Bool) - Std.IterM.any 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → Bool) (it : Std.IterM m β) : m (ULift.{w, 0} Bool) - Std.IterM.Partial.all 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → Bool) (it : Std.IterM.Partial m β) : m (ULift.{w, 0} Bool) - Std.IterM.Partial.any 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → Bool) (it : Std.IterM.Partial m β) : m (ULift.{w, 0} Bool) - Std.IterM.allM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : m (ULift.{w, 0} Bool) - Std.IterM.anyM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : m (ULift.{w, 0} Bool) - Std.IterM.findM? 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (it : Std.IterM m β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.IterM.Partial.allM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM.Partial m β) : m (ULift.{w, 0} Bool) - Std.IterM.Partial.anyM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM.Partial m β) : m (ULift.{w, 0} Bool) - Std.IterM.Partial.findM? 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] (it : Std.IterM.Partial m β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.IterM.Total.isEmpty 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Productive α m] (it : Std.IterM.Total m β) : m (ULift.{w, 0} Bool) - Std.IterM.Total.all 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] (p : β → Bool) (it : Std.IterM.Total m β) : m (ULift.{w, 0} Bool) - Std.IterM.Total.any 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] (p : β → Bool) (it : Std.IterM.Total m β) : m (ULift.{w, 0} Bool) - Std.IterM.Total.allM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM.Total m β) : m (ULift.{w, 0} Bool) - Std.IterM.Total.anyM 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] (p : β → m (ULift.{w, 0} Bool)) (it : Std.IterM.Total m β) : m (ULift.{w, 0} Bool) - Std.IterM.Total.findM? 📋 Init.Data.Iterators.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] (it : Std.IterM.Total m β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.Iter.findM? 📋 Init.Data.Iterators.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] (it : Std.Iter β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.Iter.Partial.findM? 📋 Init.Data.Iterators.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] (it : Std.Iter.Partial β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.Iter.Total.findM? 📋 Init.Data.Iterators.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [Std.Iterators.Finite α Id] (it : Std.Iter.Total β) (f : β → m (ULift.{w, 0} Bool)) : m (Option β) - Std.IterM.find?_eq_findM? 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] {it : Std.IterM m β} {f : β → Bool} : it.find? f = it.findM? fun x => pure { down := f x } - Std.IterM.all_eq_allM 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.all p it = Std.IterM.allM (fun x => pure { down := p x }) it - Std.IterM.any_eq_anyM 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.any p it = Std.IterM.anyM (fun x => pure { down := p x }) it - Std.IterM.up_length_toListRev_eq_count 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type u_1 → Type u_2} {α β : Type u_1} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.length }) <$> it.toListRev = it.length - Std.IterM.up_length_toListRev_eq_length 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type w → Type u_1} {α β : Type w} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.length }) <$> it.toListRev = it.length - Std.IterM.up_length_toList_eq_count 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type u_1 → Type u_2} {α β : Type u_1} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.length }) <$> it.toList = it.length - Std.IterM.up_length_toList_eq_length 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type w → Type u_1} {α β : Type w} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.length }) <$> it.toList = it.length - Std.IterM.up_size_toArray_eq_count 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type u_1 → Type u_2} {α β : Type u_1} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.size }) <$> it.toArray = it.length - Std.IterM.up_size_toArray_eq_length 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{m : Type w → Type u_1} {α β : Type w} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : (fun x => { down := x.size }) <$> it.toArray = it.length - Std.IterM.allM_pure 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → ULift.{w, 0} Bool} : Std.IterM.allM (fun x => pure (p x)) it = Std.IterM.all (fun x => (p x).down) it - Std.IterM.anyM_pure 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → ULift.{w, 0} Bool} : Std.IterM.anyM (fun x => pure (p x)) it = Std.IterM.any (fun x => (p x).down) it - Std.IterM.count_eq_fold 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type u_1} {m : Type u_1 → Type u_2} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] {it : Std.IterM m β} : it.length = Std.IterM.fold (fun acc x => { down := acc.down + 1 }) { down := 0 } it - Std.IterM.findM?_pure 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.Iterators.Finite α m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → ULift.{w, 0} Bool} : (it.findM? fun x => pure (f x)) = it.find? fun x => (f x).down - Std.IterM.length_eq_fold 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] {it : Std.IterM m β} : it.length = Std.IterM.fold (fun acc x => { down := acc.down + 1 }) { down := 0 } it - Std.IterM.all_eq_not_any_not 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.all p it = (fun x => { down := !x.down }) <$> Std.IterM.any (fun x => !p x) it - Std.IterM.findM?_eq_findSomeM? 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] {it : Std.IterM m β} {f : β → m (ULift.{w, 0} Bool)} : it.findM? f = it.findSomeM? fun x => do let __do_lift ← f x pure (if __do_lift.down = true then some x else none) - Std.IterM.count_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type u_1} {m : Type u_1 → Type u_2} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] {it : Std.IterM m β} : it.length = forIn it { down := 0 } fun x acc => pure (ForInStep.yield { down := acc.down + 1 }) - Std.IterM.length_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] {it : Std.IterM m β} : it.length = forIn it { down := 0 } fun x acc => pure (ForInStep.yield { down := acc.down + 1 }) - Std.IterM.allM_eq_not_anyM_not 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.allM p it = (fun x => { down := !x.down }) <$> Std.IterM.anyM (fun x => (fun x => { down := !x.down }) <$> p x) it - Std.IterM.all_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.all p it = forIn it { down := true } fun x x_1 => if p x = true then pure (ForInStep.yield { down := true }) else pure (ForInStep.done { down := false }) - Std.IterM.any_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.any p it = forIn it { down := false } fun x x_1 => if p x = true then pure (ForInStep.done { down := true }) else pure (ForInStep.yield { down := false }) - Std.IterM.allM_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.allM p it = forIn it { down := true } fun x x_1 => do let __do_lift ← p x if __do_lift.down = true then pure (ForInStep.yield { down := true }) else pure (ForInStep.done { down := false }) - Std.IterM.anyM_eq_forIn 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p it = forIn it { down := false } fun x x_1 => do let __do_lift ← p x if __do_lift.down = true then pure (ForInStep.done { down := true }) else pure (ForInStep.yield { down := false }) - Std.IterM.isEmpty_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.Iterators.Productive α m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : it.isEmpty = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it out => pure { down := false } | Std.IterStep.skip it' => it'.isEmpty | Std.IterStep.done => pure { down := true } - Std.IterM.all_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.all p it = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' x => if p x = true then Std.IterM.all p it' else pure { down := false } | Std.IterStep.skip it' => Std.IterM.all p it' | Std.IterStep.done => pure { down := true } - Std.IterM.any_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → Bool} : Std.IterM.any p it = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' x => if p x = true then pure { down := true } else Std.IterM.any p it' | Std.IterStep.skip it' => Std.IterM.any p it' | Std.IterStep.done => pure { down := false } - Std.IterM.findM?_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.Iterators.Finite α m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → m (ULift.{w, 0} Bool)} : it.findM? f = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' out => do let __do_lift ← f out if __do_lift.down = true then pure (some out) else it'.findM? f | Std.IterStep.skip it' => it'.findM? f | Std.IterStep.done => pure none - Std.IterM.allM_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.allM p it = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' x => do let __do_lift ← p x if __do_lift.down = true then Std.IterM.allM p it' else pure { down := false } | Std.IterStep.skip it' => Std.IterM.allM p it' | Std.IterStep.done => pure { down := true } - Std.IterM.anyM_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p it = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' x => do let __do_lift ← p x if __do_lift.down = true then pure { down := true } else Std.IterM.anyM p it' | Std.IterStep.skip it' => Std.IterM.anyM p it' | Std.IterStep.done => pure { down := false } - Std.IterM.count_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type u_1} {m : Type u_1 → Type u_2} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : it.length = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' out => do let __do_lift ← it'.length pure { down := __do_lift.down + 1 } | Std.IterStep.skip it' => do let __do_lift ← it'.length pure { down := __do_lift.down } | Std.IterStep.done => pure { down := 0 } - Std.IterM.length_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Monadic.Loop
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Std.IteratorLoop α m m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} : it.length = do let __do_lift ← it.step match ↑__do_lift.inflate with | Std.IterStep.yield it' out => do let __do_lift ← it'.length pure { down := __do_lift.down + 1 } | Std.IterStep.skip it' => do let __do_lift ← it'.length pure { down := __do_lift.down } | Std.IterStep.done => pure { down := 0 } - Std.IterM.filterWithPostcondition 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [MonadLiftT m n] [Std.Iterator α m β] (f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM n β - Std.IterM.filterM 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Monad n] [MonadAttach n] [MonadLiftT m n] (f : β → n (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM n β - Std.Iter.filterWithPostcondition 📋 Init.Data.Iterators.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] (f : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) (it : Std.Iter β) : Std.IterM m β - Std.Iter.filterM 📋 Init.Data.Iterators.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] [MonadAttach m] (f : β → m (ULift.{w, 0} Bool)) (it : Std.Iter β) : Std.IterM m β - Std.IterM.filterWithPostcondition.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [MonadLiftT m n] [Std.Iterator α m β] (f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM.filterWithPostcondition f it = Std.IterM.filterMapWithPostcondition (fun b => Std.Iterators.PostconditionT.map (fun x => if x.down = true then some b else none) (f b)) it - Std.IterM.filterM.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Monad n] [MonadAttach n] [MonadLiftT m n] (f : β → n (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM.filterM f it = Std.IterM.filterMapWithPostcondition (fun b => Std.Iterators.PostconditionT.map (fun x => if x.down = true then some b else none) (Std.Iterators.PostconditionT.attachLift (f b))) it - Std.IterM.count_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type u_1} {m : Type u_1 → Type u_2} [Std.Iterator α m β] [Monad m] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} : (Std.IterM.map f it).length = it.length - Std.IterM.length_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Monad m] [Std.IteratorLoop α m m] [Std.Iterators.Finite α m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} : (Std.IterM.map f it).length = it.length - Std.IterM.all_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} {p : β' → Bool} : Std.IterM.all p (Std.IterM.map f it) = Std.IterM.all (fun x => p (f x)) it - Std.IterM.any_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} {p : β' → Bool} : Std.IterM.any p (Std.IterM.map f it) = Std.IterM.any (fun x => p (f x)) it - Std.IterM.allM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.map f it) = Std.IterM.allM (fun x => p (f x)) it - Std.IterM.anyM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.map f it) = Std.IterM.anyM (fun x => p (f x)) it - Std.IterM.all_filterMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Option β'} {p : β' → Bool} : Std.IterM.all p (Std.IterM.filterMap f it) = Std.IterM.all (fun x => match f x with | some fx => p fx | none => true) it - Std.IterM.any_filterMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Option β'} {p : β' → Bool} : Std.IterM.any p (Std.IterM.filterMap f it) = Std.IterM.any (fun x => match f x with | some fx => p fx | none => false) it - Std.IterM.allM_filterMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Option β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.filterMap f it) = Std.IterM.allM (fun x => match f x with | some fx => p fx | none => pure { down := true }) it - Std.IterM.anyM_filterMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Option β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.filterMap f it) = Std.IterM.anyM (fun x => match f x with | some fx => p fx | none => pure { down := false }) it - Std.IterM.allM_filter 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Bool} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.filter f it) = Std.IterM.allM (fun x => if f x = true then p x else pure { down := true }) it - Std.IterM.anyM_filter 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → Bool} {p : β → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.filter f it) = Std.IterM.anyM (fun x => if f x = true then p x else pure { down := false }) it - Std.IterM.anyM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] {it : Std.IterM m β} {f : β → n β'} {p : β' → n (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.mapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x p __do_lift) (Std.IterM.mapM pure it) - Std.IterM.allM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] {it : Std.IterM m β} {f : β → n β'} {p : β' → n (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.mapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x p __do_lift) (Std.IterM.mapM pure it) - Std.IterM.all_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n β'} {p : β' → Bool} : Std.IterM.all p (Std.IterM.mapM f it) = Std.IterM.allM (fun x => (fun x => { down := p x }) <$> f x) (Std.IterM.mapM pure it) - Std.IterM.anyM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] {it : Std.IterM m β} {f : β → n (Option β')} {p : β' → n (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.filterMapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x match __do_lift with | some fx => p fx | none => pure { down := false }) (Std.IterM.mapM pure it) - Std.IterM.any_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n β'} {p : β' → Bool} : Std.IterM.any p (Std.IterM.mapM f it) = Std.IterM.anyM (fun x => (fun x => { down := p x }) <$> f x) (Std.IterM.mapM pure it) - Std.IterM.fold_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Std.IteratorLoop α m n] [Std.LawfulIteratorLoop α m n] [MonadLiftT m n] [LawfulMonadLiftT m n] {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} {g : δ → β → δ} {init : δ} {it : Std.IterM m β} : Std.IterM.fold g init (Std.IterM.filterWithPostcondition f it) = Std.IterM.foldM (fun d b => do let __do_lift ← (f b).run pure (if __do_lift.down = true then g d b else d)) init it - Std.IterM.allM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] {it : Std.IterM m β} {f : β → n (Option β')} {p : β' → n (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.filterMapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x match __do_lift with | some fx => p fx | none => pure { down := true }) (Std.IterM.mapM pure it) - Std.IterM.fold_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Std.IteratorLoop α m n] [Std.LawfulIteratorLoop α m n] [MonadLiftT m n] [LawfulMonadLiftT m n] {f : β → n (ULift.{w, 0} Bool)} {g : δ → β → δ} {init : δ} {it : Std.IterM m β} : Std.IterM.fold g init (Std.IterM.filterM f it) = Std.IterM.foldM (fun d b => do let __do_lift ← f b pure (if __do_lift.down = true then g d b else d)) init it - Std.IterM.all_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n (Option β')} {p : β' → Bool} : Std.IterM.all p (Std.IterM.filterMapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x match __do_lift with | some fx => pure { down := p fx } | none => pure { down := true }) (Std.IterM.mapM pure it) - Std.IterM.any_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n (Option β')} {p : β' → Bool} : Std.IterM.any p (Std.IterM.filterMapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x match __do_lift with | some fx => pure { down := p fx } | none => pure { down := false }) (Std.IterM.mapM pure it) - Std.IterM.foldM_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [Monad n] [Monad o] [LawfulMonad m] [LawfulMonad n] [LawfulMonad o] [Std.IteratorLoop α m n] [Std.IteratorLoop α m o] [Std.LawfulIteratorLoop α m n] [Std.LawfulIteratorLoop α m o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} {g : δ → β → o δ} {init : δ} {it : Std.IterM m β} : Std.IterM.foldM g init (Std.IterM.filterWithPostcondition f it) = Std.IterM.foldM (fun d b => do let __do_lift ← liftM (f b).run if __do_lift.down = true then g d b else pure d) init it - Std.IterM.foldM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [LawfulMonad o] [Std.IteratorLoop α m n] [Std.IteratorLoop α m o] [Std.LawfulIteratorLoop α m n] [Std.LawfulIteratorLoop α m o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] {f : β → n (ULift.{w, 0} Bool)} {g : δ → β → o δ} {init : δ} {it : Std.IterM m β} : Std.IterM.foldM g init (Std.IterM.filterM f it) = Std.IterM.foldM (fun d b => do let __do_lift ← liftM (f b) if __do_lift.down = true then g d b else pure d) init it - Std.IterM.anyM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] {it : Std.IterM m β} {f p : β → n (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.IterM.filterM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x if __do_lift.down = true then p x else pure { down := false }) (Std.IterM.mapM pure it) - Std.IterM.allM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] {it : Std.IterM m β} {f p : β → n (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.IterM.filterM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x if __do_lift.down = true then p x else pure { down := true }) (Std.IterM.mapM pure it) - Std.IterM.forIn_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{m : Type u_1 → Type u_2} {n : Type u_1 → Type u_3} {o : Type u_1 → Type u_4} {α β γ : Type u_1} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadLiftT m n] [LawfulMonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] [Std.IteratorLoop α m o] [Std.LawfulIteratorLoop α m o] {it : Std.IterM m β} {f : β → Std.Iterators.PostconditionT n (ULift.{u_1, 0} Bool)} {init : γ} {g : β → γ → o (ForInStep γ)} : forIn (Std.IterM.filterWithPostcondition f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out).run if __do_lift.down = true then g out acc else pure (ForInStep.yield acc) - Std.IterM.forIn_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{m : Type u_1 → Type u_2} {n : Type u_1 → Type u_3} {o : Type u_1 → Type u_4} {α β γ : Type u_1} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadAttach n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] [Std.IteratorLoop α m o] [Std.LawfulIteratorLoop α m o] {it : Std.IterM m β} {f : β → n (ULift.{u_1, 0} Bool)} {init : γ} {g : β → γ → o (ForInStep γ)} : forIn (Std.IterM.filterM f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out) if __do_lift.down = true then g out acc else pure (ForInStep.yield acc) - Std.IterM.all_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n (ULift.{w, 0} Bool)} {p : β → Bool} : Std.IterM.all p (Std.IterM.filterM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x if __do_lift.down = true then pure { down := p x } else pure { down := true }) (Std.IterM.mapM pure it) - Std.IterM.any_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] [Std.Iterators.Finite α m] [MonadLiftT m n] [Std.IteratorLoop α m m] [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [LawfulMonadLiftT m n] [Std.LawfulIteratorLoop α m m] {it : Std.IterM m β} {f : β → n (ULift.{w, 0} Bool)} {p : β → Bool} : Std.IterM.any p (Std.IterM.filterM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x if __do_lift.down = true then pure { down := p x } else pure { down := false }) (Std.IterM.mapM pure it) - Std.IterM.step_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] {it : Std.IterM m β} {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} [Monad n] [LawfulMonad n] [MonadLiftT m n] : (Std.IterM.filterWithPostcondition f it).step = do let __do_lift ← liftM it.step match __do_lift.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => do let __do_lift ← (f out).operation match __do_lift with | ⟨{ down := false }, h'⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.filterWithPostcondition f it') ⋯)) | ⟨{ down := true }, h'⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.filterWithPostcondition f it') out ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.filterWithPostcondition f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.IterM.step_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Std.Iterator α m β] {it : Std.IterM m β} {f : β → n (ULift.{w, 0} Bool)} [Monad n] [MonadAttach n] [LawfulMonad n] [MonadLiftT m n] : (Std.IterM.filterM f it).step = do let __do_lift ← liftM it.step match __do_lift.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => do let __do_lift ← MonadAttach.attach (f out) match __do_lift with | ⟨{ down := false }, hf⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.filterM f it') ⋯)) | ⟨{ down := true }, hf⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.filterM f it') out ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.filterM f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.Iter.isEmpty_eq_isEmpty_toIterM 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} [Std.Iterator α Id β] [Std.IteratorLoop α Id Id] {it : Std.Iter β} : it.isEmpty = it.toIterM.isEmpty.run.down - Std.Iter.count_eq_count_toIterM 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type u_1} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] {it : Std.Iter β} : it.length = it.toIterM.length.run.down - Std.Iter.length_eq_length_toIterM 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] {it : Std.Iter β} : it.length = it.toIterM.length.run.down - Std.Iter.find?_eq_findM? 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} [Std.Iterator α Id β] [Std.IteratorLoop α Id Id] [Std.Iterators.Finite α Id] {it : Std.Iter β} {f : β → Bool} : it.find? f = (it.findM? fun x => pure { down := f x }).run - Std.Iter.findM?_toList 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type} {m : Type → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [LawfulMonad m] [Std.Iterators.Finite α Id] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m Bool} : List.findM? f it.toList = it.findM? fun x => ULift.up <$> f x - Std.Iter.findM?_eq_findM?_toList 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type} {m : Type → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [LawfulMonad m] [Std.Iterators.Finite α Id] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (ULift.{0, 0} Bool)} : it.findM? f = List.findM? (fun x => ULift.down <$> f x) it.toList - Std.Iter.findM?_eq_findSomeM? 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [Std.Iterators.Finite α Id] {it : Std.Iter β} {f : β → m (ULift.{w, 0} Bool)} : it.findM? f = it.findSomeM? fun x => do let __do_lift ← f x pure (if __do_lift.down = true then some x else none) - Std.Iter.findM?_pure 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [Std.IteratorLoop α Id Id] [LawfulMonad m] [Std.Iterators.Finite α Id] [Std.LawfulIteratorLoop α Id m] [Std.LawfulIteratorLoop α Id Id] {it : Std.Iter β} {f : β → ULift.{w, 0} Bool} : (it.findM? fun x => pure (f x)) = pure (it.find? fun x => (f x).down) - Std.Iter.findM?_eq_match_step 📋 Init.Data.Iterators.Lemmas.Consumers.Loop
{α β : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α Id β] [Std.IteratorLoop α Id m] [LawfulMonad m] [Std.Iterators.Finite α Id] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (ULift.{w, 0} Bool)} : it.findM? f = match ↑it.step with | Std.IterStep.yield it' out => do let __do_lift ← f out if __do_lift.down = true then pure (some out) else it'.findM? f | Std.IterStep.skip it' => it'.findM? f | Std.IterStep.done => pure none - Std.Iter.filterWithPostcondition_eq_toIter_filterMapWithPostcondition_toIterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] {f : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iter.filterWithPostcondition f it = Std.IterM.filterWithPostcondition f it.toIterM - Std.Iter.filterWithPostcondition.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] (f : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) (it : Std.Iter β) : Std.Iter.filterWithPostcondition f it = Std.IterM.filterWithPostcondition f it.toIterM - Std.Iter.filterM_eq_toIter_filterM_toIterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] [MonadAttach m] {f : β → m (ULift.{w, 0} Bool)} : Std.Iter.filterM f it = Std.IterM.filterM f it.toIterM - Std.Iter.filterM.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] [MonadAttach m] (f : β → m (ULift.{w, 0} Bool)) (it : Std.Iter β) : Std.Iter.filterM f it = Std.IterM.filterM f it.toIterM - Std.Iter.allM_eq_allM_mapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type} {m : Type → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.IteratorLoop α Id m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {p : β → m Bool} : Std.Iter.allM p it = ULift.down <$> Std.IterM.allM (fun x => ULift.up <$> p x) (Std.Iter.mapM pure it) - Std.Iter.anyM_eq_anyM_mapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type} {m : Type → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.IteratorLoop α Id m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {p : β → m Bool} : Std.Iter.anyM p it = ULift.down <$> Std.IterM.anyM (fun x => ULift.up <$> p x) (Std.Iter.mapM pure it) - Std.Iter.allM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f : β → m β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.Iter.mapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x p __do_lift) (Std.Iter.mapM pure it) - Std.Iter.anyM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f : β → m β'} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.Iter.mapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x p __do_lift) (Std.Iter.mapM pure it) - Std.Iter.fold_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β δ : Type w} {n : Type w → Type w''} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad n] [LawfulMonad n] [Std.IteratorLoop α Id n] [Std.LawfulIteratorLoop α Id n] {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} {g : δ → β → δ} {init : δ} {it : Std.Iter β} : Std.IterM.fold g init (Std.Iter.filterWithPostcondition f it) = Std.Iter.foldM (fun d b => do let __do_lift ← (f b).run pure (if __do_lift.down = true then g d b else d)) init it - Std.Iter.all_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m β'} {p : β' → Bool} : Std.IterM.all p (Std.Iter.mapM f it) = Std.IterM.allM (fun x => (fun x => { down := p x }) <$> f x) (Std.Iter.mapM pure it) - Std.Iter.any_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m β'} {p : β' → Bool} : Std.IterM.any p (Std.Iter.mapM f it) = Std.IterM.anyM (fun x => (fun x => { down := p x }) <$> f x) (Std.Iter.mapM pure it) - Std.Iter.fold_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β δ : Type w} {n : Type w → Type w''} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Std.IteratorLoop α Id n] [Std.LawfulIteratorLoop α Id n] {f : β → n (ULift.{w, 0} Bool)} {g : δ → β → δ} {init : δ} {it : Std.Iter β} : Std.IterM.fold g init (Std.Iter.filterM f it) = Std.Iter.foldM (fun d b => do let __do_lift ← f b pure (if __do_lift.down = true then g d b else d)) init it - Std.Iter.allM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f : β → m (Option β')} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.Iter.filterMapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x match __do_lift with | some fx => p fx | none => pure { down := true }) (Std.Iter.mapM pure it) - Std.Iter.anyM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f : β → m (Option β')} {p : β' → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.Iter.filterMapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x match __do_lift with | some fx => p fx | none => pure { down := false }) (Std.Iter.mapM pure it) - Std.Iter.foldM_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β δ : Type w} {n : Type w → Type w''} {o : Type w → Type w'''} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad n] [Monad o] [LawfulMonad n] [LawfulMonad o] [Std.IteratorLoop α Id n] [Std.IteratorLoop α Id o] [Std.LawfulIteratorLoop α Id n] [Std.LawfulIteratorLoop α Id o] [MonadLiftT n o] [LawfulMonadLiftT n o] {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} {g : δ → β → o δ} {init : δ} {it : Std.Iter β} : Std.IterM.foldM g init (Std.Iter.filterWithPostcondition f it) = Std.Iter.foldM (fun d b => do let __do_lift ← liftM (f b).run if __do_lift.down = true then g d b else pure d) init it - Std.Iter.all_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (Option β')} {p : β' → Bool} : Std.IterM.all p (Std.Iter.filterMapM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x match __do_lift with | some fx => pure { down := p fx } | none => pure { down := true }) (Std.Iter.mapM pure it) - Std.Iter.any_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (Option β')} {p : β' → Bool} : Std.IterM.any p (Std.Iter.filterMapM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x match __do_lift with | some fx => pure { down := p fx } | none => pure { down := false }) (Std.Iter.mapM pure it) - Std.Iter.foldM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β δ : Type w} {n : Type w → Type w''} {o : Type w → Type w'''} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [LawfulMonad o] [Std.IteratorLoop α Id n] [Std.IteratorLoop α Id o] [Std.LawfulIteratorLoop α Id n] [Std.LawfulIteratorLoop α Id o] [MonadLiftT n o] [LawfulMonadLiftT n o] {f : β → n (ULift.{w, 0} Bool)} {g : δ → β → o δ} {init : δ} {it : Std.Iter β} : Std.IterM.foldM g init (Std.Iter.filterM f it) = Std.Iter.foldM (fun d b => do let __do_lift ← liftM (f b) if __do_lift.down = true then g d b else pure d) init it - Std.Iter.forIn_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {n : Type w → Type w''} {o : Type w → Type u_1} [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadLiftT n o] [LawfulMonadLiftT n o] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id o] [Std.LawfulIteratorLoop α Id o] {it : Std.Iter β} {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} {init : γ} {g : β → γ → o (ForInStep γ)} : forIn (Std.Iter.filterWithPostcondition f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out).run if __do_lift.down = true then g out acc else pure (ForInStep.yield acc) - Std.Iter.forIn_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {n : Type w → Type w''} {o : Type w → Type u_1} [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadAttach n] [WeaklyLawfulMonadAttach n] [MonadLiftT n o] [LawfulMonadLiftT n o] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id o] [Std.LawfulIteratorLoop α Id o] {it : Std.Iter β} {f : β → n (ULift.{w, 0} Bool)} {init : γ} {g : β → γ → o (ForInStep γ)} : forIn (Std.Iter.filterM f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out) if __do_lift.down = true then g out acc else pure (ForInStep.yield acc) - Std.Iter.allM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f p : β → m (ULift.{w, 0} Bool)} : Std.IterM.allM p (Std.Iter.filterM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x if __do_lift.down = true then p x else pure { down := true }) (Std.Iter.mapM pure it) - Std.Iter.anyM_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] {it : Std.Iter β} {f p : β → m (ULift.{w, 0} Bool)} : Std.IterM.anyM p (Std.Iter.filterM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x if __do_lift.down = true then p x else pure { down := false }) (Std.Iter.mapM pure it) - Std.Iter.all_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (ULift.{w, 0} Bool)} {p : β → Bool} : Std.IterM.all p (Std.Iter.filterM f it) = Std.IterM.allM (fun x => do let __do_lift ← f x if __do_lift.down = true then pure { down := p x } else pure { down := true }) (Std.Iter.mapM pure it) - Std.Iter.any_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} {m : Type w → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id m] [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → m (ULift.{w, 0} Bool)} {p : β → Bool} : Std.IterM.any p (Std.Iter.filterM f it) = Std.IterM.anyM (fun x => do let __do_lift ← f x if __do_lift.down = true then pure { down := p x } else pure { down := false }) (Std.Iter.mapM pure it) - Std.Iter.step_filterWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} {n : Type w → Type w''} {f : β → Std.Iterators.PostconditionT n (ULift.{w, 0} Bool)} [Monad n] [LawfulMonad n] [MonadLiftT m n] : (Std.Iter.filterWithPostcondition f it).step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => do let __do_lift ← (f out).operation match __do_lift with | ⟨{ down := false }, h'⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.filterWithPostcondition f it') ⋯)) | ⟨{ down := true }, h'⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.Iter.filterWithPostcondition f it') out ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.filterWithPostcondition f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.Iter.step_filterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} {n : Type w → Type w''} {f : β → n (ULift.{w, 0} Bool)} [Monad n] [MonadAttach n] [LawfulMonad n] [MonadLiftT m n] : (Std.Iter.filterM f it).step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => do let __do_lift ← MonadAttach.attach (f out) match __do_lift with | ⟨{ down := false }, hf⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.filterM f it') ⋯)) | ⟨{ down := true }, hf⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.Iter.filterM f it') out ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.filterM f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - instDecidableEqULift 📋 Init.Data.ULift
{α✝ : Type u_1} [DecidableEq α✝] : DecidableEq (ULift.{u_2, u_1} α✝) - instSubsingletonULift 📋 Init.Data.ULift
{α : Type u_1} [Subsingleton α] : Subsingleton (ULift.{u_2, u_1} α) - instDecidableEqULift.decEq 📋 Init.Data.ULift
{α✝ : Type u_1} [DecidableEq α✝] (x✝ x✝¹ : ULift.{u_2, u_1} α✝) : Decidable (x✝ = x✝¹) - Std.Iterators.ULiftT.run 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{n : Type (max u v) → Type v'} {α : Type u} (x : Std.Iterators.ULiftT n α) : n (ULift.{v, u} α) - Std.Iterators.Types.ULiftIterator.instIterator 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} [Std.Iterator α m β] [Monad n] : Std.Iterator (Std.Iterators.Types.ULiftIterator α m n β lift) n (ULift.{v, u} β) - Std.IterM.uLift 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α β : Type u} {m : Type u → Type u'} (it : Std.IterM m β) (n : Type (max u v) → Type v') [lift : MonadLiftT m (Std.Iterators.ULiftT n)] : Std.IterM n (ULift.{v, u} β) - Std.Iterators.Types.ULiftIterator.Monadic.modifyStep 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} (step : Std.IterStep (Std.IterM m β) β) : Std.IterStep (Std.IterM n (ULift.{v, u} β)) (ULift.{v, u} β) - Std.Iterators.ULiftT.run_pure 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{n : Type (max u v) → Type v'} [Monad n] {α : Type u} {a : α} : (pure a).run = pure { down := a } - Std.Iterators.Types.ULiftIterator.instFinite 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} [Std.Iterator α m β] [Std.Iterators.Finite α m] [Monad n] : Std.Iterators.Finite (Std.Iterators.Types.ULiftIterator α m n β lift) n - Std.Iterators.Types.ULiftIterator.instIteratorLoop 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} {o : Type x → Type x'} [Monad n] [Monad o] [Std.Iterator α m β] : Std.IteratorLoop (Std.Iterators.Types.ULiftIterator α m n β lift) n o - Std.Iterators.Types.ULiftIterator.instProductive 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} [Std.Iterator α m β] [Std.Iterators.Productive α m] [Monad n] : Std.Iterators.Productive (Std.Iterators.Types.ULiftIterator α m n β lift) n - Std.Iterators.ULiftT.run_bind 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{n : Type (max u v) → Type v'} [Monad n] {α β : Type u} {x : Std.Iterators.ULiftT n α} {f : α → Std.Iterators.ULiftT n β} : (x >>= f).run = do let a ← x.run (f a.down).run - Std.Iterators.ULiftT.run_map 📋 Init.Data.Iterators.Combinators.Monadic.ULift
{n : Type (max u v) → Type v'} [Monad n] {α β : Type u} {x : Std.Iterators.ULiftT n α} {f : α → β} : (f <$> x).run = do let a ← x.run pure { down := f a.down } - Std.Iter.uLift 📋 Init.Data.Iterators.Combinators.ULift
{α β : Type u} (it : Std.Iter β) : Std.Iter (ULift.{v, u} β) - Std.Iterators.Types.ULiftIterator.modifyStep 📋 Init.Data.Iterators.Combinators.ULift
{α β : Type u} (step : Std.IterStep (Std.Iter β) β) : Std.IterStep (Std.Iter (ULift.{v, u} β)) (ULift.{v, u} β) - Std.IterM.count_attachWith 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.Attach
{α : Type u_1} {m : Type u_1 → Type u_2} {β : Type u_1} {P : β → Prop} {n : Type u_3 → Type u_4} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} {hP : ∀ (out : β), it.IsPlausibleIndirectOutput out → P out} [Std.Iterators.Finite α m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] : (it.attachWith P hP).length = it.length - Std.IterM.length_attachWith 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.Attach
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Prop} {n : Type u_1 → Type u_2} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} {hP : ∀ (out : β), it.IsPlausibleIndirectOutput out → P out} [Std.Iterators.Finite α m] [Std.IteratorLoop α m m] [LawfulMonad m] [Std.LawfulIteratorLoop α m m] : (it.attachWith P hP).length = it.length - Std.Iterators.Types.ULiftIterator.Monadic.modifyStep.eq_3 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} : Std.Iterators.Types.ULiftIterator.Monadic.modifyStep Std.IterStep.done = Std.IterStep.done - Std.IterM.uLift.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α β : Type u} {m : Type u → Type u'} (it : Std.IterM m β) (n : Type (max u v) → Type v') [lift : MonadLiftT m (Std.Iterators.ULiftT n)] : it.uLift n = { internalState := { inner := it } } - Std.Iterators.Types.ULiftIterator.Monadic.modifyStep.eq_2 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} (it' : Std.IterM m β) : Std.Iterators.Types.ULiftIterator.Monadic.modifyStep (Std.IterStep.skip it') = Std.IterStep.skip { internalState := { inner := it' } } - Std.Iterators.Types.ULiftIterator.Monadic.modifyStep.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} {lift : ⦃γ : Type u⦄ → m γ → Std.Iterators.ULiftT n γ} (it' : Std.IterM m β) (out : β) : Std.Iterators.Types.ULiftIterator.Monadic.modifyStep (Std.IterStep.yield it' out) = Std.IterStep.yield { internalState := { inner := it' } } { down := out } - Std.IterM.toArray_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] [Std.Iterators.Finite α m] [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).toArray = (fun l => Array.map ULift.up l.down) <$> (monadLift it.toArray).run - Std.IterM.toListRev_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] [Std.Iterators.Finite α m] [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).toListRev = (fun l => List.map ULift.up l.down) <$> (monadLift it.toListRev).run - Std.IterM.toList_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] [Std.Iterators.Finite α m] [LawfulMonad m] [LawfulMonad n] [LawfulMonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).toList = (fun l => List.map ULift.up l.down) <$> (monadLift it.toList).run - Std.IterM.count_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u_1} {m : Type u_1 → Type u_2} {n : Type (max u_1 u_3) → Type u_4} {β : Type u_1} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] [Std.Iterators.Finite α m] [Std.IteratorLoop α m m] [LawfulMonad m] [LawfulMonad n] [Std.LawfulIteratorLoop α m m] [LawfulMonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).length = (fun x => { down := x.down.down }) <$> (monadLift it.length).run - Std.IterM.length_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} [Std.Iterator α m β] [Monad m] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] [Std.Iterators.Finite α m] [Std.IteratorLoop α m m] [LawfulMonad m] [LawfulMonad n] [Std.LawfulIteratorLoop α m m] [LawfulMonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).length = (fun x => { down := x.down.down }) <$> (monadLift it.length).run - Std.IterM.step_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.ULift
{α : Type u} {m : Type u → Type u'} {n : Type (max u v) → Type v'} {β : Type u} [Std.Iterator α m β] [Monad n] {it : Std.IterM m β} [MonadLiftT m (Std.Iterators.ULiftT n)] : (it.uLift n).step = do let __do_lift ← (monadLift it.step).run match __do_lift.down.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (it'.uLift n) { down := out } ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (it'.uLift n) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.Iter.uLift_eq_toIter_uLift_toIterM 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} {it : Std.Iter β} : it.uLift = (it.toIterM.uLift Id).toIter - Std.Iter.toArray_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] : it.uLift.toArray = Array.map ULift.up it.toArray - Std.Iter.toListRev_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] : it.uLift.toListRev = List.map ULift.up it.toListRev - Std.Iter.toList_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] : it.uLift.toList = List.map ULift.up it.toList - Std.Iter.count_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u_1} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] [Std.LawfulIteratorLoop α Id Id] : it.uLift.length = it.length - Std.Iter.length_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] [Std.LawfulIteratorLoop α Id Id] : it.uLift.length = it.length - Std.Iter.step_uLift 📋 Init.Data.Iterators.Lemmas.Combinators.ULift
{α β : Type u} [Std.Iterator α Id β] {it : Std.Iter β} : it.uLift.step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => Std.PlausibleIterStep.yield it'.uLift { down := out } ⋯ | ⟨Std.IterStep.skip it', h⟩ => Std.PlausibleIterStep.skip it'.uLift ⋯ | ⟨Std.IterStep.done, h⟩ => Std.PlausibleIterStep.done ⋯ - Std.Iterators.Types.TakeWhile 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
(α : Type w) (m : Type w → Type w') (β : Type w) (P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) : Type w - Std.Iterators.Types.TakeWhile.inner 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (self : Std.Iterators.Types.TakeWhile α m β P) : Std.IterM m β - Std.Iterators.Types.TakeWhile.mk 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (inner : Std.IterM m β) : Std.Iterators.Types.TakeWhile α m β P - Std.IterM.takeWhileWithPostcondition 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} (P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM m β - Std.Iterators.Types.TakeWhile.instIterator 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iterator (Std.Iterators.Types.TakeWhile α m β P) m β - Std.Iterators.Types.TakeWhile.PlausibleStep 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (it : Std.IterM m β) (step : Std.IterStep (Std.IterM m β) β) : Prop - Std.Iterators.Types.TakeWhile.instFinite 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iterators.Finite (Std.Iterators.Types.TakeWhile α m β P) m - Std.Iterators.Types.TakeWhile.instProductive 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [Std.Iterator α m β] [Std.Iterators.Productive α m] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iterators.Productive (Std.Iterators.Types.TakeWhile α m β P) m - Std.IterM.takeWhileM 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [MonadAttach m] (P : β → m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM m β - Std.Iterators.Types.TakeWhile.instIteratorLoop 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {n : Type u_1 → Type u_2} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} [Monad m] [Monad n] [Std.Iterator α m β] [Std.IteratorLoop α m n] : Std.IteratorLoop (Std.Iterators.Types.TakeWhile α m β P) m n - Std.Iterators.Types.TakeWhile.mk.injEq 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (inner inner✝ : Std.IterM m β) : ({ inner := inner } = { inner := inner✝ }) = (inner = inner✝) - Std.IterM.takeWhile 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] (P : β → Bool) (it : Std.IterM m β) : Std.IterM m β - Std.Iterators.Types.TakeWhile.PlausibleStep.done 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} {it : Std.IterM m β} : it.internalState.inner.IsPlausibleStep Std.IterStep.done → Std.Iterators.Types.TakeWhile.PlausibleStep it Std.IterStep.done - Std.Iterators.Types.TakeWhile.mk.sizeOf_spec 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} [SizeOf α] [(a : Type w) → SizeOf (m a)] [SizeOf β] (inner : Std.IterM m β) : sizeOf { inner := inner } = 1 + sizeOf inner - Std.Iterators.Types.TakeWhile.PlausibleStep.skip 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} {it : Std.IterM m β} {it' : Std.IterM m β} : it.internalState.inner.IsPlausibleStep (Std.IterStep.skip it') → Std.Iterators.Types.TakeWhile.PlausibleStep it (Std.IterStep.skip (Std.IterM.takeWhileWithPostcondition P it')) - Std.Iterators.Types.TakeWhile.PlausibleStep.rejected 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} {it : Std.IterM m β} {it' : Std.IterM m β} {out : β} : it.internalState.inner.IsPlausibleStep (Std.IterStep.yield it' out) → (P out).Property { down := false } → Std.Iterators.Types.TakeWhile.PlausibleStep it Std.IterStep.done - Std.Iterators.Types.TakeWhile.PlausibleStep.yield 📋 Std.Data.Iterators.Combinators.Monadic.TakeWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} {it : Std.IterM m β} {it' : Std.IterM m β} {out : β} : it.internalState.inner.IsPlausibleStep (Std.IterStep.yield it' out) → (P out).Property { down := true } → Std.Iterators.Types.TakeWhile.PlausibleStep it (Std.IterStep.yield (Std.IterM.takeWhileWithPostcondition P it') out) - Std.Iterators.Types.DropWhile 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
(α : Type w) (m : Type w → Type w') (β : Type w) (P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) : Type w - Std.Iterators.Types.DropWhile.dropping 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (self : Std.Iterators.Types.DropWhile α m β P) : Bool - Std.Iterators.Types.DropWhile.inner 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (self : Std.Iterators.Types.DropWhile α m β P) : Std.IterM m β - Std.Iterators.Types.DropWhile.mk 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (dropping : Bool) (inner : Std.IterM m β) : Std.Iterators.Types.DropWhile α m β P - Std.IterM.dropWhileWithPostcondition 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} (P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM m β - Std.IterM.Intermediate.dropWhileWithPostcondition 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} (P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)) (dropping : Bool) (it : Std.IterM m β) : Std.IterM m β - Std.Iterators.Types.DropWhile.instIterator 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iterator (Std.Iterators.Types.DropWhile α m β P) m β - Std.Iterators.Types.DropWhile.PlausibleStep 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Std.Iterator α m β] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} (it : Std.IterM m β) (step : Std.IterStep (Std.IterM m β) β) : Prop - Std.Iterators.Types.DropWhile.instFinite 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} : Std.Iterators.Finite (Std.Iterators.Types.DropWhile α m β P) m - Std.Iterators.Types.DropWhile.instIteratorLoop 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} {n : Type u_1 → Type u_2} {P : β → Std.Iterators.PostconditionT m (ULift.{w, 0} Bool)} [Monad m] [Monad n] [Std.Iterator α m β] : Std.IteratorLoop (Std.Iterators.Types.DropWhile α m β P) m n - Std.IterM.dropWhileM 📋 Std.Data.Iterators.Combinators.Monadic.DropWhile
{α : Type w} {m : Type w → Type w'} {β : Type w} [Monad m] [MonadAttach m] (P : β → m (ULift.{w, 0} Bool)) (it : Std.IterM m β) : Std.IterM m β
About
Loogle searches Lean and Mathlib definitions and theorems.
You can use Loogle from within the Lean4 VSCode language extension
using (by default) Ctrl-K Ctrl-S. You can also try the
#loogle command from LeanSearchClient,
the CLI version, the Loogle
VS Code extension, the lean.nvim
integration or the Zulip bot.
Usage
Loogle finds definitions and lemmas in various ways:
By constant:
🔍Real.sin
finds all lemmas whose statement somehow mentions the sine function.By lemma name substring:
🔍"differ"
finds all lemmas that have"differ"somewhere in their lemma name.By subexpression:
🔍_ * (_ ^ _)
finds all lemmas whose statements somewhere include a product where the second argument is raised to some power.The pattern can also be non-linear, as in
🔍Real.sqrt ?a * Real.sqrt ?aIf the pattern has parameters, they are matched in any order. Both of these will find
List.map:
🔍(?a -> ?b) -> List ?a -> List ?b
🔍List ?a -> (?a -> ?b) -> List ?bBy main conclusion:
🔍|- tsum _ = _ * tsum _
finds all lemmas where the conclusion (the subexpression to the right of all→and∀) has the given shape.As before, if the pattern has parameters, they are matched against the hypotheses of the lemma in any order; for example,
🔍|- _ < _ → tsum _ < tsum _
will findtsum_lt_tsumeven though the hypothesisf i < g iis not the last.
If you pass more than one such search filter, separated by commas
Loogle will return lemmas which match all of them. The
search
🔍 Real.sin, "two", tsum, _ * _, _ ^ _, |- _ < _ → _
would find all lemmas which mention the constants Real.sin
and tsum, have "two" as a substring of the
lemma name, include a product and a power somewhere in the type,
and have a hypothesis of the form _ < _ (if
there were any such lemmas). Metavariables (?a) are
assigned independently in each filter.
The #lucky button will directly send you to the
documentation of the first hit.
Source code
You can find the source code for this service at https://github.com/nomeata/loogle. The https://loogle.lean-lang.org/ service is provided by the Lean FRO.
This is Loogle revision 36960b0 serving mathlib revision e1fdf08