From d6ce34a8c62b25a63f6f33f8dbcce34bbfb9a697 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Brandenburg?= <bbb@mpi-sws.org>
Date: Wed, 16 Mar 2022 14:19:16 +0100
Subject: [PATCH] add lemma on `div_ceil` on integer multiples

---
 util/div_mod.v | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/util/div_mod.v b/util/div_mod.v
index aa417e75b..f10b4fe2f 100644
--- a/util/div_mod.v
+++ b/util/div_mod.v
@@ -170,7 +170,23 @@ Section DivFloorCeil.
         apply leq_ltn_trans with (a %/ T + b %/T + 1); last by lia.
         by apply leq_divDl.
   Qed.
-  
+
+  (** We observe that when dividing a value exceeding [T * n], then
+      the ceiling exceeds [n]. *)
+  Lemma div_ceil_multiple :
+    forall Δ T n,
+      T > 0 ->
+      (T * n) < Δ ->
+      n < div_ceil Δ T.
+  Proof.
+    move=> delta T n GT0 LT.
+    rewrite /div_ceil.
+    case DIV: (T %| delta);
+      first by rewrite -(ltn_pmul2l GT0) [_ * (_ %/ _)]mulnC divnK.
+    rewrite -[(_ %/ _).+1]addn1  -divnDMl // -(ltn_pmul2l GT0) [_ * (_ %/ _)]mulnC mul1n.
+    by lia.
+  Qed.
+
   (** We show that for any two integers [a] and [b], 
       [a] is less than [a %/ b * b + b] given that [b] is positive. *)
   Lemma div_floor_add_g:
-- 
GitLab