# Zulip Chat Archive

## Stream: general

### Topic: le for div?

#### Nicholas Scheel (Apr 04 2018 at 16:40):

This seems like a silly question but I've scoured mathlib and init for this lemma and I can't find it: `∀ {n m : ℕ} (h : n ≤ m) {k}, n/k ≤ m/k`

I don't think it can be derived from `div_le_of_le_mul`

since `k*(n/k) = n`

does not necessarily hold (only if `k | n`

)

a version for multiplication would be nice too

does this exist? is there a nice way to prove it?

#### Simon Hudon (Apr 04 2018 at 16:46):

I think `le_div_iff_mul_le`

with `div_mul_le_self`

should allow you to prove that

#### Chris Hughes (Apr 04 2018 at 17:07):

It doesn't. Applying `le_div_of_mul_le`

gives you something false to prove, if say `n=4`

, `m=5`

, `k=3`

#### Simon Hudon (Apr 04 2018 at 17:08):

Don't use `le_div_of_mul_le`

; use `le_div_iff_mul_le`

instead

#### Chris Hughes (Apr 04 2018 at 17:09):

Sorry, I was talking about a `div_le`

not `le_div`

#### Nicholas Scheel (Apr 04 2018 at 17:11):

Thanks for the tip! :bow: I think I got it working now:

lemma nat.le_mul {n m : ℕ} (h : n ≤ m) {k} : n*k ≤ m*k := begin cases k with k, rw [nat.mul_zero, nat.mul_zero], apply (nat.le_div_iff_mul_le n (m*nat.succ k) (nat.zero_lt_succ k)).1, rw [nat.mul_div_left], exact h, apply nat.zero_lt_succ, end lemma nat.le_div {n m : ℕ} (h : n ≤ m) {k} : n/k ≤ m/k := begin cases k with k, rw [nat.div_zero, nat.div_zero], apply (nat.le_div_iff_mul_le (n/nat.succ k) (m) (nat.zero_lt_succ k)).2, transitivity, apply nat.div_mul_le_self, exact h, end

#### Simon Hudon (Apr 04 2018 at 17:18):

A a matter of style, you may prefer `cases lt_or_eq_of_le (zero_le k) with hk hk`

instead of `cases k with k`

#### Matt Wilson (Apr 04 2018 at 17:19):

peanut gallery question, but how long does that take to run

#### Simon Hudon (Apr 04 2018 at 17:21):

About 51ms on my system

#### Simon Hudon (Apr 04 2018 at 17:22):

Sorry, wrong proof. @Nicholas Scheel 's proof takes 6ms

#### Simon Hudon (Apr 04 2018 at 19:22):

@Nicholas Scheel Feel free to send a pull request of that theorem to mathlib. You should call it `nat.div_le_div`

.

#### Kevin Buzzard (Apr 04 2018 at 22:39):

` nat.mul_le_mul_right : ∀ {n m : ℕ} (k : ℕ), n ≤ m → n * k ≤ m * k `

is already there

#### Kevin Buzzard (Apr 04 2018 at 22:39):

but I haven't seen the div version before

#### Mario Carneiro (Apr 05 2018 at 01:20):

I'm also surprised to find this is missing. I will add it to mathlib, by the name `nat.div_le_div_right`

#### Nicholas Scheel (Apr 05 2018 at 01:23):

@Mario Carneiro @Simon Hudon How about this? https://github.com/MonoidMusician/mathlib/pull/1 ;)

#### Mario Carneiro (Apr 05 2018 at 01:25):

I'm also going to rewrite the proof, since it's a one-liner. I think Simon gave a hint earlier about this, see if you can shorten your proof

#### Nicholas Scheel (Apr 05 2018 at 01:32):

hmm okay, I don’t know enough to see how to shorten it like that and I’ve run out of time tonight, feel free to pick it up if you want :simple_smile:

#### Mario Carneiro (Apr 05 2018 at 01:34):

oh, actually I forgot about the zero case. Anyway here's my attempt at shortening it:

protected theorem div_le_div {n m : ℕ} (h : n ≤ m) {k : ℕ} : n / k ≤ m / k := (nat.eq_zero_or_pos k).elim (λ k0, by simp [k0]) $ λ hk, (nat.le_div_iff_mul_le _ _ hk).2 $ le_trans (nat.div_mul_le_self _ _) h

#### Nicholas Scheel (Apr 05 2018 at 01:35):

(whoops didn’t realize that I PRed my own repo)

#### Mario Carneiro (Apr 05 2018 at 01:37):

looking at the differences, I guess I didn't do much besides compactify the same steps, more or less

Last updated: Dec 20 2023 at 11:08 UTC