src/HOL/IntDiv.thy
changeset 33296 a3924d1069e5
parent 32960 69916a850301
child 33318 ddd97d9dfbfb
equal deleted inserted replaced
33275:b497b2574bf6 33296:a3924d1069e5
  1316   assume ?rhs then obtain q1 q2 where q12: "x + n * q1 = y + n * q2" by blast
  1316   assume ?rhs then obtain q1 q2 where q12: "x + n * q1 = y + n * q2" by blast
  1317   hence "(x + n * q1) mod n = (y + n * q2) mod n" by simp
  1317   hence "(x + n * q1) mod n = (y + n * q2) mod n" by simp
  1318   thus  ?lhs by simp
  1318   thus  ?lhs by simp
  1319 qed
  1319 qed
  1320 
  1320 
       
  1321 lemma div_nat_number_of [simp]:
       
  1322      "(number_of v :: nat)  div  number_of v' =  
       
  1323           (if neg (number_of v :: int) then 0  
       
  1324            else nat (number_of v div number_of v'))"
       
  1325   unfolding nat_number_of_def number_of_is_id neg_def
       
  1326   by (simp add: nat_div_distrib)
       
  1327 
       
  1328 lemma one_div_nat_number_of [simp]:
       
  1329      "Suc 0 div number_of v' = nat (1 div number_of v')" 
       
  1330 by (simp del: nat_numeral_1_eq_1 add: numeral_1_eq_Suc_0 [symmetric]) 
       
  1331 
       
  1332 lemma mod_nat_number_of [simp]:
       
  1333      "(number_of v :: nat)  mod  number_of v' =  
       
  1334         (if neg (number_of v :: int) then 0  
       
  1335          else if neg (number_of v' :: int) then number_of v  
       
  1336          else nat (number_of v mod number_of v'))"
       
  1337   unfolding nat_number_of_def number_of_is_id neg_def
       
  1338   by (simp add: nat_mod_distrib)
       
  1339 
       
  1340 lemma one_mod_nat_number_of [simp]:
       
  1341      "Suc 0 mod number_of v' =  
       
  1342         (if neg (number_of v' :: int) then Suc 0
       
  1343          else nat (1 mod number_of v'))"
       
  1344 by (simp del: nat_numeral_1_eq_1 add: numeral_1_eq_Suc_0 [symmetric]) 
       
  1345 
       
  1346 lemmas dvd_eq_mod_eq_0_number_of =
       
  1347   dvd_eq_mod_eq_0 [of "number_of x" "number_of y", standard]
       
  1348 
       
  1349 declare dvd_eq_mod_eq_0_number_of [simp]
       
  1350 
  1321 
  1351 
  1322 subsection {* Code generation *}
  1352 subsection {* Code generation *}
  1323 
  1353 
  1324 definition pdivmod :: "int \<Rightarrow> int \<Rightarrow> int \<times> int" where
  1354 definition pdivmod :: "int \<Rightarrow> int \<Rightarrow> int \<times> int" where
  1325   "pdivmod k l = (\<bar>k\<bar> div \<bar>l\<bar>, \<bar>k\<bar> mod \<bar>l\<bar>)"
  1355   "pdivmod k l = (\<bar>k\<bar> div \<bar>l\<bar>, \<bar>k\<bar> mod \<bar>l\<bar>)"