src/HOL/Divides.thy
changeset 54221 56587960e444
parent 53374 a14d2a854c02
child 54226 e3df2a4e02fc
equal deleted inserted replaced
54220:0e6645622f22 54221:56587960e444
    50 
    50 
    51 lemma div_mult_self2 [simp]:
    51 lemma div_mult_self2 [simp]:
    52   assumes "b \<noteq> 0"
    52   assumes "b \<noteq> 0"
    53   shows "(a + b * c) div b = c + a div b"
    53   shows "(a + b * c) div b = c + a div b"
    54   using assms div_mult_self1 [of b a c] by (simp add: mult_commute)
    54   using assms div_mult_self1 [of b a c] by (simp add: mult_commute)
       
    55 
       
    56 lemma div_mult_self3 [simp]:
       
    57   assumes "b \<noteq> 0"
       
    58   shows "(c * b + a) div b = c + a div b"
       
    59   using assms by (simp add: add.commute)
       
    60 
       
    61 lemma div_mult_self4 [simp]:
       
    62   assumes "b \<noteq> 0"
       
    63   shows "(b * c + a) div b = c + a div b"
       
    64   using assms by (simp add: add.commute)
    55 
    65 
    56 lemma mod_mult_self1 [simp]: "(a + c * b) mod b = a mod b"
    66 lemma mod_mult_self1 [simp]: "(a + c * b) mod b = a mod b"
    57 proof (cases "b = 0")
    67 proof (cases "b = 0")
    58   case True then show ?thesis by simp
    68   case True then show ?thesis by simp
    59 next
    69 next
    68   then have "a div b * b + (a + c * b) mod b = a div b * b + a mod b"
    78   then have "a div b * b + (a + c * b) mod b = a div b * b + a mod b"
    69     by (simp add: mod_div_equality)
    79     by (simp add: mod_div_equality)
    70   then show ?thesis by simp
    80   then show ?thesis by simp
    71 qed
    81 qed
    72 
    82 
    73 lemma mod_mult_self2 [simp]: "(a + b * c) mod b = a mod b"
    83 lemma mod_mult_self2 [simp]: 
       
    84   "(a + b * c) mod b = a mod b"
    74   by (simp add: mult_commute [of b])
    85   by (simp add: mult_commute [of b])
       
    86 
       
    87 lemma mod_mult_self3 [simp]:
       
    88   "(c * b + a) mod b = a mod b"
       
    89   by (simp add: add.commute)
       
    90 
       
    91 lemma mod_mult_self4 [simp]:
       
    92   "(b * c + a) mod b = a mod b"
       
    93   by (simp add: add.commute)
    75 
    94 
    76 lemma div_mult_self1_is_id [simp]: "b \<noteq> 0 \<Longrightarrow> b * a div b = a"
    95 lemma div_mult_self1_is_id [simp]: "b \<noteq> 0 \<Longrightarrow> b * a div b = a"
    77   using div_mult_self2 [of b 0 a] by simp
    96   using div_mult_self2 [of b 0 a] by simp
    78 
    97 
    79 lemma div_mult_self2_is_id [simp]: "b \<noteq> 0 \<Longrightarrow> a * b div b = a"
    98 lemma div_mult_self2_is_id [simp]: "b \<noteq> 0 \<Longrightarrow> a * b div b = a"
   474 lemma div_minus1_right [simp]: "a div (-1) = -a"
   493 lemma div_minus1_right [simp]: "a div (-1) = -a"
   475   using div_minus_right [of a 1] by simp
   494   using div_minus_right [of a 1] by simp
   476 
   495 
   477 lemma mod_minus1_right [simp]: "a mod (-1) = 0"
   496 lemma mod_minus1_right [simp]: "a mod (-1) = 0"
   478   using mod_minus_right [of a 1] by simp
   497   using mod_minus_right [of a 1] by simp
       
   498 
       
   499 lemma minus_mod_self2 [simp]: 
       
   500   "(a - b) mod b = a mod b"
       
   501   by (simp add: mod_diff_right_eq)
       
   502 
       
   503 lemma minus_mod_self1 [simp]: 
       
   504   "(b - a) mod b = - a mod b"
       
   505 proof -
       
   506   have "b - a = - a + b" by (simp add: diff_minus add.commute)
       
   507   then show ?thesis by simp
       
   508 qed
   479 
   509 
   480 end
   510 end
   481 
   511 
   482 
   512 
   483 subsection {* Generic numeral division with a pragmatic type class *}
   513 subsection {* Generic numeral division with a pragmatic type class *}