From 417a4ed168b8982f7f8db417e2deb23693beedc7 Mon Sep 17 00:00:00 2001 From: David Aspinall Date: Tue, 3 Aug 2010 12:48:09 +0000 Subject: Move distribution examples into subdir --- isar/ex/Sqrt.thy | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 isar/ex/Sqrt.thy (limited to 'isar/ex/Sqrt.thy') diff --git a/isar/ex/Sqrt.thy b/isar/ex/Sqrt.thy new file mode 100644 index 00000000..96164f90 --- /dev/null +++ b/isar/ex/Sqrt.thy @@ -0,0 +1,90 @@ +(* Title: HOL/ex/Sqrt.thy + Author: Markus Wenzel, TU Muenchen +*) + +header {* Square roots of primes are irrational *} + +theory Sqrt +imports Complex_Main "~~/src/HOL/Number_Theory/Primes" +begin + +text {* + The square root of any prime number (including @{text 2}) is + irrational. +*} + +theorem sqrt_prime_irrational: + assumes "prime (p::nat)" + shows "sqrt (real p) \ \" +proof + from `prime p` have p: "1 < p" by (simp add: prime_nat_def) + assume "sqrt (real p) \ \" + then obtain m n :: nat where + n: "n \ 0" and sqrt_rat: "\sqrt (real p)\ = real m / real n" + and gcd: "gcd m n = 1" by (rule Rats_abs_nat_div_natE) + have eq: "m\ = p * n\" + proof - + from n and sqrt_rat have "real m = \sqrt (real p)\ * real n" by simp + then have "real (m\) = (sqrt (real p))\ * real (n\)" + by (auto simp add: power2_eq_square) + also have "(sqrt (real p))\ = real p" by simp + also have "\ * real (n\) = real (p * n\)" by simp + finally show ?thesis .. + qed + have "p dvd m \ p dvd n" + proof + from eq have "p dvd m\" .. + with `prime p` pos2 show "p dvd m" by (rule prime_dvd_power_nat) + then obtain k where "m = p * k" .. + with eq have "p * n\ = p\ * k\" by (auto simp add: power2_eq_square mult_ac) + with p have "n\ = p * k\" by (simp add: power2_eq_square) + then have "p dvd n\" .. + with `prime p` pos2 show "p dvd n" by (rule prime_dvd_power_nat) + qed + then have "p dvd gcd m n" .. + with gcd have "p dvd 1" by simp + then have "p \ 1" by (simp add: dvd_imp_le) + with p show False by simp +qed + +corollary "sqrt (real (2::nat)) \ \" + by (rule sqrt_prime_irrational) (rule two_is_prime_nat) + + +subsection {* Variations *} + +text {* + Here is an alternative version of the main proof, using mostly + linear forward-reasoning. While this results in less top-down + structure, it is probably closer to proofs seen in mathematics. +*} + +theorem + assumes "prime (p::nat)" + shows "sqrt (real p) \ \" +proof + from `prime p` have p: "1 < p" by (simp add: prime_nat_def) + assume "sqrt (real p) \ \" + then obtain m n :: nat where + n: "n \ 0" and sqrt_rat: "\sqrt (real p)\ = real m / real n" + and gcd: "gcd m n = 1" by (rule Rats_abs_nat_div_natE) + from n and sqrt_rat have "real m = \sqrt (real p)\ * real n" by simp + then have "real (m\) = (sqrt (real p))\ * real (n\)" + by (auto simp add: power2_eq_square) + also have "(sqrt (real p))\ = real p" by simp + also have "\ * real (n\) = real (p * n\)" by simp + finally have eq: "m\ = p * n\" .. + then have "p dvd m\" .. + with `prime p` pos2 have dvd_m: "p dvd m" by (rule prime_dvd_power_nat) + then obtain k where "m = p * k" .. + with eq have "p * n\ = p\ * k\" by (auto simp add: power2_eq_square mult_ac) + with p have "n\ = p * k\" by (simp add: power2_eq_square) + then have "p dvd n\" .. + with `prime p` pos2 have "p dvd n" by (rule prime_dvd_power_nat) + with dvd_m have "p dvd gcd m n" by (rule gcd_greatest_nat) + with gcd have "p dvd 1" by simp + then have "p \ 1" by (simp add: dvd_imp_le) + with p show False by simp +qed + +end -- cgit v1.2.3