equal
deleted
inserted
replaced
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 *} |