diff --git a/util/lemmas.v b/util/lemmas.v
index 394dae0d4144267c347049135e15360c935a6ae1..86ae8ac1663dea01336594dc7f7333e23221f799 100644
--- a/util/lemmas.v
+++ b/util/lemmas.v
@@ -354,21 +354,33 @@ Section BigCatLemmas.
     }
   Qed.
 
-  Lemma size_bigcat_ord {T} n (i: 'I_n) (f: 'I_n -> seq T) :
-    (forall x, size (f x) <= 1) ->
-    size (\cat_(i < n) (f i)) <= n.
+  Lemma map_bigcat_ord {T} {T'} n (f: 'I_n -> seq T) (g: T -> T') :
+    map g (\cat_(i < n) (f i)) = \cat_(i < n) (map g (f i)).
+  Proof.
+    destruct n; first by rewrite 2!big_ord0. 
+    induction n; first by rewrite 2!big_ord_recr 2!big_ord0.
+    rewrite big_ord_recr [\cat_(cpu < n.+2)_]big_ord_recr /=.
+    by rewrite map_cat; f_equal; apply IHn.
+  Qed.
+
+  Lemma size_bigcat_ord {T} n (f: 'I_n -> seq T) :
+    size (\cat_(i < n) (f i)) = \sum_(i < n) (size (f i)).
+  Proof.
+    destruct n; first by rewrite 2!big_ord0.
+    induction n; first by rewrite 2!big_ord_recr 2!big_ord0 /= add0n.
+    rewrite big_ord_recr [\sum_(i0 < n.+2)_]big_ord_recr size_cat /=.
+    by f_equal; apply IHn.
+  Qed.
+
+  Lemma size_bigcat_ord_max {T} n (f: 'I_n -> seq T) m :
+    (forall x, size (f x) <= m) ->
+    size (\cat_(i < n) (f i)) <= m*n.
   Proof.
     intros SIZE.
-    destruct n; first by rewrite big_ord0.
-    induction n; first by rewrite big_ord_recl big_ord0 size_cat addn0.
-    rewrite big_ord_recr size_cat.
-    apply leq_trans with (n.+1 + 1); last by rewrite addn1.
-    apply leq_add; last by apply SIZE.
-    apply IHn; last by ins; apply SIZE.
-    {
-      assert (LT: 0 < n.+1). by done.
-      by apply (Ordinal LT).
-    }
+    rewrite size_bigcat_ord.
+    apply leq_trans with (n := \sum_(i0 < n) m);
+      last by rewrite big_const_ord iter_addn addn0.
+    by apply leq_sum; ins; apply SIZE. 
   Qed.
   
 End BigCatLemmas.