Zulip Chat Archive

Stream: general

Topic: linter for `fact`


Scott Morrison (Jul 25 2020 at 05:00):

I don't think this is an issue yet, but I noticed @Sebastien Gouezel introduced instance : fact ((0 : ℝ) < 1) := zero_lt_one in https://github.com/leanprover-community/mathlib/pull/3528/files#diff-7133d335dc07594a328658c93fc0e380R373

I suspect that other people will want that fact, perhaps outside the manifolds directories.

Perhaps at some point we should add a linter that checks for duplicated instances?

Mario Carneiro (Jul 25 2020 at 06:35):

I don't think there should be any global instances for fact

Jalex Stark (Jul 25 2020 at 06:40):

how does this instance get used right now? is it for getting to nonempty Icc (0:\R) 1?

Mario Carneiro (Jul 25 2020 at 06:49):

If so, I think that should be an instance of its own

Sebastien Gouezel (Jul 25 2020 at 07:14):

No, it is to get a manifold with boundary structure on Icc 0 1, which requires the fact. And this manifold with boundary structure will be used all over the place when we mention smooth homotopies.

Jalex Stark (Jul 25 2020 at 07:16):

shouldn't we need this fact only in the definition of the manifold with boundary structure?

Johan Commelin (Jul 25 2020 at 07:19):

Mario Carneiro said:

I don't think there should be any global instances for fact

I wouldn't mind having fact (nat.prime 2) as a global instance.

Mario Carneiro (Jul 25 2020 at 08:32):

It's not about what would be nice to have, it's about making fact performant. fact is the least efficient of all typeclasses, because it is an unstructured bag of theorems that must be linearly enumerated for any fact typeclass instance. I would prefer that the behavior of fact inference is under control of the user, meaning only local instances and hypotheses are allowed

Mario Carneiro (Jul 25 2020 at 08:33):

If you want a manifold with boundary structure on Icc 0 1, make that an instance

Sebastien Gouezel (Jul 25 2020 at 13:42):

Like in #3549?

Mario Carneiro (Jul 25 2020 at 16:47):

By the way, don't forget that you can use localized for instances too. It seems quite reasonable that things like fact (prime 2) can be put in a locale for a bunch of related files

Reid Barton (Jul 25 2020 at 16:51):

Mario Carneiro said:

I don't think there should be any global instances for fact

in this case, how about a linter that checks for instances of fact?

Mario Carneiro (Jul 25 2020 at 16:57):

sure, that sounds easy enough


Last updated: Dec 20 2023 at 11:08 UTC