255 apply clarsimp defer 1 |
255 apply clarsimp defer 1 |
256 apply (simp add: int.cgenideal_eq_genideal[symmetric] cgenideal_def) |
256 apply (simp add: int.cgenideal_eq_genideal[symmetric] cgenideal_def) |
257 apply (elim exE) |
257 apply (elim exE) |
258 proof - |
258 proof - |
259 fix a b x |
259 fix a b x |
260 |
260 have ppos: "0 <= p" |
261 from prime |
261 by (metis prime linear nat_0_iff zero_not_prime_nat) |
262 have ppos: "0 <= p" by (simp add: prime_def) |
|
263 have unnat: "!!x. nat p dvd nat (abs x) ==> p dvd x" |
262 have unnat: "!!x. nat p dvd nat (abs x) ==> p dvd x" |
264 proof - |
263 proof - |
265 fix x |
264 fix x |
266 assume "nat p dvd nat (abs x)" |
265 assume "nat p dvd nat (abs x)" |
267 hence "int (nat p) dvd x" by (simp add: int_dvd_iff[symmetric]) |
266 hence "int (nat p) dvd x" by (simp add: int_dvd_iff[symmetric]) |
268 thus "p dvd x" by (simp add: ppos) |
267 thus "p dvd x" by (simp add: ppos) |
269 qed |
268 qed |
270 |
|
271 |
|
272 assume "a * b = x * p" |
269 assume "a * b = x * p" |
273 hence "p dvd a * b" by simp |
270 hence "p dvd a * b" by simp |
274 hence "nat p dvd nat (abs (a * b))" using ppos by (simp add: nat_dvd_iff) |
271 hence "nat p dvd nat (abs (a * b))" using ppos by (simp add: nat_dvd_iff) |
275 hence "nat p dvd (nat (abs a) * nat (abs b))" by (simp add: nat_abs_mult_distrib) |
272 hence "nat p dvd (nat (abs a) * nat (abs b))" by (simp add: nat_abs_mult_distrib) |
276 hence "nat p dvd nat (abs a) | nat p dvd nat (abs b)" by (rule prime_dvd_mult[OF prime]) |
273 hence "nat p dvd nat (abs a) | nat p dvd nat (abs b)" |
|
274 by (metis prime prime_dvd_mult_eq_nat) |
277 hence "p dvd a | p dvd b" by (fast intro: unnat) |
275 hence "p dvd a | p dvd b" by (fast intro: unnat) |
278 thus "(EX x. a = x * p) | (EX x. b = x * p)" |
276 thus "(EX x. a = x * p) | (EX x. b = x * p)" |
279 proof |
277 proof |
280 assume "p dvd a" |
278 assume "p dvd a" |
281 hence "EX x. a = p * x" by (simp add: dvd_def) |
279 hence "EX x. a = p * x" by (simp add: dvd_def) |
282 from this obtain x |
280 then obtain x |
283 where "a = p * x" by fast |
281 where "a = p * x" by fast |
284 hence "a = x * p" by simp |
282 hence "a = x * p" by simp |
285 hence "EX x. a = x * p" by simp |
283 hence "EX x. a = x * p" by simp |
286 thus "(EX x. a = x * p) | (EX x. b = x * p)" .. |
284 thus "(EX x. a = x * p) | (EX x. b = x * p)" .. |
287 next |
285 next |
288 assume "p dvd b" |
286 assume "p dvd b" |
289 hence "EX x. b = p * x" by (simp add: dvd_def) |
287 hence "EX x. b = p * x" by (simp add: dvd_def) |
290 from this obtain x |
288 then obtain x |
291 where "b = p * x" by fast |
289 where "b = p * x" by fast |
292 hence "b = x * p" by simp |
290 hence "b = x * p" by simp |
293 hence "EX x. b = x * p" by simp |
291 hence "EX x. b = x * p" by simp |
294 thus "(EX x. a = x * p) | (EX x. b = x * p)" .. |
292 thus "(EX x. a = x * p) | (EX x. b = x * p)" .. |
295 qed |
293 qed |
296 next |
294 next |
297 assume "UNIV = {uu. EX x. uu = x * p}" |
295 assume "UNIV = {uu. EX x. uu = x * p}" |
298 from this obtain x |
296 then obtain x where "1 = x * p" by best |
299 where "1 = x * p" by best |
297 then have "p * x = 1" by (metis mult_commute) |
300 from this [symmetric] |
|
301 have "p * x = 1" by (subst mult_commute) |
|
302 hence "\<bar>p * x\<bar> = 1" by simp |
298 hence "\<bar>p * x\<bar> = 1" by simp |
303 hence "\<bar>p\<bar> = 1" by (rule abs_zmult_eq_1) |
299 hence "\<bar>p\<bar> = 1" by (rule abs_zmult_eq_1) |
304 from this and prime |
300 then show "False" |
305 show "False" by (simp add: prime_def) |
301 by (metis prime abs_of_pos one_not_prime_int prime_gt_0_int prime_int_def) |
306 qed |
302 qed |
307 |
303 |
308 |
304 |
309 subsection {* Ideals and Divisibility *} |
305 subsection {* Ideals and Divisibility *} |
310 |
306 |