Zulip Chat Archive
Stream: new members
Topic: Exists
Thomas Brooks (Jul 04 2020 at 22:29):
Hi, I'm working through the documentation and exercises and I'm stuck on 4.4 (existential quantifier). I thought I could use exists.elim to go from \exists (x: \alpha), p x
to x
but I get a type error since x
is not a Prop. I seem to need this to prove the reverse direction of the exercise example : (∃ x, p x ∧ r) ↔ (∃ x, p x) ∧ r
. Any guidance? My full attempt is:
example : (∃ x, p x ∧ r) ↔ (∃ x, p x) ∧ r :=
iff.intro
(assume (h: ∃ x, p x ∧ r),
exists.elim h
(assume (hx: α) (hpxr: p hx ∧ r),
(and.intro
(exists.intro
hx
hpxr.left)
hpxr.right)))
(assume (h: (∃ x, p x) ∧ r),
exists.intro
(exists.elim h.left
(assume (hx: α) (hpx: p hx),
hx)) -- Problem here!! has type Π (hx : α), p hx → α : Type
(exists.elim h.left
(assume (hx: α) (hpx: p hx),
show p hx ∧ r, from and.intro hpx h.right)))
Reid Barton (Jul 04 2020 at 22:30):
You should use exists.elim
while your goal is still a Prop.
Kevin Buzzard (Jul 04 2020 at 22:31):
This is much easier in tactic mode
Thomas Brooks (Jul 04 2020 at 22:33):
I haven't gotten to tactics yet!
Thomas Brooks (Jul 04 2020 at 22:34):
@Reid Barton I'm not sure what you mean. Is exists.elim
not appropriate here? Is there an alternative?
Thomas Brooks (Jul 04 2020 at 22:36):
And on this topic, how can I view everything in a namespace? Like to look at all everything that is exists.something to see if something fits my needs.
Thomas Brooks (Jul 04 2020 at 22:36):
Oh wait, I think I understand now. I should use exist.elim outside of the exists.intro....
Thomas Brooks (Jul 04 2020 at 22:45):
That fixed it, thanks for the help. So is there no way to get (\exists x: \alpha, p x) -> \alpha
? I would have assumed that could be done
Kyle Miller (Jul 04 2020 at 23:02):
@Thomas Brooks It's sort of a coherence issue. You need to choose an term of \alpha
in a consistent way so that substitution/rewriting works. One thing to think about is that, since every pair of proofs of a Prop
are equal, you can't just take a proof ⟨x, h⟩
of existence and map it to x
. What would you do for ⟨x', h'⟩
? You'd need to ensure that whatever you did wouldn't give you the absurd conclusion that x = x'
.
The library has classical.some
to "give" you such a term (noncomputably). It uses Lean's version of the axiom of choice.
Thomas Brooks (Jul 04 2020 at 23:21):
@Kyle Miller That makes sense, thanks for the explanation!
Kevin Buzzard (Jul 04 2020 at 23:45):
#print prefix exists
Jason Orendorff (Jul 04 2020 at 23:45):
#print prefix
is so darn useful, it should be mentioned earlier in the book
Last updated: Dec 20 2023 at 11:08 UTC