Drop up to n values from the stream s.
Equations
- Std.Stream.drop s 0 = s
- Std.Stream.drop s n.succ = match Std.Stream.next? s with | none => s | some (fst, s) => Std.Stream.drop s n
Instances For
Read up to n values from the stream s as a list from first to last.
Equations
- Std.Stream.take s 0 = ([], s)
- Std.Stream.take s n.succ = match Std.Stream.next? s with | none => ([], s) | some (a, s) => match Std.Stream.take s n with | (as, s) => (a :: as, s)
Instances For
@[simp]
theorem
Std.Stream.fst_take_zero
{σ : Type u_1}
{α : Type u_2}
[Stream σ α]
(s : σ)
:
(take s 0).fst = []
@[simp]
Tail recursive version of Stream.take.
Equations
- Std.Stream.takeTR s n = Std.Stream.takeTR.loop s [] n
Instances For
def
Std.Stream.takeTR.loop
{σ : Type u_1}
{α : Type u_2}
[Stream σ α]
(s : σ)
(acc : List α)
:
Nat → List α × σ
Inner loop for Stream.takeTR.
Equations
- Std.Stream.takeTR.loop s acc 0 = (acc.reverse, s)
- Std.Stream.takeTR.loop s acc n.succ = match Std.Stream.next? s with | none => (acc.reverse, s) | some (a, s) => Std.Stream.takeTR.loop s (a :: acc) n
Instances For
theorem
Std.Stream.fst_takeTR_loop
{σ : Type u_1}
{α : Type u_2}
[Stream σ α]
(s : σ)
(acc : List α)
(n : Nat)
:
(takeTR.loop s acc n).fst = acc.reverseAux (take s n).fst
theorem
Std.Stream.snd_takeTR_loop
{σ : Type u_1}
{α : Type u_2}
[Stream σ α]
(s : σ)
(acc : List α)
(n : Nat)
:
(takeTR.loop s acc n).snd = drop s n
@[simp]
theorem
Std.List.stream_drop_eq_drop
{α : Type u_1}
{n : Nat}
(l : List α)
:
Stream.drop l n = List.drop n l
@[simp]
theorem
Std.List.stream_take_eq_take_drop
{α : Type u_1}
{n : Nat}
(l : List α)
:
Stream.take l n = (List.take n l, List.drop n l)