ForIn.toList of the effect-free containers #
Each bridge lemma computes ForIn.toList for one container, in the spelling that carries the
membership lemmas the verification conditions need, and each instance records that the container's
loop is effect-free.
@[simp]
instance
Std.Internal.instPureForIn'List
{m : Type u → Type v}
[Monad m]
{α : Type u₁}
:
PureForIn' m (List α) α
@[simp]
instance
Std.Internal.instPureForIn'Array
{m : Type u → Type v}
[Monad m]
{α : Type u₁}
:
PureForIn' m (Array α) α
@[simp]
@[simp]
theorem
Std.Internal.ForIn.toList_iter
{α γ : Type w}
[Iterator α Id γ]
[Iterators.Finite α Id]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
(it : Iter γ)
:
ForIn.toList on an iterator is the iterator's own toList, so every container whose ForIn
loop iterates its Std.ToIterator reaches the iterator lemmas through this one step.
instance
Std.Internal.instPureForInIterOfLawfulMonadOfFiniteOfLawfulIteratorLoopId
{α γ : Type w}
{m : Type w → Type v}
[Monad m]
[LawfulMonad m]
[Iterator α Id γ]
[Iterators.Finite α Id]
[IteratorLoop α Id m]
[LawfulIteratorLoop α Id m]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
:
@[simp]
theorem
Std.Internal.ForIn.toList_iterM_id
{α γ : Type w}
[Iterator α Id γ]
[Iterators.Finite α Id]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
(it : IterM Id γ)
:
ForIn.toList on a pure monadic iterator is the iterator's own toList.
instance
Std.Internal.instPureForInIterMIdOfLawfulMonadOfFiniteOfLawfulIteratorLoop
{α γ : Type w}
{m : Type w → Type v}
[Monad m]
[LawfulMonad m]
[Iterator α Id γ]
[Iterators.Finite α Id]
[IteratorLoop α Id m]
[LawfulIteratorLoop α Id m]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
:
theorem
Std.Internal.ForIn.toList_rcc
{α : Type u}
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
(r : Rcc α)
:
instance
Std.Internal.instLawfulMemForInIdRcc
{α : Type u}
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
:
LawfulMemForInId (Rcc α) α
instance
Std.Internal.instPureForIn'RccOfLawfulMonad
{α : Type u}
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Rcc α) α
instance
Std.Internal.instPureForInRccOfLawfulMonad
{α : Type u}
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_rco
{α : Type u}
[LE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
(r : Rco α)
:
instance
Std.Internal.instLawfulMemForInIdRco
{α : Type u}
[LE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
:
LawfulMemForInId (Rco α) α
instance
Std.Internal.instPureForIn'RcoOfLawfulMonad
{α : Type u}
[LE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Rco α) α
instance
Std.Internal.instPureForInRcoOfLawfulMonad
{α : Type u}
[LE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_rci
{α : Type u}
[LE α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
(r : Rci α)
:
instance
Std.Internal.instLawfulMemForInIdRci
{α : Type u}
[LE α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
:
LawfulMemForInId (Rci α) α
instance
Std.Internal.instPureForIn'RciOfLawfulMonad
{α : Type u}
[LE α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Rci α) α
instance
Std.Internal.instPureForInRciOfLawfulMonad
{α : Type u}
[LE α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_roc
{α : Type u}
[LE α]
[DecidableLE α]
[LT α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
(r : Roc α)
:
instance
Std.Internal.instLawfulMemForInIdRoc
{α : Type u}
[LE α]
[DecidableLE α]
[LT α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
:
LawfulMemForInId (Roc α) α
instance
Std.Internal.instPureForIn'RocOfLawfulMonad
{α : Type u}
[LE α]
[DecidableLE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Roc α) α
instance
Std.Internal.instPureForInRocOfLawfulMonad
{α : Type u}
[LE α]
[DecidableLE α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLE α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_roo
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
(r : Roo α)
:
instance
Std.Internal.instLawfulMemForInIdRoo
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
:
LawfulMemForInId (Roo α) α
instance
Std.Internal.instPureForIn'RooOfLawfulMonad
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Roo α) α
instance
Std.Internal.instPureForInRooOfLawfulMonad
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_roi
{α : Type u}
[LT α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
(r : Roi α)
:
instance
Std.Internal.instLawfulMemForInIdRoi
{α : Type u}
[LT α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
:
LawfulMemForInId (Roi α) α
instance
Std.Internal.instPureForIn'RoiOfLawfulMonad
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Roi α) α
instance
Std.Internal.instPureForInRoiOfLawfulMonad
{α : Type u}
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_ric
{α : Type u}
[PRange.Least? α]
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLE α]
(r : Ric α)
:
instance
Std.Internal.instLawfulMemForInIdRic
{α : Type u}
[PRange.Least? α]
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLE α]
:
LawfulMemForInId (Ric α) α
instance
Std.Internal.instPureForIn'RicOfLawfulMonad
{α : Type u}
[PRange.Least? α]
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Ric α) α
instance
Std.Internal.instPureForInRicOfLawfulMonad
{α : Type u}
[PRange.Least? α]
[LE α]
[DecidableLE α]
[PRange.UpwardEnumerable α]
[Rxc.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLE α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_rio
{α : Type u}
[PRange.Least? α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
(r : Rio α)
:
instance
Std.Internal.instLawfulMemForInIdRio
{α : Type u}
[PRange.Least? α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
:
LawfulMemForInId (Rio α) α
instance
Std.Internal.instPureForIn'RioOfLawfulMonad
{α : Type u}
[PRange.Least? α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Rio α) α
instance
Std.Internal.instPureForInRioOfLawfulMonad
{α : Type u}
[PRange.Least? α]
[LT α]
[DecidableLT α]
[PRange.UpwardEnumerable α]
[Rxo.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
theorem
Std.Internal.ForIn.toList_rii
{α : Type u}
[PRange.Least? α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
(r : Rii α)
:
instance
Std.Internal.instLawfulMemForInIdRii
{α : Type u}
[PRange.Least? α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
:
LawfulMemForInId (Rii α) α
instance
Std.Internal.instPureForIn'RiiOfLawfulMonad
{α : Type u}
[LT α]
[PRange.Least? α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
PureForIn' m (Rii α) α
instance
Std.Internal.instPureForInRiiOfLawfulMonad
{α : Type u}
[LT α]
[PRange.Least? α]
[PRange.UpwardEnumerable α]
[Rxi.IsAlwaysFinite α]
[PRange.LawfulUpwardEnumerable α]
[PRange.LawfulUpwardEnumerableLeast? α]
[PRange.LawfulUpwardEnumerableLT α]
{m : Type u → Type v}
[Monad m]
[LawfulMonad m]
:
@[simp]
theorem
Std.Internal.ForIn.toList_slice
{γ : Type u}
{α γ' : Type w}
[ToIterator (Slice γ) Id α γ']
[Iterator α Id γ']
[Iterators.Finite α Id]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
(s : Slice γ)
:
ForIn.toList on a slice is the slice's own toList.
instance
Std.Internal.instPureForInSliceOfLawfulMonadOfFiniteOfLawfulIteratorLoopId
{γ : Type u}
{α γ' : Type w}
{m : Type w → Type v}
[Monad m]
[LawfulMonad m]
[ToIterator (Slice γ) Id α γ']
[Iterator α Id γ']
[Iterators.Finite α Id]
[IteratorLoop α Id m]
[LawfulIteratorLoop α Id m]
[IteratorLoop α Id Id]
[LawfulIteratorLoop α Id Id]
: