Zulip Chat Archive

Stream: general

Topic: SO structure question


Kevin Buzzard (Feb 08 2020 at 20:37):

I always forget about the difference between extending and not extending when defining structures, so I asked a question on stackoverflow because search will then work better for me in the future: https://stackoverflow.com/questions/60130605/extending-or-inferring-pid-ufd-in-a-lean-class-definition

Floris van Doorn (Feb 10 2020 at 02:26):

My guess is that the definition unique_factorization_domain is sub-optimal: it's generally better to extend the structure.
Unique factorization domains were defined in 2018 by @Johannes Hölzl, so my guess is that back then we knew less well what the best way was to set up classes.

There is a small downside in using extends: it will increase the type-class search for unrelated type-class problems, because there is now an instance unique_factorization_domain -> integral_domain.

Chris Hughes (Feb 10 2020 at 02:54):

Why is it better to extend the class?

UFD is a rarely used class, so does that make the downside more significant relative to the upside?

Floris van Doorn (Feb 10 2020 at 17:17):

Why is it better to extend the class?

I think we've noticed almost all type-class instance bottlenecks with modules/algebras/vector spaces where we have classes with other classes as arguments. Of course, those hierarchies are much larger, but I think part of the problem is the instances that are arguments to classes (which, in those cases are necessary).
There is a performance problems with a instance instance [integral_domain \a] [unique_factorization_domain \a] : .... If there are multiple instance paths to integral_domain \a and none to unique_factorization_domain \a then type-class inference will go through all possibilities of the integral_domain \a search.

UFD is a rarely used class, so does that make the downside more significant relative to the upside?

Perhaps that is a good enough reason, as a workaround until we have the type-class inference of Lean 4.


Last updated: Dec 20 2023 at 11:08 UTC