Zulip Chat Archive
Stream: lean4
Topic: class is Type not Prop
Kevin Buzzard (May 13 2021 at 23:01):
Am I right in thinking that
class IsAddRightCancel (A : Type u) [Add A] where
add_right_cancel (a b c : A) : a + b = c + b → a = c
variable (A : Type) [Add A]
#check IsAddRightCancel A -- Type
should really be a Prop? I think that Lean 3 made it a Type as well. You can explicitly tell it otherwise and it works:
class IsAddRightCancel' (A : Type u) [Add A] : Prop :=
add_right_cancel (a b c : A) : a + b = c + b → a = c
#check IsAddRightCancel' A -- Prop
Beginners who don't know about this trick in Lean 3 sometimes accidentally make Types instead of Props this way.
Mario Carneiro (May 13 2021 at 23:03):
Should we use mathlib4 issues to build up wishlist features like this that can plausibly be implemented in mathlib instead of lean 4?
Mario Carneiro (May 13 2021 at 23:03):
(in this case, I mean defaulting classes whose members are propositions to Prop
instead of Type*
)
Mario Carneiro (May 13 2021 at 23:05):
From the type theory point of view, you have to specify the target type and for a class like this it will work for Prop
or any Type v
Mario Carneiro (May 13 2021 at 23:07):
It has to do with the fact that it's an inductive type, it's underdetermined in the same way as the type nat
is not determined in this recursive definition:
meta def foo : nat := foo
Mac (May 13 2021 at 23:13):
Why should it be a Prop
rather than a Type
? What benefits does that provide?
Mac (May 13 2021 at 23:17):
Given that it defaults to and instance of Type
and most utility classes in Lean deal with instances of Type
, It would seem most logical to keep it that way unless there is a compelling reason it should be a Prop
.
Kevin Buzzard (May 13 2021 at 23:23):
My instinct is that type-valued typeclasses are far more prone to causing diamond issues but I don't know if that would be the case here
Mario Carneiro (May 13 2021 at 23:33):
Unless it makes the projections noncomputable, it is generally better to have a Prop
than a Type
when there is only one inhabitant because you get proof irrelevance, meaning that diamond issues go away entirely
Last updated: Dec 20 2023 at 11:08 UTC