## Stream: general

### Topic: Decidable nat.prime

#### Patrick Johnson (Jan 26 2022 at 19:33):

I implemented a decidable instance for nat.prime. Do we already have such instance that I'm not aware of? If not, should I open a PR?

#### Patrick Johnson (Jan 26 2022 at 19:38):

By decidable, I mean solvable using dec_trivial, like this:

example : nat.prime 7 ∧ ¬nat.prime 8 := dec_trivial


#### Johan Commelin (Jan 26 2022 at 19:41):

I'm pretty sure it's there already. There's also a norm_num extension for proving primality

#### Eric Rodriguez (Jan 26 2022 at 19:41):

there's actually two: docs#nat.decidable_prime and docs#nat.decidable_prime1

#### Mario Carneiro (Jan 26 2022 at 19:52):

The reason why decidable_prime_1 is not the default instance (and similar for other decidability instances like it) is because it is slower to perform computations like this than norm_num style proofs. You will very quickly run into the problem that direct computation on nat using this method works on unary numerals and so inevitably hits a wall at not-very-large numbers. decidable_prime is a more useful instance because it computes in #eval quickly (and in fact it is used in norm_num internally)

#### Mario Carneiro (Jan 26 2022 at 19:53):

If you really want to do computation in the kernel you should use docs#num instead of nat

#### Mario Carneiro (Jan 26 2022 at 19:53):

There is in fact an instance for primality over num as well: docs#num.decidable_prime

#### Patrick Johnson (Jan 26 2022 at 19:58):

Oh, I didn't look at the docs for nat.prime :face_palm:. I just tried dec_trivial and since it failed, I thought we don't even have a decidability instance, so I wrote one. But it was a fun excercise anyway. My instance timeouts for numbers >100, so it's pretty much useless.

#### Patrick Johnson (Jan 26 2022 at 19:59):

TIL that norm_num can also prove primality. That's interesting.

#### Kevin Buzzard (Jan 26 2022 at 22:54):

Here's how it happened: https://xenaproject.wordpress.com/2018/07/26/617-is-prime/

Last updated: Dec 20 2023 at 11:08 UTC