Zulip Chat Archive
Stream: maths
Topic: Polynomials over a field are not quite Euclidean in lean
Chris Hughes (May 28 2018 at 09:16):
I've been trying to prove polynomials over a field are a Euclidean domain. The only trouble is, they do not meet the axioms if I use degree as valuation since for two constant polynomials, degree (a % b) = degree b. Does anyone have experience doing this in any other theorem prover and can recommend a sensible solution. The most obvious is to definenew_degree 0 = 0, and new_degree p = degree p + 1 for p ≠ 0. Is this the best option?
Johannes Hölzl (May 28 2018 at 09:23):
In Isabelle the size is not degree d itself but 2^d, and 0 for the 0 polynomial. See http://isabelle.in.tum.de/dist/library/HOL/HOL-Computational_Algebra/Polynomial_Factorial.html :
definition euclidean_size_field_poly :: "'a :: field poly ⇒ nat" where "euclidean_size_field_poly p = (if p = 0 then 0 else 2 ^ degree p)"
Chris Hughes (May 28 2018 at 09:24):
Why 2^d?
Johan Commelin (May 28 2018 at 09:26):
I actually think that valuation_remainder_lt is not what mathematicians want
Johan Commelin (May 28 2018 at 09:27):
It is a lot stronger than the usual condition
Johan Commelin (May 28 2018 at 09:27):
They swapped two quantifiers, so to speak
Mario Carneiro (May 28 2018 at 09:28):
what do you mean?
Johan Commelin (May 28 2018 at 09:28):
Quote from wiki: (EF1) If a and b are in R and b is nonzero, then there are q and r in R such that a = bq + r and either r = 0 or f(r) < f(b).
Johannes Hölzl (May 28 2018 at 09:28):
Why
2^d?
I guess you get the nice rule: E(p * q) = E(p) * E (q)
Mario Carneiro (May 28 2018 at 09:29):
oh, you need a % b != 0 also as a precondition
Johan Commelin (May 28 2018 at 09:29):
So it is about the existence of q and r, but this somehow requires it for all q and r
Johannes Hölzl (May 28 2018 at 09:29):
(where E = euclidean_size_field_poly)
Johan Commelin (May 28 2018 at 09:29):
Mario, I think that would also fix it, yes.
Mario Carneiro (May 28 2018 at 09:30):
that's basically what wiki is saying, or you can have a disjunction at the end
Johan Commelin (May 28 2018 at 09:30):
After all, the valuation of 0 is 37 according to @Kevin Buzzard
Mario Carneiro (May 28 2018 at 09:30):
hey, with the new with_zero class you can now just say that valuation takes values in with_zero nat
Johan Commelin (May 28 2018 at 09:31):
Nooo! with_zero nat looks horrible... can we please have with_bot or something
Mario Carneiro (May 28 2018 at 09:32):
it's the absorbing element of multiplication...
Mario Carneiro (May 28 2018 at 09:32):
there is also with_bot, which has no algebraic interpretation
Mario Carneiro (May 28 2018 at 09:33):
actually valuation looks like it doesn't need any algebraic interpretation, so I guess with_bot is fine
Chris Hughes (May 28 2018 at 09:34):
It could just be generalised to take any well founded relation, instead of a valuation
Chris Hughes (May 28 2018 at 17:58):
hey, with the new
with_zeroclass you can now just say thatvaluationtakes values inwith_zero nat
Where is this class defined? I definitely prefer the idea of option nat over 2^degree.
Mario Carneiro (May 28 2018 at 19:30):
with_bot is in lattice.bounded_lattice, with_zero is in algebra.group. Basically it should already be available if you have the basic mathlib lemmas
Last updated: May 02 2025 at 03:31 UTC