Module docstring
{}
{}
Std.Range
structure
Std.instMembershipNatRange
instance
: Membership Nat Range
instance : Membership Nat Range where
mem r i := r.start ≤ i ∧ i < r.stop ∧ (i - r.start) % r.step = 0
Std.Range.size
definition
(r : Range) : Nat
Std.Range.forIn'
definition
[Monad m] (range : Range) (init : β) (f : (i : Nat) → i ∈ range → β → m (ForInStep β)) : m β
@[inline] protected def forIn' [Monad m] (range : Range) (init : β)
(f : (i : Nat) → i ∈ range → β → m (ForInStep β)) : m β :=
let rec @[specialize] loop (b : β) (i : Nat)
(hs : (i - range.start) % range.step = 0) (hl : range.start ≤ i := by omega) : m β := do
if h : i < range.stop then
match (← f i ⟨hl, by omega, hs⟩ b) with
| .done b => pure b
| .yield b =>
have := range.step_pos
loop b (i + range.step) (by rwa [Nat.add_comm, Nat.add_sub_assoc hl, Nat.add_mod_left])
else
pure b
have := range.step_pos
loop init range.start (by simp)
Std.Range.instForIn'NatInferInstanceMembership
instance
: ForIn' m Range Nat inferInstance
instance : ForIn' m Range Nat inferInstance where
forIn' := Range.forIn'
Std.Range.forM
definition
[Monad m] (range : Range) (f : Nat → m PUnit) : m PUnit
Std.Range.instForMNat
instance
: ForM m Range Nat
instance : ForM m Range Nat where
forM := Range.forM
Std.Range.term[:_]
definition
: Lean.ParserDescr✝
Std.Range.term[_:_]
definition
: Lean.ParserDescr✝
Std.Range.term[:_:_]
definition
: Lean.ParserDescr✝
Std.Range.term[_:_:_]
definition
: Lean.ParserDescr✝
Membership.mem.upper
theorem
{i : Nat} {r : Std.Range} (h : i ∈ r) : i < r.stop
Membership.mem.lower
theorem
{i : Nat} {r : Std.Range} (h : i ∈ r) : r.start ≤ i
Membership.mem.step
theorem
{i : Nat} {r : Std.Range} (h : i ∈ r) : (i - r.start) % r.step = 0
Membership.get_elem_helper
theorem
{i n : Nat} {r : Std.Range} (h₁ : i ∈ r) (h₂ : r.stop = n) : i < n