1261 lemmas mult_le_cancel_right_numeral [simp, no_atp] = mult_le_cancel_right [of _ "numeral v"] for v |
1261 lemmas mult_le_cancel_right_numeral [simp, no_atp] = mult_le_cancel_right [of _ "numeral v"] for v |
1262 |
1262 |
1263 |
1263 |
1264 text \<open>Multiplying out constant divisors in comparisons (@{text "<"}, @{text "\<le>"} and @{text "="})\<close> |
1264 text \<open>Multiplying out constant divisors in comparisons (@{text "<"}, @{text "\<le>"} and @{text "="})\<close> |
1265 |
1265 |
1266 lemmas le_divide_eq_numeral1 [simp] = |
1266 named_theorems divide_const_simps "simplification rules to simplify comparisons involving constant divisors" |
|
1267 |
|
1268 lemmas le_divide_eq_numeral1 [simp,divide_const_simps] = |
1267 pos_le_divide_eq [of "numeral w", OF zero_less_numeral] |
1269 pos_le_divide_eq [of "numeral w", OF zero_less_numeral] |
1268 neg_le_divide_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1270 neg_le_divide_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1269 |
1271 |
1270 lemmas divide_le_eq_numeral1 [simp] = |
1272 lemmas divide_le_eq_numeral1 [simp,divide_const_simps] = |
1271 pos_divide_le_eq [of "numeral w", OF zero_less_numeral] |
1273 pos_divide_le_eq [of "numeral w", OF zero_less_numeral] |
1272 neg_divide_le_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1274 neg_divide_le_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1273 |
1275 |
1274 lemmas less_divide_eq_numeral1 [simp] = |
1276 lemmas less_divide_eq_numeral1 [simp,divide_const_simps] = |
1275 pos_less_divide_eq [of "numeral w", OF zero_less_numeral] |
1277 pos_less_divide_eq [of "numeral w", OF zero_less_numeral] |
1276 neg_less_divide_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1278 neg_less_divide_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1277 |
1279 |
1278 lemmas divide_less_eq_numeral1 [simp] = |
1280 lemmas divide_less_eq_numeral1 [simp,divide_const_simps] = |
1279 pos_divide_less_eq [of "numeral w", OF zero_less_numeral] |
1281 pos_divide_less_eq [of "numeral w", OF zero_less_numeral] |
1280 neg_divide_less_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1282 neg_divide_less_eq [of "- numeral w", OF neg_numeral_less_zero] for w |
1281 |
1283 |
1282 lemmas eq_divide_eq_numeral1 [simp] = |
1284 lemmas eq_divide_eq_numeral1 [simp,divide_const_simps] = |
1283 eq_divide_eq [of _ _ "numeral w"] |
1285 eq_divide_eq [of _ _ "numeral w"] |
1284 eq_divide_eq [of _ _ "- numeral w"] for w |
1286 eq_divide_eq [of _ _ "- numeral w"] for w |
1285 |
1287 |
1286 lemmas divide_eq_eq_numeral1 [simp] = |
1288 lemmas divide_eq_eq_numeral1 [simp,divide_const_simps] = |
1287 divide_eq_eq [of _ "numeral w"] |
1289 divide_eq_eq [of _ "numeral w"] |
1288 divide_eq_eq [of _ "- numeral w"] for w |
1290 divide_eq_eq [of _ "- numeral w"] for w |
1289 |
1291 |
1290 |
1292 |
1291 subsubsection\<open>Optional Simplification Rules Involving Constants\<close> |
1293 subsubsection\<open>Optional Simplification Rules Involving Constants\<close> |
1292 |
1294 |
1293 text\<open>Simplify quotients that are compared with a literal constant.\<close> |
1295 text\<open>Simplify quotients that are compared with a literal constant.\<close> |
1294 |
1296 |
1295 lemmas le_divide_eq_numeral = |
1297 lemmas le_divide_eq_numeral [divide_const_simps] = |
1296 le_divide_eq [of "numeral w"] |
1298 le_divide_eq [of "numeral w"] |
1297 le_divide_eq [of "- numeral w"] for w |
1299 le_divide_eq [of "- numeral w"] for w |
1298 |
1300 |
1299 lemmas divide_le_eq_numeral = |
1301 lemmas divide_le_eq_numeral [divide_const_simps] = |
1300 divide_le_eq [of _ _ "numeral w"] |
1302 divide_le_eq [of _ _ "numeral w"] |
1301 divide_le_eq [of _ _ "- numeral w"] for w |
1303 divide_le_eq [of _ _ "- numeral w"] for w |
1302 |
1304 |
1303 lemmas less_divide_eq_numeral = |
1305 lemmas less_divide_eq_numeral [divide_const_simps] = |
1304 less_divide_eq [of "numeral w"] |
1306 less_divide_eq [of "numeral w"] |
1305 less_divide_eq [of "- numeral w"] for w |
1307 less_divide_eq [of "- numeral w"] for w |
1306 |
1308 |
1307 lemmas divide_less_eq_numeral = |
1309 lemmas divide_less_eq_numeral [divide_const_simps] = |
1308 divide_less_eq [of _ _ "numeral w"] |
1310 divide_less_eq [of _ _ "numeral w"] |
1309 divide_less_eq [of _ _ "- numeral w"] for w |
1311 divide_less_eq [of _ _ "- numeral w"] for w |
1310 |
1312 |
1311 lemmas eq_divide_eq_numeral = |
1313 lemmas eq_divide_eq_numeral [divide_const_simps] = |
1312 eq_divide_eq [of "numeral w"] |
1314 eq_divide_eq [of "numeral w"] |
1313 eq_divide_eq [of "- numeral w"] for w |
1315 eq_divide_eq [of "- numeral w"] for w |
1314 |
1316 |
1315 lemmas divide_eq_eq_numeral = |
1317 lemmas divide_eq_eq_numeral [divide_const_simps] = |
1316 divide_eq_eq [of _ _ "numeral w"] |
1318 divide_eq_eq [of _ _ "numeral w"] |
1317 divide_eq_eq [of _ _ "- numeral w"] for w |
1319 divide_eq_eq [of _ _ "- numeral w"] for w |
1318 |
1320 |
1319 |
1321 |
1320 text\<open>Not good as automatic simprules because they cause case splits.\<close> |
1322 text\<open>Not good as automatic simprules because they cause case splits.\<close> |
1321 lemmas divide_const_simps = |
1323 lemmas [divide_const_simps] = le_divide_eq_1 divide_le_eq_1 less_divide_eq_1 divide_less_eq_1 |
1322 le_divide_eq_numeral divide_le_eq_numeral less_divide_eq_numeral |
|
1323 divide_less_eq_numeral eq_divide_eq_numeral divide_eq_eq_numeral |
|
1324 le_divide_eq_1 divide_le_eq_1 less_divide_eq_1 divide_less_eq_1 |
|
1325 |
1324 |
1326 |
1325 |
1327 subsection \<open>The divides relation\<close> |
1326 subsection \<open>The divides relation\<close> |
1328 |
1327 |
1329 lemma zdvd_antisym_nonneg: |
1328 lemma zdvd_antisym_nonneg: |