1314 "(k*m) dvd (k*n) = (k=0 | m dvd (n::int))" |
1314 "(k*m) dvd (k*n) = (k=0 | m dvd (n::int))" |
1315 by (auto simp: zdvd_zmult_mono dest: zdvd_mult_cancel) |
1315 by (auto simp: zdvd_zmult_mono dest: zdvd_mult_cancel) |
1316 |
1316 |
1317 |
1317 |
1318 theorem ex_nat: "(\<exists>x::nat. P x) = (\<exists>x::int. 0 <= x \<and> P (nat x))" |
1318 theorem ex_nat: "(\<exists>x::nat. P x) = (\<exists>x::int. 0 <= x \<and> P (nat x))" |
1319 apply (simp split add: split_nat) |
1319 apply (simp split add: split_nat) |
1320 apply (rule iffI) |
1320 apply (rule iffI) |
1321 apply (erule exE) |
1321 apply (erule exE) |
1322 apply (rule_tac x = "int x" in exI) |
1322 apply (rule_tac x = "int x" in exI) |
1323 apply simp |
1323 apply simp |
1324 apply (erule exE) |
1324 apply (erule exE) |
1325 apply (rule_tac x = "nat x" in exI) |
1325 apply (rule_tac x = "nat x" in exI) |
1326 apply (erule conjE) |
1326 apply (erule conjE) |
1327 apply (erule_tac x = "nat x" in allE) |
1327 apply (erule_tac x = "nat x" in allE) |
1328 apply simp |
1328 apply simp |
1329 done |
1329 done |
1330 |
1330 |
1331 theorem zdvd_int: "(x dvd y) = (int x dvd int y)" |
1331 theorem zdvd_int: "(x dvd y) = (int x dvd int y)" |
1332 apply (simp only: dvd_def ex_nat int_int_eq [symmetric] zmult_int [symmetric] |
1332 apply (simp only: dvd_def ex_nat int_int_eq [symmetric] zmult_int [symmetric] |
1333 nat_0_le cong add: conj_cong) |
1333 nat_0_le cong add: conj_cong) |
1334 apply (rule iffI) |
1334 apply (rule iffI) |
1335 apply iprover |
1335 apply iprover |
1336 apply (erule exE) |
1336 apply (erule exE) |
1337 apply (case_tac "x=0") |
1337 apply (case_tac "x=0") |
1338 apply (rule_tac x=0 in exI) |
1338 apply (rule_tac x=0 in exI) |
1339 apply simp |
1339 apply simp |
1340 apply (case_tac "0 \<le> k") |
1340 apply (case_tac "0 \<le> k") |
1341 apply iprover |
1341 apply iprover |
1342 apply (simp add: neq0_conv linorder_not_le) |
1342 apply (simp add: neq0_conv linorder_not_le) |
1343 apply (drule mult_strict_left_mono_neg [OF iffD2 [OF zero_less_int_conv]]) |
1343 apply (drule mult_strict_left_mono_neg [OF iffD2 [OF zero_less_int_conv]]) |
1344 apply assumption |
1344 apply assumption |
1345 apply (simp add: mult_ac) |
1345 apply (simp add: mult_ac) |
1346 done |
1346 done |
1347 |
1347 |
1348 lemma zdvd1_eq[simp]: "(x::int) dvd 1 = ( \<bar>x\<bar> = 1)" |
1348 lemma zdvd1_eq[simp]: "(x::int) dvd 1 = ( \<bar>x\<bar> = 1)" |
1349 proof |
1349 proof |
1350 assume d: "x dvd 1" hence "int (nat \<bar>x\<bar>) dvd int (nat 1)" by (simp add: zdvd_abs1) |
1350 assume d: "x dvd 1" hence "int (nat \<bar>x\<bar>) dvd int (nat 1)" by (simp add: zdvd_abs1) |
1351 hence "nat \<bar>x\<bar> dvd 1" by (simp add: zdvd_int) |
1351 hence "nat \<bar>x\<bar> dvd 1" by (simp add: zdvd_int) |