Module docstring
{"### Recursion on the natural numbers and Set.range
"}
{"### Recursion on the natural numbers and Set.range
"}
Nat.zero_union_range_succ
theorem
: {0} ∪ range succ = univ
theorem zero_union_range_succ : {0}{0} ∪ range succ = univ := by
ext n
cases n <;> simp
Nat.range_succ
theorem
: range succ = {i | 0 < i}
@[simp]
protected theorem range_succ : range succ = { i | 0 < i } := by
ext (_ | i) <;> simp [succ_pos, succ_ne_zero, Set.mem_setOf]
Nat.range_of_succ
theorem
(f : ℕ → α) : {f 0} ∪ range (f ∘ succ) = range f
theorem range_of_succ (f : ℕ → α) : {f 0}{f 0} ∪ range (f ∘ succ) = range f := by
rw [← image_singleton, range_comp, ← image_union, zero_union_range_succ, image_univ]
Nat.range_rec
theorem
{α : Type*} (x : α) (f : ℕ → α → α) :
(Set.range fun n => Nat.rec x f n : Set α) = { x } ∪ Set.range fun n => Nat.rec (f 0 x) (f ∘ succ) n
theorem range_rec {α : Type*} (x : α) (f : ℕ → α → α) :
(Set.range fun n => Nat.rec x f n : Set α) =
{x}{x} ∪ Set.range fun n => Nat.rec (f 0 x) (f ∘ succ) n := by
convert (range_of_succ (fun n => Nat.rec x f n : ℕ → α)).symm using 4
dsimp
rename_i n
induction n with
| zero => rfl
| succ n ihn => dsimp at ihn ⊢; rw [ihn]
Nat.range_casesOn
theorem
{α : Type*} (x : α) (f : ℕ → α) : (Set.range fun n => Nat.casesOn n x f : Set α) = { x } ∪ Set.range f
theorem range_casesOn {α : Type*} (x : α) (f : ℕ → α) :
(Set.range fun n => Nat.casesOn n x f : Set α) = {x}{x} ∪ Set.range f :=
(range_of_succ _).symm