| 41561 |      1 | (*  Title:      HOL/SPARK/Examples/Sqrt/Sqrt.thy
 | 
|  |      2 |     Author:     Stefan Berghofer
 | 
|  |      3 |     Copyright:  secunet Security Networks AG
 | 
|  |      4 | *)
 | 
|  |      5 | 
 | 
|  |      6 | theory Sqrt
 | 
|  |      7 | imports SPARK
 | 
|  |      8 | begin
 | 
|  |      9 | 
 | 
|  |     10 | spark_open "sqrt/isqrt.siv"
 | 
|  |     11 | 
 | 
|  |     12 | spark_vc function_isqrt_4
 | 
|  |     13 | proof -
 | 
|  |     14 |   from `0 \<le> r` have "(r = 0 \<or> r = 1 \<or> r = 2) \<or> 2 < r" by auto
 | 
|  |     15 |   then show "2 * r \<le> 2147483646"
 | 
|  |     16 |   proof
 | 
|  |     17 |     assume "2 < r"
 | 
|  |     18 |     then have "0 < r" by simp
 | 
|  |     19 |     with `2 < r` have "2 * r < r * r" by (rule mult_strict_right_mono)
 | 
|  |     20 |     with `r * r \<le> n` and `n \<le> 2147483647` show ?thesis
 | 
|  |     21 |       by simp
 | 
|  |     22 |   qed auto
 | 
|  |     23 |   then show "2 * r \<le> 2147483647" by simp
 | 
|  |     24 | qed
 | 
|  |     25 | 
 | 
|  |     26 | spark_end
 | 
|  |     27 | 
 | 
|  |     28 | end
 |