Zulip Chat Archive
Stream: mathlib4
Topic: duplicate instances of `PosMulMono` and friends
Jovan Gerbscheid (Mar 20 2025 at 22:40):
I noticed that docs#PosMulMono.toCovariantClass and docs#PosMulMono.to_covariantClass_pos_mul_le are duplicates. One is declared with extends and the other with instance.
Should the extends be replaced with a def? (in #22090, it was changed from an abbrev to an extends by @Floris van Doorn)
Eric Wieser (Mar 20 2025 at 23:10):
Dropping the explicit instance one would be consistent with the goal of #22090
Jovan Gerbscheid (Mar 20 2025 at 23:13):
The goal of #22090 was to stop PosMulMono from unfolding into CovariantClass .. during type class search. This goal is also achieved if we use a def instead of an abbrev
Eric Wieser (Mar 20 2025 at 23:32):
I'm not sure there is any benefit to using a def though, usually we do that as a compromise when the class is too problematic
Eric Wieser (Mar 20 2025 at 23:32):
Here I think @Floris van Doorn forgot to clean up the duplicate when he introduces the extends instance
Jovan Gerbscheid (Mar 20 2025 at 23:33):
I think it's not his fault, because those duplicates were already unnecessary from the start.
Jovan Gerbscheid (Mar 20 2025 at 23:36):
Also I didn't realize it isn't possible to mark a def as a class, so keeping the extends instances is the way.
Eric Wieser (Mar 21 2025 at 00:04):
Jovan Gerbscheid said:
I think it's not his fault, because those duplicates were already unnecessary from the start.
I would guess then that actually that PR was unecessary (but perhaps a good idea anyway), and the performance issue is the instance you identified.
Jovan Gerbscheid (Mar 21 2025 at 00:08):
The performance issue was that CovariantClass α≥0 α (fun x y => y * x) (· ≤ ·) has bad discrimination tree keys, and this problem was definitely resolved by that PR.
Though there is a chance that removing these extra instances will also give a performace improvement.
Jovan Gerbscheid (Mar 21 2025 at 00:09):
(if I remember correctly)
Jovan Gerbscheid (Mar 21 2025 at 01:11):
Oh, one instance is talking about the type α≥0 and the other about α>0, my mistake.
Last updated: May 02 2025 at 03:31 UTC