data.pnat.find

# Explicit least witnesses to existentials on positive natural numbers #

Implemented via calling out to nat.find.

@[protected, instance]
def pnat.decidable_pred_exists_nat {p : ℕ+ → Prop}  :
decidable_pred (λ (n' : ), ∃ (n : ℕ+) (hn : n' = n), p n)
Equations
@[protected]
def pnat.find_x {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) :
{n // p n ∀ (m : ℕ+), m < n¬p m}

The pnat version of nat.find_x

Equations
@[protected]
def pnat.find {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) :

If p is a (decidable) predicate on ℕ+ and hp : ∃ (n : ℕ+), p n is a proof that there exists some positive natural number satisfying p, then pnat.find hp is the smallest positive natural number satisfying p. Note that pnat.find is protected, meaning that you can't just write find, even if the pnat namespace is open.

The API for pnat.find is:

• pnat.find_spec is the proof that pnat.find hp satisfies p.
• pnat.find_min is the proof that if m < pnat.find hp then m does not satisfy p.
• pnat.find_min' is the proof that if m does satisfy p then pnat.find hp ≤ m.
Equations
@[protected]
theorem pnat.find_spec {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) :
p (pnat.find h)
@[protected]
theorem pnat.find_min {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) {m : ℕ+} :
m < ¬p m
@[protected]
theorem pnat.find_min' {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) {m : ℕ+} (hm : p m) :
m
theorem pnat.find_eq_iff {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) {m : ℕ+} :
= m p m ∀ (n : ℕ+), n < m¬p n
@[simp]
theorem pnat.find_lt_iff {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) (n : ℕ+) :
< n ∃ (m : ℕ+) (H : m < n), p m
@[simp]
theorem pnat.find_le_iff {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) (n : ℕ+) :
n ∃ (m : ℕ+) (H : m n), p m
@[simp]
theorem pnat.le_find_iff {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) (n : ℕ+) :
n ∀ (m : ℕ+), m < n¬p m
@[simp]
theorem pnat.lt_find_iff {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) (n : ℕ+) :
n < ∀ (m : ℕ+), m n¬p m
@[simp]
theorem pnat.find_eq_one {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) :
= 1 p 1
@[simp]
theorem pnat.one_le_find {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) :
1 < ¬p 1
theorem pnat.find_mono {p q : ℕ+ → Prop} (h : ∀ (n : ℕ+), q np n) {hp : ∃ (n : ℕ+), p n} {hq : ∃ (n : ℕ+), q n} :
theorem pnat.find_le {p : ℕ+ → Prop} {n : ℕ+} {h : ∃ (n : ℕ+), p n} (hn : p n) :
n
theorem pnat.find_comp_succ {p : ℕ+ → Prop} (h : ∃ (n : ℕ+), p n) (h₂ : ∃ (n : ℕ+), p (n + 1)) (h1 : ¬p 1) :
= + 1