Loogle!
Result
Found 394 declarations mentioning Std.Iterators.Types.Map. Of these, only the first 200 are shown.
- Std.Iterators.Types.Map 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
(α : Type w) {β γ : Type w} (m : Type w → Type w') (n : Type w → Type w'') (lift : ⦃α : Type w⦄ → m α → n α) [Functor n] (f : β → Std.Iterators.PostconditionT n γ) : Type w - Std.Iterators.Types.Map.instIterator 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [Std.Iterator α m β] {lift : ⦃α : Type w⦄ → m α → n α} {f : β → Std.Iterators.PostconditionT n γ} : Std.Iterator (Std.Iterators.Types.Map α m n lift f) n γ - Std.IterM.InternalCombinators.map 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] (lift : ⦃α : Type w⦄ → m α → n α) [Std.Iterator α m β] (f : β → Std.Iterators.PostconditionT n γ) (it : Std.IterM m β) : Std.IterM n γ - Std.IterM.mapWithPostcondition 📋 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 γ) (it : Std.IterM m β) : Std.IterM n γ - Std.IterM.mapM 📋 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 γ) (it : Std.IterM m β) : Std.IterM n γ - Std.Iterators.Types.Map.instFinite 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [Std.Iterator α m β] {lift : ⦃α : Type w⦄ → m α → n α} {f : β → Std.Iterators.PostconditionT n γ} [Std.Iterators.Finite α m] : Std.Iterators.Finite (Std.Iterators.Types.Map α m n lift f) n - Std.Iterators.Types.Map.instIteratorLoop 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type x → Type x'} [Monad n] [Monad o] [Std.Iterator α m β] {lift : ⦃α : Type w⦄ → m α → n α} {f : β → Std.Iterators.PostconditionT n γ} : Std.IteratorLoop (Std.Iterators.Types.Map α m n lift f) n o - Std.Iterators.Types.Map.instProductive 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [Std.Iterator α m β] {lift : ⦃α : Type w⦄ → m α → n α} {f : β → Std.Iterators.PostconditionT n γ} [Std.Iterators.Productive α m] : Std.Iterators.Productive (Std.Iterators.Types.Map α m n lift f) n - Std.IterM.map 📋 Init.Data.Iterators.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Monad m] (f : β → γ) (it : Std.IterM m β) : Std.IterM m γ - Std.Iter.mapWithPostcondition 📋 Init.Data.Iterators.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] (f : β → Std.Iterators.PostconditionT m γ) (it : Std.Iter β) : Std.IterM m γ - Std.Iter.map 📋 Init.Data.Iterators.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] (f : β → γ) (it : Std.Iter β) : Std.Iter γ - Std.Iter.mapM 📋 Init.Data.Iterators.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] [MonadAttach m] (f : β → m γ) (it : Std.Iter β) : Std.IterM m γ - Std.Iterators.Types.Map.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
(α : Type w) {β γ : Type w} (m : Type w → Type w') (n : Type w → Type w'') (lift : ⦃α : Type w⦄ → m α → n α) [Functor n] (f : β → Std.Iterators.PostconditionT n γ) : Std.Iterators.Types.Map α m n lift f = Std.Iterators.Types.FilterMap α m n lift fun b => Std.Iterators.PostconditionT.map some (f b) - Std.IterM.mapWithPostcondition.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 γ) (it : Std.IterM m β) : Std.IterM.mapWithPostcondition f it = Std.IterM.InternalCombinators.map (fun {x} => monadLift) f it - Std.IterM.mapM.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 γ) (it : Std.IterM m β) : Std.IterM.mapM f it = Std.IterM.mapWithPostcondition (fun b => Std.Iterators.PostconditionT.attachLift (f b)) it - Std.IterM.map.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Std.Iterator α m β] [Monad m] (f : β → γ) (it : Std.IterM m β) : Std.IterM.map f it = Std.IterM.mapWithPostcondition (fun b => pure (f b)) it - Std.IterM.InternalCombinators.map.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] (lift : ⦃α : Type w⦄ → m α → n α) [Std.Iterator α m β] (f : β → Std.Iterators.PostconditionT n γ) (it : Std.IterM m β) : Std.IterM.InternalCombinators.map lift f it = Std.IterM.mk { inner := it } n γ - Std.Iterators.Types.Map.instIterator.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad n] [Std.Iterator α m β] {lift : ⦃α : Type w⦄ → m α → n α} {f : β → Std.Iterators.PostconditionT n γ} : Std.Iterators.Types.Map.instIterator = inferInstanceAs (Std.Iterator (Std.Iterators.Types.FilterMap α m n lift fun b => Std.Iterators.PostconditionT.map some (f b)) n γ) - Std.IterM.toArray_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} (it : Std.IterM Id β) : (Std.IterM.mapWithPostcondition f it).toArray = Array.mapM (fun x => (f x).run) it.toArray.run - Std.IterM.toList_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} (it : Std.IterM Id β) : (Std.IterM.mapWithPostcondition f it).toList = List.mapM (fun x => (f x).run) it.toList.run - Std.IterM.toArray_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → m γ} (it : Std.IterM Id β) : (Std.IterM.mapM f it).toArray = Array.mapM f it.toArray.run - Std.IterM.toList_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → m γ} (it : Std.IterM Id β) : (Std.IterM.mapM f it).toList = List.mapM f it.toList.run - Std.IterM.toArray_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} (it : Std.IterM m β) : (Std.IterM.map f it).toArray = (fun x => Array.map f x) <$> it.toArray - Std.IterM.toListRev_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} (it : Std.IterM m β) : (Std.IterM.map f it).toListRev = (fun x => List.map f x) <$> it.toListRev - Std.IterM.toListRev_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} (it : Std.IterM Id β) : (Std.IterM.mapWithPostcondition f it).toListRev = List.reverse <$> List.mapM (fun x => (f x).run) it.toList.run - Std.IterM.toList_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → β'} (it : Std.IterM m β) : (Std.IterM.map f it).toList = (fun x => List.map f x) <$> it.toList - Std.IterM.toListRev_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterators.Finite α Id] {f : β → m γ} (it : Std.IterM Id β) : (Std.IterM.mapM f it).toListRev = List.reverse <$> List.mapM f it.toList.run - Std.IterM.count_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).count = it.count - 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.fold_mapWithPostcondition 📋 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 γ} {g : δ → γ → δ} {init : δ} {it : Std.IterM m β} : Std.IterM.fold g init (Std.IterM.mapWithPostcondition f it) = Std.IterM.foldM (fun d b => do let c ← (f b).run pure (g d c)) init it - Std.IterM.fold_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : 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] {f : β → γ} {g : δ → γ → δ} {init : δ} {it : Std.IterM m β} : Std.IterM.fold g init (Std.IterM.map f it) = Std.IterM.fold (fun d b => g d (f b)) init it - Std.IterM.toArray_mapM_eq_toArray_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toArray = (Std.IterM.mapWithPostcondition (fun b => Std.Iterators.PostconditionT.attachLift (f b)) it).toArray - Std.IterM.toArray_mapWithPostcondition_eq_toArray_filterMapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition f it).toArray = (Std.IterM.filterMapWithPostcondition (fun x => Std.Iterators.PostconditionT.map some (f x)) it).toArray - Std.IterM.toListRev_mapM_eq_toListRev_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toListRev = (Std.IterM.mapWithPostcondition (fun b => Std.Iterators.PostconditionT.attachLift (f b)) it).toListRev - Std.IterM.toListRev_mapWithPostcondition_eq_toListRev_filterMapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition f it).toListRev = (Std.IterM.filterMapWithPostcondition (fun x => Std.Iterators.PostconditionT.map some (f x)) it).toListRev - Std.IterM.toList_mapM_eq_toList_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toList = (Std.IterM.mapWithPostcondition (fun b => Std.Iterators.PostconditionT.attachLift (f b)) it).toList - Std.IterM.toList_mapWithPostcondition_eq_toList_filterMapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition f it).toList = (Std.IterM.filterMapWithPostcondition (fun x => Std.Iterators.PostconditionT.map some (f x)) it).toList - Std.IterM.fold_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] [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 γ} {g : δ → γ → δ} {init : δ} {it : Std.IterM m β} : Std.IterM.fold g init (Std.IterM.mapM f it) = Std.IterM.foldM (fun d b => do let c ← f b pure (g d c)) init it - Std.IterM.foldM_map 📋 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] [Monad n] [LawfulMonad m] [LawfulMonad n] [Std.IteratorLoop α m n] [Std.LawfulIteratorLoop α m n] [MonadLiftT m n] [LawfulMonadLiftT m n] {f : β → γ} {g : δ → γ → n δ} {init : δ} {it : Std.IterM m β} : Std.IterM.foldM g init (Std.IterM.map f it) = Std.IterM.foldM (fun d b => g d (f b)) init it - Std.IterM.toArray_map_eq_toArray_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toArray = (Std.IterM.mapM (fun b => pure (f b)) it).toArray - Std.IterM.toListRev_map_eq_toListRev_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toListRev = (Std.IterM.mapM (fun b => pure (f b)) it).toListRev - Std.IterM.toList_map_eq_toList_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toList = (Std.IterM.mapM (fun b => pure (f b)) it).toList - Std.IterM.toArray_mapM_eq_toArray_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toArray = (Std.IterM.filterMapM (fun b => some <$> f b) it).toArray - Std.IterM.toArray_map_eq_toArray_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toArray = (Std.IterM.filterMapM (fun b => pure (some (f b))) it).toArray - Std.IterM.toListRev_mapM_eq_toListRev_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toListRev = (Std.IterM.filterMapM (fun b => some <$> f b) it).toListRev - Std.IterM.toListRev_map_eq_toListRev_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toListRev = (Std.IterM.filterMapM (fun b => pure (some (f b))) it).toListRev - Std.IterM.toList_mapM_eq_toList_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {it : Std.IterM m β} : (Std.IterM.mapM f it).toList = (Std.IterM.filterMapM (fun b => some <$> f b) it).toList - Std.IterM.toList_map_eq_toList_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {it : Std.IterM m β} : (Std.IterM.map f it).toList = (Std.IterM.filterMapM (fun b => pure (some (f b))) it).toList - Std.IterM.foldM_mapWithPostcondition 📋 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 γ} {g : δ → γ → o δ} {init : δ} {it : Std.IterM m β} : Std.IterM.foldM g init (Std.IterM.mapWithPostcondition f it) = Std.IterM.foldM (fun d b => do let c ← liftM (f b).run g d c) init it - Std.IterM.forIn_mapWithPostcondition 📋 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 β₂} {init : γ} {g : β₂ → γ → o (ForInStep γ)} : forIn (Std.IterM.mapWithPostcondition f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out).run g __do_lift acc - Std.IterM.foldM_mapM 📋 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 γ} {g : δ → γ → o δ} {init : δ} {it : Std.IterM m β} : Std.IterM.foldM g init (Std.IterM.mapM f it) = Std.IterM.foldM (fun d b => do let c ← liftM (f b) g d c) init it - Std.IterM.forIn_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{m : Type u_1 → Type u_2} {n : Type u_1 → Type u_3} {α β β₂ γ : Type u_1} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] [Std.IteratorLoop α m n] [Std.LawfulIteratorLoop α m n] {it : Std.IterM m β} {f : β → β₂} {init : γ} {g : β₂ → γ → n (ForInStep γ)} : forIn (Std.IterM.map f it) init g = forIn it init fun out acc => g (f out) acc - 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.forIn_mapM 📋 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 β₂} {init : γ} {g : β₂ → γ → o (ForInStep γ)} : forIn (Std.IterM.mapM f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out) g __do_lift acc - 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.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.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.toArray_filterMapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.map f it)).toArray = (Std.IterM.filterMapM (fun b => g (f b)) it).toArray - Std.IterM.toListRev_filterMapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.map f it)).toListRev = (Std.IterM.filterMapM (fun b => g (f b)) it).toListRev - Std.IterM.toList_filterMapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.map f it)).toList = (Std.IterM.filterMapM (fun b => g (f b)) it).toList - Std.IterM.toArray_mapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.map f it)).toArray = (Std.IterM.mapM (fun b => g (f b)) it).toArray - Std.IterM.toListRev_mapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.map f it)).toListRev = (Std.IterM.mapM (fun b => g (f b)) it).toListRev - Std.IterM.toList_mapM_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → γ} {g : γ → n δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.map f it)).toList = (Std.IterM.mapM (fun b => g (f b)) it).toList - Std.IterM.toArray_map_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → δ} {it : Std.IterM m β} : (Std.IterM.map g (Std.IterM.mapM f it)).toArray = (Std.IterM.mapM (fun b => do let __do_lift ← f b pure (g __do_lift)) it).toArray - Std.IterM.toListRev_map_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → δ} {it : Std.IterM m β} : (Std.IterM.map g (Std.IterM.mapM f it)).toListRev = (Std.IterM.mapM (fun b => do let __do_lift ← f b pure (g __do_lift)) it).toListRev - Std.IterM.toList_map_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → δ} {it : Std.IterM m β} : (Std.IterM.map g (Std.IterM.mapM f it)).toList = (Std.IterM.mapM (fun b => do let __do_lift ← f b pure (g __do_lift)) it).toList - 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.toArray_filterMapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.mapM f it)).toArray = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toArray - Std.IterM.toListRev_filterMapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.mapM f it)).toListRev = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toListRev - Std.IterM.toList_filterMapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o (Option δ)} {it : Std.IterM m β} : (Std.IterM.filterMapM g (Std.IterM.mapM f it)).toList = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toList - Std.IterM.toArray_mapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.mapM f it)).toArray = (Std.IterM.mapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toArray - Std.IterM.toListRev_mapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.mapM f it)).toListRev = (Std.IterM.mapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toListRev - Std.IterM.toList_mapM_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n γ} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.mapM f it)).toList = (Std.IterM.mapM (fun b => do let __do_lift ← liftM (f b) g __do_lift) it).toList - 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.toArray_mapWithPostcondition_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {g : γ → Std.Iterators.PostconditionT o δ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition g (Std.IterM.mapWithPostcondition f it)).toArray = (Std.IterM.mapWithPostcondition (fun x => liftM (f x) >>= g) it).toArray - Std.IterM.toListRev_mapWithPostcondition_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {g : γ → Std.Iterators.PostconditionT o δ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition g (Std.IterM.mapWithPostcondition f it)).toListRev = (Std.IterM.mapWithPostcondition (fun x => liftM (f x) >>= g) it).toListRev - Std.IterM.toList_mapWithPostcondition_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [Monad o] [LawfulMonad o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → Std.Iterators.PostconditionT n γ} {g : γ → Std.Iterators.PostconditionT o δ} {it : Std.IterM m β} : (Std.IterM.mapWithPostcondition g (Std.IterM.mapWithPostcondition f it)).toList = (Std.IterM.mapWithPostcondition (fun x => liftM (f x) >>= g) it).toList - Std.IterM.toArray_mapM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n (Option γ)} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.filterMapM f it)).toArray = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) match __do_lift with | none => pure none | some fb => some <$> g fb) it).toArray - Std.IterM.toListRev_mapM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n (Option γ)} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.filterMapM f it)).toListRev = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) match __do_lift with | none => pure none | some fb => some <$> g fb) it).toListRev - Std.IterM.toList_mapM_filterMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β γ δ : Type w} {m : Type w → Type w'} {n : Type w → Type w''} {o : Type w → Type w'''} [Monad m] [LawfulMonad m] [Monad n] [MonadAttach n] [LawfulMonad n] [WeaklyLawfulMonadAttach n] [Monad o] [MonadAttach o] [LawfulMonad o] [WeaklyLawfulMonadAttach o] [MonadLiftT m n] [MonadLiftT n o] [LawfulMonadLiftT m n] [LawfulMonadLiftT n o] [Std.Iterator α m β] [Std.Iterators.Finite α m] {f : β → n (Option γ)} {g : γ → o δ} {it : Std.IterM m β} : (Std.IterM.mapM g (Std.IterM.filterMapM f it)).toList = (Std.IterM.filterMapM (fun b => do let __do_lift ← liftM (f b) match __do_lift with | none => pure none | some fb => some <$> g fb) it).toList - Std.IterM.step_mapWithPostcondition 📋 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 β} {γ : Type w} {f : β → Std.Iterators.PostconditionT n γ} [Monad n] [LawfulMonad n] [MonadLiftT m n] : (Std.IterM.mapWithPostcondition f it).step = do let __do_lift ← liftM it.step match __do_lift.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => do let out' ← (f out).operation pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.mapWithPostcondition f it') ↑out' ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.mapWithPostcondition f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.IterM.step_mapM 📋 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 β} {γ : Type w} {f : β → n γ} [Monad n] [MonadAttach n] [LawfulMonad n] [MonadLiftT m n] : (Std.IterM.mapM f it).step = do let __do_lift ← liftM it.step match __do_lift.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => do let out' ← MonadAttach.attach (f out) pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.mapM f it') ↑out' ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.mapM f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.IterM.step_map 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FilterMap
{α β β' : Type w} {m : Type w → Type w'} [Std.Iterator α m β] {it : Std.IterM m β} [Monad m] [LawfulMonad m] {f : β → β'} : (Std.IterM.map f it).step = do let __do_lift ← it.step match __do_lift.inflate with | ⟨Std.IterStep.yield it' out, h⟩ => let out' := f out; pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.map f it') out' ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.map f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - String.Slice.lines 📋 Init.Data.String.Slice
(s : String.Slice) : Std.Iter String.Slice - String.Slice.chars 📋 Init.Data.String.Slice
(s : String.Slice) : Std.Iter Char - String.Slice.revChars 📋 Init.Data.String.Slice
(s : String.Slice) : Std.Iter Char - String.lines 📋 Init.Data.String.Search
(s : String) : Std.Iter String.Slice - String.positions 📋 Init.Data.String.Search
(s : String) : Std.Iter { p // p ≠ s.endPos } - String.revPositions 📋 Init.Data.String.Search
(s : String) : Std.Iter { p // p ≠ s.endPos } - String.chars 📋 Init.Data.String.Search
(s : String) : Std.Iter Char - String.revChars 📋 Init.Data.String.Search
(s : String) : Std.Iter Char - Std.IterM.flatMapM 📋 Init.Data.Iterators.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it : Std.IterM m β) : Std.IterM m γ - Std.IterM.flatMapAfterM 📋 Init.Data.Iterators.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it₁ : Std.IterM m β) (it₂ : Option (Std.IterM m γ)) : Std.IterM m γ - Std.IterM.flatMap 📋 Init.Data.Iterators.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → Std.IterM m γ) (it : Std.IterM m β) : Std.IterM m γ - Std.IterM.flatMapAfter 📋 Init.Data.Iterators.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → Std.IterM m γ) (it₁ : Std.IterM m β) (it₂ : Option (Std.IterM m γ)) : Std.IterM m γ - Std.Iter.flatMap 📋 Init.Data.Iterators.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] (f : β → Std.Iter γ) (it : Std.Iter β) : Std.Iter γ - Std.Iter.flatMapAfter 📋 Init.Data.Iterators.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] (f : β → Std.Iter γ) (it₁ : Std.Iter β) (it₂ : Option (Std.Iter γ)) : Std.Iter γ - Std.Iter.flatMapM 📋 Init.Data.Iterators.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it : Std.Iter β) : Std.IterM m γ - Std.Iter.flatMapAfterM 📋 Init.Data.Iterators.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it₁ : Std.Iter β) (it₂ : Option (Std.IterM m γ)) : Std.IterM m γ - Std.IterM.flatMapM.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it : Std.IterM m β) : Std.IterM.flatMapM f it = Std.IterM.flatMapAfterM f it none - Std.IterM.flatMap.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] (f : β → Std.IterM m γ) (it : Std.IterM m β) : Std.IterM.flatMap f it = Std.IterM.flatMapAfter f it none - Std.Iterators.Types.Flatten.IsPlausibleStep.outerDone_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} (h : it₁.IsPlausibleStep Std.IterStep.done) : (Std.IterM.flatMapAfterM f it₁ none).IsPlausibleStep Std.IterStep.done - Std.Iterators.Types.Flatten.IsPlausibleStep.innerDone_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ : Std.IterM m γ} (h : it₂.IsPlausibleStep Std.IterStep.done) : (Std.IterM.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfterM f it₁ none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerSkip_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ it₁' : Std.IterM m β} (h : it₁.IsPlausibleStep (Std.IterStep.skip it₁')) : (Std.IterM.flatMapAfterM f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfterM f it₁' none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerSkip_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ it₂' : Std.IterM m γ} (h : it₂.IsPlausibleStep (Std.IterStep.skip it₂')) : (Std.IterM.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfterM f it₁ (some it₂'))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerYield_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ it₂' : Std.IterM m γ} {b : γ} (h : it₂.IsPlausibleStep (Std.IterStep.yield it₂' b)) : (Std.IterM.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.yield (Std.IterM.flatMapAfterM f it₁ (some it₂')) b) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerDone_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} (h : it₁.IsPlausibleStep Std.IterStep.done) : (Std.IterM.flatMapAfter f it₁ none).IsPlausibleStep Std.IterStep.done - Std.Iterators.Types.Flatten.IsPlausibleStep.outerYield_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ it₁' : Std.IterM m β} {it₂' : Std.IterM m γ} {b : β} (h : it₁.IsPlausibleStep (Std.IterStep.yield it₁' b)) (h' : MonadAttach.CanReturn (f b) it₂') : (Std.IterM.flatMapAfterM f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfterM f it₁' (some it₂'))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerDone_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ : Std.IterM m γ} (h : it₂.IsPlausibleStep Std.IterStep.done) : (Std.IterM.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfter f it₁ none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerSkip_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ it₁' : Std.IterM m β} (h : it₁.IsPlausibleStep (Std.IterStep.skip it₁')) : (Std.IterM.flatMapAfter f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfter f it₁' none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerYield_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ it₁' : Std.IterM m β} {b : β} (h : it₁.IsPlausibleStep (Std.IterStep.yield it₁' b)) : (Std.IterM.flatMapAfter f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfter f it₁' (some (f b)))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerSkip_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ it₂' : Std.IterM m γ} (h : it₂.IsPlausibleStep (Std.IterStep.skip it₂')) : (Std.IterM.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.IterM.flatMapAfter f it₁ (some it₂'))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerYield_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ it₂' : Std.IterM m γ} {b : γ} (h : it₂.IsPlausibleStep (Std.IterStep.yield it₂' b)) : (Std.IterM.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.yield (Std.IterM.flatMapAfter f it₁ (some it₂')) b) - Std.IterM.toArray_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} : (Std.IterM.flatMap f it₁).toArray = Array.flatten <$> (Std.IterM.mapM (fun b => (f b).toArray) it₁).toArray - Std.IterM.toList_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} : (Std.IterM.flatMap f it₁).toList = List.flatten <$> (Std.IterM.mapM (fun b => (f b).toList) it₁).toList - Std.IterM.toArray_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} : (Std.IterM.flatMapM f it₁).toArray = Array.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toArray) it₁).toArray - Std.IterM.toList_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} : (Std.IterM.flatMapM f it₁).toList = List.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toList) it₁).toList - Std.IterM.toArray_flatMapAfter 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfter f it₁ it₂).toArray = match it₂ with | none => Array.flatten <$> (Std.IterM.mapM (fun b => (f b).toArray) it₁).toArray | some it₂ => do let __do_lift ← it₂.toArray let __do_lift_1 ← Array.flatten <$> (Std.IterM.mapM (fun b => (f b).toArray) it₁).toArray pure (__do_lift ++ __do_lift_1) - Std.IterM.toList_flatMapAfter 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfter f it₁ it₂).toList = match it₂ with | none => List.flatten <$> (Std.IterM.mapM (fun b => (f b).toList) it₁).toList | some it₂ => do let __do_lift ← it₂.toList let __do_lift_1 ← List.flatten <$> (Std.IterM.mapM (fun b => (f b).toList) it₁).toList pure (__do_lift ++ __do_lift_1) - Std.IterM.toArray_flatMapAfterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfterM f it₁ it₂).toArray = match it₂ with | none => Array.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toArray) it₁).toArray | some it₂ => do let __do_lift ← it₂.toArray let __do_lift_1 ← Array.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toArray) it₁).toArray pure (__do_lift ++ __do_lift_1) - Std.IterM.toList_flatMapAfterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α m] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfterM f it₁ it₂).toList = match it₂ with | none => List.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toList) it₁).toList | some it₂ => do let __do_lift ← it₂.toList let __do_lift_1 ← List.flatten <$> (Std.IterM.mapM (fun b => do let __do_lift ← f b __do_lift.toList) it₁).toList pure (__do_lift ++ __do_lift_1) - Std.IterM.step_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} : (Std.IterM.flatMapM f it₁).step = do let __do_lift ← it₁.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₁' b, h⟩ => do let fx ← MonadAttach.attach (f b) pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁' (some ↑fx)) ⋯)) | ⟨Std.IterStep.skip it₁', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁' none) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.IterM.step_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} : (Std.IterM.flatMap f it₁).step = do let __do_lift ← it₁.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₁' b, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁' (some (f b))) ⋯)) | ⟨Std.IterStep.skip it₁', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁' none) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.IterM.step_flatMapAfterM 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfterM f it₁ it₂).step = match it₂ with | none => do let __do_lift ← it₁.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₁' b, h⟩ => do let fx ← MonadAttach.attach (f b) pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁' (some ↑fx)) ⋯)) | ⟨Std.IterStep.skip it₁', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁' none) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) | some it₂ => do let __do_lift ← it₂.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₂' out, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.flatMapAfterM f it₁ (some it₂')) out ⋯)) | ⟨Std.IterStep.skip it₂', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁ (some it₂')) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfterM f it₁ none) ⋯)) - Std.IterM.step_flatMapAfter 📋 Init.Data.Iterators.Lemmas.Combinators.Monadic.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterator α m β] [Std.Iterator α₂ m γ] {f : β → Std.IterM m γ} {it₁ : Std.IterM m β} {it₂ : Option (Std.IterM m γ)} : (Std.IterM.flatMapAfter f it₁ it₂).step = match it₂ with | none => do let __do_lift ← it₁.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₁' b, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁' (some (f b))) ⋯)) | ⟨Std.IterStep.skip it₁', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁' none) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) | some it₂ => do let __do_lift ← it₂.step match __do_lift.inflate with | ⟨Std.IterStep.yield it₂' out, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.IterM.flatMapAfter f it₁ (some it₂')) out ⋯)) | ⟨Std.IterStep.skip it₂', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁ (some it₂')) ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.IterM.flatMapAfter f it₁ none) ⋯)) - Std.Iter.mapWithPostcondition_eq_toIter_mapWithPostcondition_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 γ} : Std.Iter.mapWithPostcondition f it = Std.IterM.mapWithPostcondition f it.toIterM - Std.Iter.mapWithPostcondition.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 γ) (it : Std.Iter β) : Std.Iter.mapWithPostcondition f it = Std.IterM.mapWithPostcondition f it.toIterM - Std.Iter.mapM_eq_toIter_mapM_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 γ} : Std.Iter.mapM f it = Std.IterM.mapM f it.toIterM - Std.Iter.mapM.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {m : Type w → Type w'} [Monad m] [MonadAttach m] (f : β → m γ) (it : Std.Iter β) : Std.Iter.mapM f it = Std.IterM.mapM f it.toIterM - Std.Iter.toArray_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] {f : β → γ} : (Std.Iter.map f it).toArray = Array.map f it.toArray - Std.Iter.toListRev_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] {f : β → γ} : (Std.Iter.map f it).toListRev = List.map f it.toListRev - Std.Iter.toList_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} [Std.Iterators.Finite α Id] {f : β → γ} : (Std.Iter.map f it).toList = List.map f it.toList - Std.Iter.map_eq_toIter_map_toIterM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {f : β → γ} : Std.Iter.map f it = (Std.IterM.map f it.toIterM).toIter - Std.Iter.map.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] (f : β → γ) (it : Std.Iter β) : Std.Iter.map f it = (Std.IterM.map f it.toIterM).toIter - Std.Iter.toArray_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} : (Std.Iter.mapWithPostcondition f it).toArray = Array.mapM (fun x => (f x).run) it.toArray - Std.Iter.toList_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] [LawfulMonad m] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} : (Std.Iter.mapWithPostcondition f it).toList = List.mapM (fun x => (f x).run) it.toList - Std.Iter.toArray_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterators.Finite α Id] {f : β → m γ} : (Std.Iter.mapM f it).toArray = Array.mapM f it.toArray - Std.Iter.toList_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterators.Finite α Id] {f : β → m γ} : (Std.Iter.mapM f it).toList = List.mapM f it.toList - Std.Iter.count_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} [Std.Iterator α Id β] [Std.IteratorLoop α Id Id] [Std.Iterators.Finite α Id] [Std.LawfulIteratorLoop α Id Id] {it : Std.Iter β} {f : β → β'} : (Std.Iter.map f it).count = it.count - Std.Iter.all_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] [Std.LawfulIteratorLoop α Id Id] {it : Std.Iter β} {f : β → β'} {p : β' → Bool} : Std.Iter.all p (Std.Iter.map f it) = Std.Iter.all (fun x => p (f x)) it - Std.Iter.any_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] [Std.LawfulIteratorLoop α Id Id] {it : Std.Iter β} {f : β → β'} {p : β' → Bool} : Std.Iter.any p (Std.Iter.map f it) = Std.Iter.any (fun x => p (f x)) it - Std.Iter.fold_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ δ : Type w} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id Id] [Std.LawfulIteratorLoop α Id Id] {f : β → γ} {g : δ → γ → δ} {init : δ} {it : Std.Iter β} : Std.Iter.fold g init (Std.Iter.map f it) = Std.Iter.fold (fun d b => g d (f b)) init it - Std.Iter.allM_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [Std.IteratorLoop α Id m] [LawfulMonad m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → β'} {p : β' → m Bool} : Std.Iter.allM p (Std.Iter.map f it) = Std.Iter.allM (fun x => p (f x)) it - Std.Iter.anyM_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β β' : Type w} {m : Type → Type w'} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [Std.IteratorLoop α Id m] [LawfulMonad m] [Std.LawfulIteratorLoop α Id m] {it : Std.Iter β} {f : β → β'} {p : β' → m Bool} : Std.Iter.anyM p (Std.Iter.map f it) = Std.Iter.anyM (fun x => p (f x)) it - Std.Iter.fold_mapWithPostcondition 📋 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 γ} {g : δ → γ → δ} {init : δ} {it : Std.Iter β} : Std.IterM.fold g init (Std.Iter.mapWithPostcondition f it) = Std.Iter.foldM (fun d b => do let c ← (f b).run pure (g d c)) init it - Std.Iter.foldM_map 📋 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 : β → γ} {g : δ → γ → n δ} {init : δ} {it : Std.Iter β} : Std.Iter.foldM g init (Std.Iter.map f it) = Std.Iter.foldM (fun d b => g d (f b)) init it - Std.Iter.fold_mapM 📋 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 γ} {g : δ → γ → δ} {init : δ} {it : Std.Iter β} : Std.IterM.fold g init (Std.Iter.mapM f it) = Std.Iter.foldM (fun d b => do let c ← f b pure (g d c)) init it - Std.Iter.foldM_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{m : Type w → Type w'} {α β γ δ : Type w} {n : Type w → Type w''} {o : Type w → Type w'''} [Std.Iterator α Id β] [Std.Iterators.Finite α Id] [Monad m] [Monad n] [Monad o] [LawfulMonad m] [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 γ} {g : δ → γ → o δ} {init : δ} {it : Std.Iter β} : Std.IterM.foldM g init (Std.Iter.mapWithPostcondition f it) = Std.Iter.foldM (fun d b => do let c ← liftM (f b).run g d c) init it - 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.foldM_mapM 📋 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 γ} {g : δ → γ → o δ} {init : δ} {it : Std.Iter β} : Std.IterM.foldM g init (Std.Iter.mapM f it) = Std.Iter.foldM (fun d b => do let c ← liftM (f b) g d c) init it - Std.Iter.forIn_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {n : Type w → Type w''} {β₂ : Type w} [Monad n] [LawfulMonad n] [Std.Iterators.Finite α Id] [Std.IteratorLoop α Id n] [Std.LawfulIteratorLoop α Id n] {it : Std.Iter β} {f : β → β₂} {init : γ} {g : β₂ → γ → n (ForInStep γ)} : forIn (Std.Iter.map f it) init g = forIn it init fun out acc => g (f out) acc - Std.Iter.forIn_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {n : Type w → Type w''} {o : Type w → Type u_1} {β₂ : Type w} [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 β₂} {init : γ} {g : β₂ → γ → o (ForInStep γ)} : forIn (Std.Iter.mapWithPostcondition f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out).run g __do_lift acc - Std.Iter.forIn_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {n : Type w → Type w''} {o : Type w → Type u_1} {β₂ : Type w} [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 β₂} {init : γ} {g : β₂ → γ → o (ForInStep γ)} : forIn (Std.Iter.mapM f it) init g = forIn it init fun out acc => do let __do_lift ← liftM (f out) g __do_lift acc - 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.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.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.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.toArray_mapWithPostcondition_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} {n : Type w → Type w''} {δ : Type w} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} {g : γ → Std.Iterators.PostconditionT n δ} : (Std.IterM.mapWithPostcondition g (Std.Iter.mapWithPostcondition f it)).toArray = (Std.Iter.mapWithPostcondition (fun b => liftM (f b) >>= g) it).toArray - Std.Iter.toList_mapWithPostcondition_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {m : Type w → Type w'} {n : Type w → Type w''} {δ : Type w} [Monad m] [LawfulMonad m] [Monad n] [LawfulMonad n] [MonadLiftT m n] [LawfulMonadLiftT m n] [Std.Iterators.Finite α Id] {f : β → Std.Iterators.PostconditionT m γ} {g : γ → Std.Iterators.PostconditionT n δ} : (Std.IterM.mapWithPostcondition g (Std.Iter.mapWithPostcondition f it)).toList = (Std.Iter.mapWithPostcondition (fun b => liftM (f b) >>= g) it).toList - 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_map 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {f : β → γ} : (Std.Iter.map f it).step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => Std.PlausibleIterStep.yield (Std.Iter.map f it') (f out) ⋯ | ⟨Std.IterStep.skip it', h⟩ => Std.PlausibleIterStep.skip (Std.Iter.map f it') ⋯ | ⟨Std.IterStep.done, h⟩ => Std.PlausibleIterStep.done ⋯ - Std.Iter.step_mapWithPostcondition 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {n : Type w → Type w''} {f : β → Std.Iterators.PostconditionT n γ} [Monad n] [LawfulMonad n] : (Std.Iter.mapWithPostcondition f it).step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => do let out' ← (f out).operation pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.Iter.mapWithPostcondition f it') ↑out' ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.mapWithPostcondition f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.Iter.step_mapM 📋 Init.Data.Iterators.Lemmas.Combinators.FilterMap
{α β γ : Type w} [Std.Iterator α Id β] {it : Std.Iter β} {n : Type w → Type w''} {f : β → n γ} [Monad n] [MonadAttach n] [LawfulMonad n] : (Std.Iter.mapM f it).step = match it.step with | ⟨Std.IterStep.yield it' out, h⟩ => do let out' ← MonadAttach.attach (f out) pure (Std.Shrink.deflate (Std.PlausibleIterStep.yield (Std.Iter.mapM f it') ↑out' ⋯)) | ⟨Std.IterStep.skip it', h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.skip (Std.Iter.mapM f it') ⋯)) | ⟨Std.IterStep.done, h⟩ => pure (Std.Shrink.deflate (Std.PlausibleIterStep.done ⋯)) - Std.Iter.flatMap.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] (f : β → Std.Iter γ) (it : Std.Iter β) : Std.Iter.flatMap f it = Std.Iter.flatMapAfter f it none - Std.Iter.flatMapM.eq_1 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] (f : β → m (Std.IterM m γ)) (it : Std.Iter β) : Std.Iter.flatMapM f it = Std.Iter.flatMapAfterM f it none - Std.Iterators.Types.Flatten.IsPlausibleStep.outerDone_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ : Std.Iter β} (h : it₁.IsPlausibleStep Std.IterStep.done) : (Std.Iter.flatMapAfter f it₁ none).IsPlausibleStep Std.IterStep.done - Std.Iterators.Types.Flatten.IsPlausibleStep.innerDone_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ : Std.Iter β} {it₂ : Std.Iter γ} (h : it₂.IsPlausibleStep Std.IterStep.done) : (Std.Iter.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfter f it₁ none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerSkip_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ it₁' : Std.Iter β} (h : it₁.IsPlausibleStep (Std.IterStep.skip it₁')) : (Std.Iter.flatMapAfter f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfter f it₁' none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.outerYield_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ it₁' : Std.Iter β} {b : β} (h : it₁.IsPlausibleStep (Std.IterStep.yield it₁' b)) : (Std.Iter.flatMapAfter f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfter f it₁' (some (f b)))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerSkip_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ : Std.Iter β} {it₂ it₂' : Std.Iter γ} (h : it₂.IsPlausibleStep (Std.IterStep.skip it₂')) : (Std.Iter.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfter f it₁ (some it₂'))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerYield_flatMap_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] {f : β → Std.Iter γ} {it₁ : Std.Iter β} {it₂ it₂' : Std.Iter γ} {b : γ} (h : it₂.IsPlausibleStep (Std.IterStep.yield it₂' b)) : (Std.Iter.flatMapAfter f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.yield (Std.Iter.flatMapAfter f it₁ (some it₂')) b) - Std.Iter.toArray_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] {f : β → Std.Iter γ} {it₁ : Std.Iter β} : (Std.Iter.flatMap f it₁).toArray = (Std.Iter.map (fun b => (f b).toArray) it₁).toArray.flatten - Std.Iter.toList_flatMap 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] {f : β → Std.Iter γ} {it₁ : Std.Iter β} : (Std.Iter.flatMap f it₁).toList = (Std.Iter.map (fun b => (f b).toList) it₁).toList.flatten - Std.Iterators.Types.Flatten.IsPlausibleStep.outerDone_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} (h : it₁.IsPlausibleStep Std.IterStep.done) : (Std.Iter.flatMapAfterM f it₁ none).IsPlausibleStep Std.IterStep.done - Std.Iterators.Types.Flatten.IsPlausibleStep.outerSkip_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ it₁' : Std.Iter β} (h : it₁.IsPlausibleStep (Std.IterStep.skip it₁')) : (Std.Iter.flatMapAfterM f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfterM f it₁' none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerDone_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} {it₂ : Std.IterM m γ} (h : it₂.IsPlausibleStep Std.IterStep.done) : (Std.Iter.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfterM f it₁ none)) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerSkip_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} {it₂ it₂' : Std.IterM m γ} (h : it₂.IsPlausibleStep (Std.IterStep.skip it₂')) : (Std.Iter.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfterM f it₁ (some it₂'))) - Std.Iterators.Types.Flatten.IsPlausibleStep.innerYield_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} {it₂ it₂' : Std.IterM m γ} {b : γ} (h : it₂.IsPlausibleStep (Std.IterStep.yield it₂' b)) : (Std.Iter.flatMapAfterM f it₁ (some it₂)).IsPlausibleStep (Std.IterStep.yield (Std.Iter.flatMapAfterM f it₁ (some it₂')) b) - Std.Iter.toArray_flatMapAfter 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] {f : β → Std.Iter γ} {it₁ : Std.Iter β} {it₂ : Option (Std.Iter γ)} : (Std.Iter.flatMapAfter f it₁ it₂).toArray = match it₂ with | none => (Std.Iter.map (fun b => (f b).toArray) it₁).toArray.flatten | some it₂ => it₂.toArray ++ (Std.Iter.map (fun b => (f b).toArray) it₁).toArray.flatten - Std.Iter.toList_flatMapAfter 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} [Std.Iterator α Id β] [Std.Iterator α₂ Id γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ Id] {f : β → Std.Iter γ} {it₁ : Std.Iter β} {it₂ : Option (Std.Iter γ)} : (Std.Iter.flatMapAfter f it₁ it₂).toList = match it₂ with | none => (Std.Iter.map (fun b => (f b).toList) it₁).toList.flatten | some it₂ => it₂.toList ++ (Std.Iter.map (fun b => (f b).toList) it₁).toList.flatten - Std.Iterators.Types.Flatten.IsPlausibleStep.outerYield_flatMapM_pure 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α β α₂ γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] {f : β → m (Std.IterM m γ)} {it₁ it₁' : Std.Iter β} {it₂' : Std.IterM m γ} {b : β} (h : it₁.IsPlausibleStep (Std.IterStep.yield it₁' b)) (h' : MonadAttach.CanReturn (f b) it₂') : (Std.Iter.flatMapAfterM f it₁ none).IsPlausibleStep (Std.IterStep.skip (Std.Iter.flatMapAfterM f it₁' (some it₂'))) - Std.Iter.toArray_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} : (Std.Iter.flatMapM f it₁).toArray = Array.flatten <$> (Std.Iter.mapM (fun b => do let __do_lift ← f b __do_lift.toArray) it₁).toArray - Std.Iter.toList_flatMapM 📋 Init.Data.Iterators.Lemmas.Combinators.FlatMap
{α α₂ β γ : Type w} {m : Type w → Type w'} [Monad m] [MonadAttach m] [LawfulMonad m] [WeaklyLawfulMonadAttach m] [Std.Iterator α Id β] [Std.Iterator α₂ m γ] [Std.Iterators.Finite α Id] [Std.Iterators.Finite α₂ m] {f : β → m (Std.IterM m γ)} {it₁ : Std.Iter β} : (Std.Iter.flatMapM f it₁).toList = List.flatten <$> (Std.Iter.mapM (fun b => do let __do_lift ← f b __do_lift.toList) it₁).toList
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 9a4cf1d