## Stream: new members

### Topic: noob questions about ∃

#### Jason Orendorff (Jun 10 2020 at 14:57):

I have to admit, I'm not totally clear on the subtleties of supporting both constructive and classical logic, but bottom line, classical.some is noncomputable, so I think ∃ in Lean must "mean" the classical, non-constructive ∃.

Is there a stronger form of ∃ that carries a value, so that it supports a computable analogue of classical.some?

#### Kevin Buzzard (Jun 10 2020 at 14:58):

There's the inhabited typeclass

#### Kevin Buzzard (Jun 10 2020 at 14:59):

The point is that ∃ x, P has type Prop and you can't constructively get back to Type land from there.

#### Rob Lewis (Jun 10 2020 at 15:00):

Is there a stronger form of ∃ that carries a value, so that it supports a computable analogue of classical.some?

Σ, but it's not Prop-valued.

#### Jason Orendorff (Jun 10 2020 at 15:00):

right, I am definitely not looking for Sigma. thanks.

#### Jason Orendorff (Jun 10 2020 at 15:01):

However, not understanding the split between Prop and Type may be why I'm confused

#### Rob Lewis (Jun 10 2020 at 15:09):

You can't have a Prop-valued exists with a projection to Type that preserves values. Prop is proof irrelevant, so any two proofs of ∃ x, P are equal, even if they're proved with different witnesses. A function that recovers the witnesses would have different values on equal inputs.

#### Mario Carneiro (Jun 10 2020 at 15:14):

There is also trunc {x // P}, which is in Type but is nevertheless a subsingleton like ∃ x, P

#### Kevin Buzzard (Jun 10 2020 at 15:14):

So the worst of both worlds?

#### Mario Carneiro (Jun 10 2020 at 15:15):

I suppose so, depending on your POV

#### Reid Barton (Jun 10 2020 at 15:33):

trunc {x // P} is the one that corresponds to the existential quantifier as used in the HoTT book, for example.

#### David Wärn (Jun 10 2020 at 18:12):

The upshot of trunc is that you get computable unique choice. So if you e.g. have f : X -> Y with inj : injective f and surj : \Pi y, trunc { x // f x = y } then you get a computable inverse g : Y -> X, from trunc.rec.

Last updated: Dec 20 2023 at 11:08 UTC