src/HOL/Data_Structures/Leftist_Heap.thy
changeset 80484 0ca36dcdcbd3
parent 79969 4aeb25ba90f3
--- a/src/HOL/Data_Structures/Leftist_Heap.thy	Wed Jul 03 09:14:39 2024 +0200
+++ b/src/HOL/Data_Structures/Leftist_Heap.thy	Wed Jul 03 19:42:13 2024 +0200
@@ -186,30 +186,16 @@
 using T_merge_log[of "Node Leaf (x, 1) Leaf" t]
 by(simp split: tree.split)
 
-lemma ld_ld_1_less:
-  assumes "x > 0" "y > 0" shows "log 2 x + log 2 y + 1 < 2 * log 2 (x+y)"
-proof -
-  have "2 powr (log 2 x + log 2 y + 1) = 2*x*y"
-    using assms by(simp add: powr_add)
-  also have "\<dots> < (x+y)^2" using assms
-    by(simp add: numeral_eq_Suc algebra_simps add_pos_pos)
-  also have "\<dots> = 2 powr (2 * log 2 (x+y))"
-    using assms by(simp add: powr_add log_powr[symmetric])
-  finally show ?thesis by simp
-qed
-
 corollary T_del_min_log: assumes "ltree t"
-  shows "T_del_min t \<le> 2 * log 2 (size1 t)"
+  shows "T_del_min t \<le> 2 * log 2 (size1 t) + 1"
 proof(cases t rule: tree2_cases)
   case Leaf thus ?thesis using assms by simp
 next
   case [simp]: (Node l _ _ r)
-  have "T_del_min t = T_merge l r" by simp
-  also have "\<dots> \<le> log 2 (size1 l) + log 2 (size1 r) + 1"
-    using \<open>ltree t\<close> T_merge_log[of l r] by (auto simp del: T_merge.simps)
-  also have "\<dots> \<le> 2 * log 2 (size1 t)"
-    using ld_ld_1_less[of "size1 l" "size1 r"] by (simp)
-  finally show ?thesis .
+  show ?thesis
+    using \<open>ltree t\<close> T_merge_log[of l r]
+      log_mono[of 2 "size1 l" "size1 t"] log_mono[of 2 "size1 r" "size1 t"]
+    by (simp del: T_merge.simps)
 qed
 
 end