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