Zulip Chat Archive
Stream: new members
Topic: Proof by infinite descent
Stuart Presnell (Dec 11 2021 at 11:51):
Do we already have this (or a suitable generalisation of it) somewhere? I can't find it under the name "infinite descent" anywhere, but maybe it's called something else?
example {S : set ℕ} {P : ℕ → Prop} (h : ∀ x ∈ S, (¬ P x → ∃ y ∈ S, y < x ∧ ¬ P y)) : ∀ x ∈ S, P x
Patrick Johnson (Dec 11 2021 at 13:23):
I don't think there is such theorem. But the proof is pretty straightforward:
example
{S : set ℕ}
{P : ℕ → Prop}
(h : ∀ x ∈ S, (¬ P x → ∃ y ∈ S, y < x ∧ ¬ P y)) :
∀ x ∈ S, P x :=
begin
intro x,
induction x using nat.strong_induction_on with x h₁,
intro h₂, by_contra h₃,
obtain ⟨y, ⟨h₄, ⟨h₅, h₆⟩⟩⟩ := h _ h₂ h₃,
exact h₆ (h₁ _ h₅ h₄),
end
Stuart Presnell (Dec 11 2021 at 15:21):
It seems like this would be a useful lemma to have since this proof method comes up fairly often in informal mathematics. Is it worth PRing it?
Eric Wieser (Dec 11 2021 at 15:49):
An even shorter proof:
import tactic
example
{S : set ℕ}
{P : ℕ → Prop}
(h : ∀ x ∈ S, (¬ P x → ∃ y ∈ S, y < x ∧ ¬ P y)) :
∀ x ∈ S, P x :=
begin
simp_rw [@not_imp_comm (P _), not_exists, not_and_not_right, @imp.swap (_ ∈ S)] at h,
exact λ x, nat.strong_induction_on x h,
end
Eric Wieser (Dec 11 2021 at 15:50):
Which demonstrates that there are many equivalent ways that you could have stated h
there (try putting the cursor before each comma in simp_rw
):
∀ x ∈ S, (¬ P x → ∃ y ∈ S, y < x ∧ ¬ P y)
(yours)∀ x ∈ S, (∀ y ∈ S, y < x → P y) → P x
(a variant with no¬
s)∀ x, (∀ y, y < x → y ∈ S → P y) → x ∈ S → P x
(the version with the∈ S
moved to the end, which makes the statement just strong induction withp x = (x ∈ S → P x)
)
Eric Wieser (Dec 11 2021 at 15:50):
So unless there's anything particularly special about the way you have it stated, I doubt it's worth giving that version a name
Last updated: Dec 20 2023 at 11:08 UTC