src/HOL/IntDiv.thy
changeset 25134 3d4953e88449
parent 25112 98824cc791c0
child 25571 c9e39eafc7a0
equal deleted inserted replaced
25133:b933700f0384 25134:3d4953e88449
  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)