src/HOL/Library/Discrete.thy
changeset 67399 eab6ce8368fa
parent 64919 7e0c8924dfda
child 69064 5840724b1d71
equal deleted inserted replaced
67398:5eb932e604a2 67399:eab6ce8368fa
   272     next
   272     next
   273       case True then have "mono (times q)" by (rule mono_times_nat)
   273       case True then have "mono (times q)" by (rule mono_times_nat)
   274       then have "q * Max {m. m * m \<le> n} = Max (times q ` {m. m * m \<le> n})"
   274       then have "q * Max {m. m * m \<le> n} = Max (times q ` {m. m * m \<le> n})"
   275         using sqrt_aux [of n] by (auto simp add: power2_eq_square intro: mono_Max_commute)
   275         using sqrt_aux [of n] by (auto simp add: power2_eq_square intro: mono_Max_commute)
   276       then have "Max {m. m * m \<le> n} * q = Max (times q ` {m. m * m \<le> n})" by (simp add: ac_simps)
   276       then have "Max {m. m * m \<le> n} * q = Max (times q ` {m. m * m \<le> n})" by (simp add: ac_simps)
   277       moreover have "finite (op * q ` {m. m * m \<le> n})"
   277       moreover have "finite (( * ) q ` {m. m * m \<le> n})"
   278         by (metis (mono_tags) finite_imageI finite_less_ub le_square)
   278         by (metis (mono_tags) finite_imageI finite_less_ub le_square)
   279       moreover have "\<exists>x. x * x \<le> n"
   279       moreover have "\<exists>x. x * x \<le> n"
   280         by (metis \<open>q * q \<le> n\<close>)
   280         by (metis \<open>q * q \<le> n\<close>)
   281       ultimately show ?thesis
   281       ultimately show ?thesis
   282         by simp (metis \<open>q * q \<le> n\<close> le_cases mult_le_mono1 mult_le_mono2 order_trans)
   282         by simp (metis \<open>q * q \<le> n\<close> le_cases mult_le_mono1 mult_le_mono2 order_trans)
   283     qed
   283     qed
   284   qed
   284   qed
   285   then have "Max (op * (Max {m. m * m \<le> n}) ` {m. m * m \<le> n}) \<le> n"
   285   then have "Max (( * ) (Max {m. m * m \<le> n}) ` {m. m * m \<le> n}) \<le> n"
   286     apply (subst Max_le_iff)
   286     apply (subst Max_le_iff)
   287       apply (metis (mono_tags) finite_imageI finite_less_ub le_square)
   287       apply (metis (mono_tags) finite_imageI finite_less_ub le_square)
   288      apply auto
   288      apply auto
   289     apply (metis le0 mult_0_right)
   289     apply (metis le0 mult_0_right)
   290     done
   290     done