Zulip Chat Archive
Stream: new members
Topic: nonempty and set.nonempty
Heather Macbeth (Dec 14 2020 at 21:11):
Am I supposed to be able to get set.nonempty
from a set whose subtype is nonempty, without using classical
(for classical.inhabited_of_nonempty
or similar)? Please tell me how, if so!
import data.set.basic
example {α : Type*} {s : set α} (hs : s.nonempty) : nonempty s := set.nonempty.to_subtype hs
example {α : Type*} (s : set α) [inhabited s] : s.nonempty := ⟨(default s).1, (default s).2⟩
-- is this true?
example {α : Type*} (s : set α) [nonempty s] : s.nonempty := sorry
Adam Topaz (Dec 14 2020 at 21:14):
Here's a bad and non-golfed proof:
import data.set.basic
example {α : Type*} {s : set α} (hs : s.nonempty) : nonempty s := set.nonempty.to_subtype hs
example {α : Type*} (s : set α) [inhabited s] : s.nonempty := ⟨(default s).1, (default s).2⟩
-- is this true?
example {α : Type*} (s : set α) (I : nonempty s) : s.nonempty :=
begin
tactic.unfreeze_local_instances,
induction I,
use I,
exact I.2
end
Adam Topaz (Dec 14 2020 at 21:15):
So at least it's true :)
Yakov Pechersky (Dec 14 2020 at 21:17):
example {α : Type*} (s : set α) [nonempty s] : s.nonempty :=
begin
rw set.nonempty_def,
rw ←nonempty_subtype,
assumption
end
Adam Topaz (Dec 14 2020 at 21:17):
Much better!
Yakov Pechersky (Dec 14 2020 at 21:17):
Found by two suggest
s
Yakov Pechersky (Dec 14 2020 at 21:19):
Golfed:
example {α : Type*} (s : set α) [nonempty s] : s.nonempty :=
set.nonempty_def.mpr (nonempty_subtype.mp ‹_›)
Heather Macbeth (Dec 14 2020 at 21:20):
Can you PR it? :). At least I assume it should be PR'd, it's so fundamental that perhaps it's been omitted for some good reason?
Heather Macbeth (Dec 14 2020 at 21:25):
Also, this seems to work:
example {α : Type*} (s : set α) [nonempty s] : s.nonempty := nonempty_subtype.mp ‹_›
Heather Macbeth (Dec 14 2020 at 21:28):
So maybe no need for a PR :)
Yakov Pechersky (Dec 14 2020 at 21:29):
#5373 too late =)
Last updated: Dec 20 2023 at 11:08 UTC