English
The first satisfying index is minimal among those where p holds.
Русский
Первый удовлетворяющий индекс минимален среди тех, что удовлетворяют p.
LaTeX
$$$$ \text{If } i \in \mathrm{Fin}\,n \text{ and } i = \text{Some } i', \ p i' \\Rightarrow \\forall j < i', \lnot p j $$$$
Lean4
/-- If `find p` returns `some i`, then `p j` does not hold for `j < i`, i.e., `i` is minimal among
the indices where `p` holds. -/
theorem find_min :
∀ {n : ℕ} {p : Fin n → Prop} [DecidablePred p] {i : Fin n} (_ : i ∈ Fin.find p) {j : Fin n} (_ : j < i), ¬p j
| 0, _, _, _, hi, _, _, _ => Option.noConfusion hi
| n + 1, p, _, i, hi, ⟨j, hjn⟩, hj, hpj => by
rw [find] at hi
rcases h : find fun i : Fin n ↦ p (i.castLT (Nat.lt_succ_of_lt i.2)) with - | k
· simp only [h] at hi
split_ifs at hi with hl
· cases hi
rw [find_eq_none_iff] at h
exact h ⟨j, hj⟩ hpj
· exact Option.not_mem_none _ hi
· rw [h] at hi
dsimp at hi
obtain rfl := Option.some_inj.1 hi
exact find_min h (show (⟨j, lt_trans hj k.2⟩ : Fin n) < k from hj) hpj