# 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