diff -r 405f7fd15f4e -r f94b30fa2b6c src/HOL/Library/Discrete.thy --- a/src/HOL/Library/Discrete.thy Sun Nov 03 21:12:50 2024 +0100 +++ b/src/HOL/Library/Discrete.thy Sun Nov 03 22:29:07 2024 +0100 @@ -37,7 +37,7 @@ with \n \ 2\ show ?thesis by (rule double) qed qed - + lemma log_zero [simp]: "log 0 = 0" by (simp add: log.simps) @@ -177,11 +177,8 @@ fixes n :: nat shows "finite {m. m\<^sup>2 \ n}" and "{m. m\<^sup>2 \ n} \ {}" proof - - { fix m - assume "m\<^sup>2 \ n" - then have "m \ n" - by (cases m) (simp_all add: power2_eq_square) - } note ** = this + have **: "m \ n" if "m\<^sup>2 \ n" for m + using that by (cases m) (simp_all add: power2_eq_square) then have "{m. m\<^sup>2 \ n} \ {m. m \ n}" by auto then show "finite {m. m\<^sup>2 \ n}" by (rule finite_subset) rule have "0\<^sup>2 \ n" by simp @@ -295,14 +292,14 @@ using sqrt_aux [of n] by (auto simp add: sqrt_def intro: power2_nat_le_imp_le) text \Additional facts about the discrete square root, thanks to Julian Biendarra, Manuel Eberl\ - + lemma Suc_sqrt_power2_gt: "n < (Suc (Discrete.sqrt n))^2" using Max_ge[OF Discrete.sqrt_aux(1), of "Discrete.sqrt n + 1" n] by (cases "n < (Suc (Discrete.sqrt n))^2") (simp_all add: Discrete.sqrt_def) lemma le_sqrt_iff: "x \ Discrete.sqrt y \ x^2 \ y" proof - - have "x \ Discrete.sqrt y \ (\z. z\<^sup>2 \ y \ x \ z)" + have "x \ Discrete.sqrt y \ (\z. z\<^sup>2 \ y \ x \ z)" using Max_ge_iff[OF Discrete.sqrt_aux, of x y] by (simp add: Discrete.sqrt_def) also have "\ \ x^2 \ y" proof safe @@ -311,7 +308,7 @@ qed auto finally show ?thesis . qed - + lemma le_sqrtI: "x^2 \ y \ x \ Discrete.sqrt y" by (simp add: le_sqrt_iff) @@ -321,14 +318,14 @@ lemma sqrt_leI: "(\z. z^2 \ y \ z \ x) \ Discrete.sqrt y \ x" by (simp add: sqrt_le_iff) - + lemma sqrt_Suc: "Discrete.sqrt (Suc n) = (if \m. Suc n = m^2 then Suc (Discrete.sqrt n) else Discrete.sqrt n)" proof cases assume "\ m. Suc n = m^2" then obtain m where m_def: "Suc n = m^2" by blast then have lhs: "Discrete.sqrt (Suc n) = m" by simp - from m_def sqrt_power2_le[of n] + from m_def sqrt_power2_le[of n] have "(Discrete.sqrt n)^2 < m^2" by linarith with power2_less_imp_less have lt_m: "Discrete.sqrt n < m" by blast from m_def Suc_sqrt_power2_gt[of "n"] @@ -340,7 +337,7 @@ next assume asm: "\ (\ m. Suc n = m^2)" hence "Suc n \ (Discrete.sqrt (Suc n))^2" by simp - with sqrt_power2_le[of "Suc n"] + with sqrt_power2_le[of "Suc n"] have "Discrete.sqrt (Suc n) \ Discrete.sqrt n" by (intro le_sqrtI) linarith moreover have "Discrete.sqrt (Suc n) \ Discrete.sqrt n" by (intro monoD[OF mono_sqrt]) simp_all