Zulip Chat Archive

Stream: maths

Topic: polynomial functions


Anatole Dedecker (Oct 16 2020 at 10:19):

I was wondering : what is the preferred way to talk about polynomial functions in mathlib, for e.g. analysis purposes ? I was thinking of using polynomial.eval but it seems there are only a few analysis facts about it. Is it a lack of API, or am I just looking for the wrong thing ?

Johan Commelin (Oct 16 2020 at 12:00):

I'm sure that there is very little api

Johan Commelin (Oct 16 2020 at 12:00):

For the Witt project we needed a very special kind of polynomial function, but we defined an is_poly predicate on functions. It can work quite well.

Reid Barton (Oct 16 2020 at 12:06):

I suspect we have precisely enough to prove that the complex numbers are algebraically closed.

Johan Commelin (Oct 16 2020 at 12:12):

But I guess it's still ad hoc. That proof doesn't set up a small is_poly API either, afaik.

Yury G. Kudryashov (Oct 16 2020 at 13:38):

What's the difference between is_poly and ∃ p, p.eval = f?

Yury G. Kudryashov (Oct 16 2020 at 13:39):

We also have custom polynomials in docs#poly and docs#is_poly in number_theory/dioph

Yury G. Kudryashov (Oct 16 2020 at 13:40):

Probably these were written before polynomial.

Yury G. Kudryashov (Oct 16 2020 at 13:44):

@Mario Carneiro Am I right?

Mario Carneiro (Oct 16 2020 at 13:46):

yes, although those definitions are also somewhat purpose-built

Yury G. Kudryashov (Oct 16 2020 at 14:07):

BTW, the docstring of docs#is_poly doesn't mention the implications of using nat.sub in the definition.

Yury G. Kudryashov (Oct 16 2020 at 14:09):

And I think that it should be moved to a namespace (or migrated to mv_polynomial and -valued functions)

Johan Commelin (Oct 16 2020 at 15:29):

Yury G. Kudryashov said:

What's the difference between is_poly and ∃ p, p.eval = f?

In the case of witt vectors you need a nat-indexed family of polynomials. But for the general purpose notion, that would indeed be exactly the definition I would use.

Mario Carneiro (Oct 16 2020 at 15:34):

Yury G. Kudryashov said:

BTW, the docstring of docs#is_poly doesn't mention the implications of using nat.sub in the definition.

That's because it has no implications. It defines the correct subset even though nat.sub is used

Mario Carneiro (Oct 16 2020 at 15:36):

Actually I take it back, is_poly doesn't use nat.sub

Johan Commelin (Oct 16 2020 at 15:40):

Does it make sense to think that this code should be refactored to use mv_polynomial \a int?

Yury G. Kudryashov (Oct 16 2020 at 15:43):

Can we evaluate mv_polynomial α int on α → nat?

Yury G. Kudryashov (Oct 16 2020 at 15:43):

(I guess, the answer is "turn it into α → int first")

Mario Carneiro (Oct 16 2020 at 15:53):

I would suggest trying to locate all the analogous theorems before refactoring the file

Mario Carneiro (Oct 16 2020 at 15:53):

I think some are yet missing

Mario Carneiro (Oct 16 2020 at 15:56):

I suspect that even if this predicate was defined using mv_polynomial it is sufficiently different as to still require definition

Mario Carneiro (Oct 16 2020 at 15:57):

so perhaps it would be better to not change the definition and instead just relate it to mv_polynomial

Mario Carneiro (Oct 16 2020 at 15:58):

I rather like the fact that this file has few dependencies though. It seems like we would lose that

Yury G. Kudryashov (Oct 16 2020 at 16:08):

IMHO being related to general concepts defined in mathlib is more important than having few dependencies.


Last updated: Dec 20 2023 at 11:08 UTC