Documentation

Std.Data.Iterators.Lemmas.Producers.Monadic.Vector

theorem Vector.iterM_eq_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} :
xs.iterM m = xs.iterFromIdxM m 0
theorem Std.Iterators.Vector.isPlausibleStep_iterFromIdxM_of_lt {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} {pos : Nat} (h : pos < n) :
(xs.iterFromIdxM m pos).IsPlausibleStep (IterStep.yield (xs.iterFromIdxM m (pos + 1)) xs[pos])
theorem Std.Iterators.Vector.isPlausibleStep_iterFromIdxM_of_not_lt {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} {pos : Nat} (h : ¬pos < n) :
theorem Std.Iterators.Vector.isPlausibleStep_iterM_of_pos {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} (h : 0 < n) :
theorem Std.Iterators.Vector.isPlausibleStep_iterM_of_not_pos {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} (h : ¬0 < n) :
@[simp]
theorem Vector.iterFromIdxM_toArray {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} {pos : Nat} :
@[simp]
theorem Vector.iterM_toArray {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} :
xs.toArray.iterM m = xs.iterM m
theorem Vector.step_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} {pos : Nat} :
(xs.iterFromIdxM m pos).step = pure (Std.Shrink.deflate (if h : pos < n then Std.PlausibleIterStep.yield (xs.iterFromIdxM m (pos + 1)) xs[pos] else Std.PlausibleIterStep.done ))
theorem Vector.step_iterM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} {xs : Vector β n} :
theorem Vector.iterFromIdxM_equiv_iterM_drop_toList {n : Nat} {α : Type w} {xs : Vector α n} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {pos : Nat} :
(xs.iterFromIdxM m pos).Equiv ((List.drop pos xs.toList).iterM m)
theorem Vector.iterM_equiv_iterM_toList {n : Nat} {α : Type w} {xs : Vector α n} {m : Type w → Type w'} [Monad m] [LawfulMonad m] :
(xs.iterM m).Equiv (xs.toList.iterM m)
@[simp]
theorem Vector.toList_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} {pos : Nat} :
@[simp]
theorem Vector.toList_iterM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} :
@[simp]
theorem Vector.toArray_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} {pos : Nat} :
(xs.iterFromIdxM m pos).toArray = pure (xs.toArray.extract pos n)
@[simp]
theorem Vector.toArray_iterM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} :
@[simp]
theorem Vector.toListRev_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} {pos : Nat} :
@[simp]
theorem Vector.toListRev_iterM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} :
@[simp]
theorem Vector.length_iterFromIdxM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} {pos : Nat} :
(xs.iterFromIdxM m pos).length = pure { down := n - pos }
@[simp]
theorem Vector.length_iterM {m : Type w → Type w'} [Monad m] {β : Type w} {n : Nat} [LawfulMonad m] {xs : Vector β n} :
(xs.iterM m).length = pure { down := n }