# Zulip Chat Archive

## Stream: general

### Topic: Quotient types and proof irrelevance

#### suhr (Nov 18 2022 at 17:47):

Do I understand it correctly that quotient types in Lean require proof irrelevance of Prop? Specifically, this seems to follow from this proof in Core.lean:

```
theorem exists_rep {α : Sort u} {r : α → α → Prop} (q : Quot r) : Exists (fun a => (Quot.mk r a) = q) :=
q.inductionOn (fun a => ⟨a, rfl⟩)
```

#### Mario Carneiro (Nov 18 2022 at 19:32):

No, quotient types do not directly rely on proof irrelevance, although it is possible that the statement of `inductionOn`

requires it because the generalized version of that statement only works on subsingletons (otherwise you have to use `Quot.lift`

and prove that the choice you made is coherent with the relation).

#### Mario Carneiro (Nov 18 2022 at 19:33):

The lean 2 HoTT implementation of quotient types did not have proof irrelevance

#### Mario Carneiro (Nov 18 2022 at 19:34):

But at this point proof irrelevance is baked fairly deeply into the way lean 4 works, so it's a difficult counterfactual to consider today. Things that casually assume proof irrelevance are all over the place

#### suhr (Nov 18 2022 at 19:49):

So, `Quot.ind`

might depend on proof irrelevance, but generally you can use `Quot.lift`

instead of `Quot.lift`

? Is it possible to prove `Quot.ind`

from `Quot.lift`

?

But at this point proof irrelevance is baked fairly deeply into the way lean 4 works, so it's a difficult counterfactual to consider today. Things that casually assume proof irrelevance are all over the place

Sure. I just try to explain both quotients and proof irrelevance in a tutorial, so I need to know how things depend on each other.

#### Mario Carneiro (Nov 18 2022 at 19:50):

you might need the dependent version of `Quot.lift`

#### Mario Carneiro (Nov 18 2022 at 19:50):

I think `Quot.recOn`

exists

#### Mario Carneiro (Nov 18 2022 at 19:52):

Quotient types without proof irrelevance behave rather differently to set-quotients, you would use different axioms to introduce them

#### Mario Carneiro (Nov 18 2022 at 19:54):

For the purpose of a tutorial, I would just introduce proof irrelevance first

#### suhr (Nov 18 2022 at 19:58):

And `Quot.recOn`

is implemented using `Quot.ind`

. So I guess it really has proof irrelevance baked in.

Anyway, thanks. I will probably indeed introduce proof irrelevance first.

#### Mario Carneiro (Nov 18 2022 at 20:04):

`Quot.recOn`

could be an axiom and `Quot.ind`

defined in terms of it; the current ordering is preferred because it is simpler

#### Mario Carneiro (Nov 18 2022 at 20:05):

`Quot.ind`

does not *depend* on proof irrelevance (it doesn't make sense to say an axiom depends on another axiom), it is just a weird axiom otherwise

#### Mario Carneiro (Nov 18 2022 at 20:07):

you can't use `Quot.ind`

or indeed any axiom to prove proof irrelevance because it is a definitional equality. The best you can hope for is proving propositional proof irrelevance from `Quot.ind`

#### suhr (Nov 18 2022 at 20:10):

Well, I use “proof irrelevance” somewhat loosely, including the rejection of large elimination for types in Prop.

#### Mario Carneiro (Nov 18 2022 at 20:12):

well quotients are definitely not small eliminators

#### Mario Carneiro (Nov 18 2022 at 20:12):

that's what `Quot.lift`

/ `Quot.recOn`

is about

Last updated: Dec 20 2023 at 11:08 UTC