Zulip Chat Archive

Stream: maths

Topic: Result exists?


rory (Nov 03 2019 at 17:46):

Is there any results in mathlib similar to this, int.gcd a b = int.gcd c d ↔ ∀ k, (k ∣ a) ∧ (k ∣ b) ↔ (k ∣ c) ∧ (k ∣ d), exist?

Kevin Buzzard (Nov 03 2019 at 18:07):

I guess the roadmap to proving this would be to show that away from the edge cases, the gcd is the largest non-negative int dividing both (which might be in mathlib, it sounds like a natural statement) and then use the fact that if two finite sets are equal then so is their largest element.

Kevin Buzzard (Nov 03 2019 at 18:08):

My gut feeling is that mathlib is a library of standard results (like the two I mentioned) but then probably it's the user's job to put them together to make statements such as this.

Reid Barton (Nov 03 2019 at 22:08):

Hopefully there is a lemma (k ∣ a) ∧ (k ∣ b) ↔ k ∣int.gcd a b. That already gives you one direction.

Reid Barton (Nov 03 2019 at 22:09):

For the other direction you need to show that two nonnegative integers which divide each other are equal, which should also be a lemma

Kevin Buzzard (Nov 03 2019 at 22:51):

Aah yes this is a much neater way to do it.

Floris van Doorn (Nov 04 2019 at 18:53):

The result Reid mentions is

theorem dvd_gcd_iff (a b c : α) : a  gcd b c  (a  b  a  c)

in algebra.gcd_domain

Kenny Lau (Nov 04 2019 at 18:54):

oh I tried looking for it in euclidean_domain

Floris van Doorn (Nov 04 2019 at 18:55):

The single direction exists multiple times, in algebra.euclidean_domain and data.nat.gcd and data.pnat.basic

rory (Nov 06 2019 at 12:15):

The result Reid mentions is

theorem dvd_gcd_iff (a b c : α) : a  gcd b c  (a  b  a  c)

in algebra.gcd_domain

How do I eventually convert from gcd a b to int.gcd?
The final result could be proved using int.antisymm, but that requires int.gcd not gcd

Mario Carneiro (Nov 06 2019 at 12:16):

there is almost certainly an analogous theorem for int.gcd

Mario Carneiro (Nov 06 2019 at 12:19):

Hm, this particular theorem appears to be missing, but you can reconstruct it from int.dvd_gcd, int.gcd_dvd_left, int.gcd_dvd_right

Mario Carneiro (Nov 06 2019 at 12:20):

or you can use int.coe_gcd to convert gcd to int.gcd


Last updated: Dec 20 2023 at 11:08 UTC