ω-sequences a.k.a. infinite sequences #
Most code below is adapted from Mathlib.Data.Stream.Init.
@[implicit_reducible]
Equations
- Cslib.ωSequence.instInhabited = { default := Cslib.ωSequence.const default }
@[simp]
Alias for ωSequence.eta to match List API.
theorem
Cslib.ωSequence.ext_iff
{α : Type u}
{s₁ s₂ : ωSequence α}
:
s₁ = s₂ ↔ ∀ (n : ℕ), s₁ n = s₂ n
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Cslib.ωSequence.get_succ_cons
{α : Type u}
(n : ℕ)
(s : ωSequence α)
(x : α)
:
(cons x s) n.succ = s n
@[simp]
theorem
Cslib.ωSequence.get_cons_append_zero
{α : Type u}
{a : α}
{x : List α}
{s : ωSequence α}
:
(a :: x ++ω s) 0 = a
@[simp]
@[simp]
theorem
Cslib.ωSequence.cons_injective_left
{α : Type u}
(s : ωSequence α)
:
Function.Injective fun (x : α) => cons x s
@[simp]
theorem
Cslib.ωSequence.get_map
{α : Type u}
{β : Type v}
(f : α → β)
(n : ℕ)
(s : ωSequence α)
:
(map f s) n = f (s n)
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Cslib.ωSequence.get_iterate
{α : Type u}
(f : α → α)
(a : α)
(n : ℕ)
:
(iterate f a) n = f^[n] a
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Cslib.ωSequence.get_append_left
{α : Type u}
(n : ℕ)
(x : List α)
(a : ωSequence α)
(h : n < x.length)
:
(x ++ω a) n = x[n]
@[simp]
theorem
Cslib.ωSequence.get_append_right
{α : Type u}
(n : ℕ)
(x : List α)
(a : ωSequence α)
:
(x ++ω a) (x.length + n) = a n
theorem
Cslib.ωSequence.get_append_right'
{α : Type u}
{xl : List α}
{xs : ωSequence α}
{k : ℕ}
(h : xl.length ≤ k)
:
(xl ++ω xs) k = xs (k - xl.length)
@[simp]
theorem
Cslib.ωSequence.get_append_length
{α : Type u}
(x : List α)
(a : ωSequence α)
:
(x ++ω a) x.length = a 0
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Cslib.ωSequence.getElem?_take
{α : Type u}
{s : ωSequence α}
{k n : ℕ}
:
k < n → (take n s)[k]? = some (s k)
theorem
Cslib.ωSequence.getElem?_take_succ
{α : Type u}
(n : ℕ)
(s : ωSequence α)
:
(take n.succ s)[n]? = some (s n)
@[simp]
@[simp]
@[simp]
theorem
Cslib.ωSequence.take_get
{α : Type u}
(m n : ℕ)
(a : ωSequence α)
(h : m < (take n a).length)
:
(take n a)[m] = a m
theorem
Cslib.ωSequence.take_append_of_le_length
{α : Type u}
(n : ℕ)
(x : List α)
(a : ωSequence α)
(h : n ≤ x.length)
:
theorem
Cslib.ωSequence.take_prefix_take_left
{α : Type u}
(m n : ℕ)
(a : ωSequence α)
(h : m ≤ n)
:
@[simp]
theorem
Cslib.ωSequence.extract_eq_ofFn
{α : Type u}
{xs : ωSequence α}
{m n : ℕ}
:
xs.extract m n = List.ofFn fun (k : Fin (n - m)) => xs (m + ↑k)
theorem
Cslib.ωSequence.extract_eq_extract
{α : Type u}
{xs xs' : ωSequence α}
{m n m' n' : ℕ}
(h : xs.extract m n = xs'.extract m' n')
:
n - m = n' - m' ∧ ∀ k < n - m, xs (m + k) = xs' (m' + k)
@[simp]
@[simp]
theorem
Cslib.ωSequence.length_extract
{α : Type u}
{xs : ωSequence α}
{m n : ℕ}
:
(xs.extract m n).length = n - m
@[simp]
@[simp]
theorem
Cslib.ωSequence.extract_eq_nil_iff
{α : Type u}
{xs : ωSequence α}
{m n : ℕ}
:
xs.extract m n = [] ↔ m ≥ n
@[simp]
theorem
Cslib.ωSequence.get_extract
{α : Type u}
{xs : ωSequence α}
{m n k : ℕ}
(h : k < n - m)
:
(xs.extract m n)[k] = xs (m + k)
theorem
Cslib.ωSequence.extract_succ_right
{α : Type u}
{xs : ωSequence α}
{m n : ℕ}
(h_mn : m ≤ n)
:
@[simp]
theorem
Cslib.ωSequence.extract_lu_extract_lu
{α : Type u}
{xs : ωSequence α}
{m n i j : ℕ}
(h : j ≤ n - m)
:
theorem
Cslib.ωSequence.extract_0u_extract_lu
{α : Type u}
{xs : ωSequence α}
{n i j : ℕ}
(h : j ≤ n)
:
@[simp]
@[simp]