| author | wenzelm | 
| Wed, 07 Sep 2011 18:01:01 +0200 | |
| changeset 44799 | 1fd0a1276a09 | 
| parent 44766 | d4d33a4d7548 | 
| child 49962 | a8cc904a6820 | 
| permissions | -rw-r--r-- | 
| 38159 | 1 | (* Title: HOL/Old_Number_Theory/EvenOdd.thy | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 2 | Authors: Jeremy Avigad, David Gray, and Adam Kramer | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 3 | *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 4 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 5 | header {*Parity: Even and Odd Integers*}
 | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 6 | |
| 27651 
16a26996c30e
moved op dvd to theory Ring_and_Field; generalized a couple of lemmas
 haftmann parents: 
26289diff
changeset | 7 | theory EvenOdd | 
| 
16a26996c30e
moved op dvd to theory Ring_and_Field; generalized a couple of lemmas
 haftmann parents: 
26289diff
changeset | 8 | imports Int2 | 
| 
16a26996c30e
moved op dvd to theory Ring_and_Field; generalized a couple of lemmas
 haftmann parents: 
26289diff
changeset | 9 | begin | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 10 | |
| 38159 | 11 | definition zOdd :: "int set" | 
| 12 |   where "zOdd = {x. \<exists>k. x = 2 * k + 1}"
 | |
| 21404 
eb85850d3eb7
more robust syntax for definition/abbreviation/notation;
 wenzelm parents: 
20369diff
changeset | 13 | |
| 38159 | 14 | definition zEven :: "int set" | 
| 15 |   where "zEven = {x. \<exists>k. x = 2 * k}"
 | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 16 | |
| 19670 | 17 | subsection {* Some useful properties about even and odd *}
 | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 18 | |
| 18369 | 19 | lemma zOddI [intro?]: "x = 2 * k + 1 \<Longrightarrow> x \<in> zOdd" | 
| 20 | and zOddE [elim?]: "x \<in> zOdd \<Longrightarrow> (!!k. x = 2 * k + 1 \<Longrightarrow> C) \<Longrightarrow> C" | |
| 21 | by (auto simp add: zOdd_def) | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 22 | |
| 18369 | 23 | lemma zEvenI [intro?]: "x = 2 * k \<Longrightarrow> x \<in> zEven" | 
| 24 | and zEvenE [elim?]: "x \<in> zEven \<Longrightarrow> (!!k. x = 2 * k \<Longrightarrow> C) \<Longrightarrow> C" | |
| 25 | by (auto simp add: zEven_def) | |
| 26 | ||
| 27 | lemma one_not_even: "~(1 \<in> zEven)" | |
| 28 | proof | |
| 29 | assume "1 \<in> zEven" | |
| 30 | then obtain k :: int where "1 = 2 * k" .. | |
| 31 | then show False by arith | |
| 32 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 33 | |
| 18369 | 34 | lemma even_odd_conj: "~(x \<in> zOdd & x \<in> zEven)" | 
| 35 | proof - | |
| 36 |   {
 | |
| 37 | fix a b | |
| 38 | assume "2 * (a::int) = 2 * (b::int) + 1" | |
| 39 | then have "2 * (a::int) - 2 * (b :: int) = 1" | |
| 40 | by arith | |
| 41 | then have "2 * (a - b) = 1" | |
| 44766 | 42 | by (auto simp add: left_diff_distrib) | 
| 18369 | 43 | moreover have "(2 * (a - b)):zEven" | 
| 44 | by (auto simp only: zEven_def) | |
| 45 | ultimately have False | |
| 46 | by (auto simp add: one_not_even) | |
| 47 | } | |
| 48 | then show ?thesis | |
| 49 | by (auto simp add: zOdd_def zEven_def) | |
| 50 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 51 | |
| 18369 | 52 | lemma even_odd_disj: "(x \<in> zOdd | x \<in> zEven)" | 
| 53 | by (simp add: zOdd_def zEven_def) arith | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 54 | |
| 18369 | 55 | lemma not_odd_impl_even: "~(x \<in> zOdd) ==> x \<in> zEven" | 
| 56 | using even_odd_disj by auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 57 | |
| 18369 | 58 | lemma odd_mult_odd_prop: "(x*y):zOdd ==> x \<in> zOdd" | 
| 59 | proof (rule classical) | |
| 60 | assume "\<not> ?thesis" | |
| 61 | then have "x \<in> zEven" by (rule not_odd_impl_even) | |
| 62 | then obtain a where a: "x = 2 * a" .. | |
| 63 | assume "x * y : zOdd" | |
| 64 | then obtain b where "x * y = 2 * b + 1" .. | |
| 65 | with a have "2 * a * y = 2 * b + 1" by simp | |
| 66 | then have "2 * a * y - 2 * b = 1" | |
| 67 | by arith | |
| 68 | then have "2 * (a * y - b) = 1" | |
| 44766 | 69 | by (auto simp add: left_diff_distrib) | 
| 18369 | 70 | moreover have "(2 * (a * y - b)):zEven" | 
| 71 | by (auto simp only: zEven_def) | |
| 72 | ultimately have False | |
| 73 | by (auto simp add: one_not_even) | |
| 74 | then show ?thesis .. | |
| 75 | qed | |
| 76 | ||
| 77 | lemma odd_minus_one_even: "x \<in> zOdd ==> (x - 1):zEven" | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 78 | by (auto simp add: zOdd_def zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 79 | |
| 18369 | 80 | lemma even_div_2_prop1: "x \<in> zEven ==> (x mod 2) = 0" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 81 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 82 | |
| 18369 | 83 | lemma even_div_2_prop2: "x \<in> zEven ==> (2 * (x div 2)) = x" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 84 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 85 | |
| 18369 | 86 | lemma even_plus_even: "[| x \<in> zEven; y \<in> zEven |] ==> x + y \<in> zEven" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 87 | apply (auto simp add: zEven_def) | 
| 44766 | 88 | apply (auto simp only: right_distrib [symmetric]) | 
| 18369 | 89 | done | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 90 | |
| 18369 | 91 | lemma even_times_either: "x \<in> zEven ==> x * y \<in> zEven" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 92 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 93 | |
| 18369 | 94 | lemma even_minus_even: "[| x \<in> zEven; y \<in> zEven |] ==> x - y \<in> zEven" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 95 | apply (auto simp add: zEven_def) | 
| 44766 | 96 | apply (auto simp only: right_diff_distrib [symmetric]) | 
| 18369 | 97 | done | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 98 | |
| 18369 | 99 | lemma odd_minus_odd: "[| x \<in> zOdd; y \<in> zOdd |] ==> x - y \<in> zEven" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 100 | apply (auto simp add: zOdd_def zEven_def) | 
| 44766 | 101 | apply (auto simp only: right_diff_distrib [symmetric]) | 
| 18369 | 102 | done | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 103 | |
| 18369 | 104 | lemma even_minus_odd: "[| x \<in> zEven; y \<in> zOdd |] ==> x - y \<in> zOdd" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 105 | apply (auto simp add: zOdd_def zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 106 | apply (rule_tac x = "k - ka - 1" in exI) | 
| 18369 | 107 | apply auto | 
| 108 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 109 | |
| 18369 | 110 | lemma odd_minus_even: "[| x \<in> zOdd; y \<in> zEven |] ==> x - y \<in> zOdd" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 111 | apply (auto simp add: zOdd_def zEven_def) | 
| 44766 | 112 | apply (auto simp only: right_diff_distrib [symmetric]) | 
| 18369 | 113 | done | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 114 | |
| 18369 | 115 | lemma odd_times_odd: "[| x \<in> zOdd; y \<in> zOdd |] ==> x * y \<in> zOdd" | 
| 44766 | 116 | apply (auto simp add: zOdd_def left_distrib right_distrib) | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 117 | apply (rule_tac x = "2 * ka * k + ka + k" in exI) | 
| 44766 | 118 | apply (auto simp add: left_distrib) | 
| 18369 | 119 | done | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 120 | |
| 18369 | 121 | lemma odd_iff_not_even: "(x \<in> zOdd) = (~ (x \<in> zEven))" | 
| 122 | using even_odd_conj even_odd_disj by auto | |
| 123 | ||
| 124 | lemma even_product: "x * y \<in> zEven ==> x \<in> zEven | y \<in> zEven" | |
| 125 | using odd_iff_not_even odd_times_odd by auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 126 | |
| 18369 | 127 | lemma even_diff: "x - y \<in> zEven = ((x \<in> zEven) = (y \<in> zEven))" | 
| 128 | proof | |
| 129 | assume xy: "x - y \<in> zEven" | |
| 130 |   {
 | |
| 131 | assume x: "x \<in> zEven" | |
| 132 | have "y \<in> zEven" | |
| 133 | proof (rule classical) | |
| 134 | assume "\<not> ?thesis" | |
| 135 | then have "y \<in> zOdd" | |
| 136 | by (simp add: odd_iff_not_even) | |
| 137 | with x have "x - y \<in> zOdd" | |
| 138 | by (simp add: even_minus_odd) | |
| 139 | with xy have False | |
| 140 | by (auto simp add: odd_iff_not_even) | |
| 141 | then show ?thesis .. | |
| 142 | qed | |
| 143 |   } moreover {
 | |
| 144 | assume y: "y \<in> zEven" | |
| 145 | have "x \<in> zEven" | |
| 146 | proof (rule classical) | |
| 147 | assume "\<not> ?thesis" | |
| 148 | then have "x \<in> zOdd" | |
| 149 | by (auto simp add: odd_iff_not_even) | |
| 150 | with y have "x - y \<in> zOdd" | |
| 151 | by (simp add: odd_minus_even) | |
| 152 | with xy have False | |
| 153 | by (auto simp add: odd_iff_not_even) | |
| 154 | then show ?thesis .. | |
| 155 | qed | |
| 156 | } | |
| 157 | ultimately show "(x \<in> zEven) = (y \<in> zEven)" | |
| 158 | by (auto simp add: odd_iff_not_even even_minus_even odd_minus_odd | |
| 159 | even_minus_odd odd_minus_even) | |
| 160 | next | |
| 161 | assume "(x \<in> zEven) = (y \<in> zEven)" | |
| 162 | then show "x - y \<in> zEven" | |
| 163 | by (auto simp add: odd_iff_not_even even_minus_even odd_minus_odd | |
| 164 | even_minus_odd odd_minus_even) | |
| 165 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 166 | |
| 18369 | 167 | lemma neg_one_even_power: "[| x \<in> zEven; 0 \<le> x |] ==> (-1::int)^(nat x) = 1" | 
| 168 | proof - | |
| 20369 | 169 | assume "x \<in> zEven" and "0 \<le> x" | 
| 170 | from `x \<in> zEven` obtain a where "x = 2 * a" .. | |
| 171 | with `0 \<le> x` have "0 \<le> a" by simp | |
| 172 | from `0 \<le> x` and `x = 2 * a` have "nat x = nat (2 * a)" | |
| 18369 | 173 | by simp | 
| 20369 | 174 | also from `x = 2 * a` have "nat (2 * a) = 2 * nat a" | 
| 18369 | 175 | by (simp add: nat_mult_distrib) | 
| 176 | finally have "(-1::int)^nat x = (-1)^(2 * nat a)" | |
| 177 | by simp | |
| 178 | also have "... = ((-1::int)^2)^ (nat a)" | |
| 179 | by (simp add: zpower_zpower [symmetric]) | |
| 180 | also have "(-1::int)^2 = 1" | |
| 181 | by simp | |
| 182 | finally show ?thesis | |
| 183 | by simp | |
| 184 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 185 | |
| 18369 | 186 | lemma neg_one_odd_power: "[| x \<in> zOdd; 0 \<le> x |] ==> (-1::int)^(nat x) = -1" | 
| 187 | proof - | |
| 20369 | 188 | assume "x \<in> zOdd" and "0 \<le> x" | 
| 189 | from `x \<in> zOdd` obtain a where "x = 2 * a + 1" .. | |
| 190 | with `0 \<le> x` have a: "0 \<le> a" by simp | |
| 191 | with `0 \<le> x` and `x = 2 * a + 1` have "nat x = nat (2 * a + 1)" | |
| 18369 | 192 | by simp | 
| 193 | also from a have "nat (2 * a + 1) = 2 * nat a + 1" | |
| 194 | by (auto simp add: nat_mult_distrib nat_add_distrib) | |
| 195 | finally have "(-1::int)^nat x = (-1)^(2 * nat a + 1)" | |
| 196 | by simp | |
| 197 | also have "... = ((-1::int)^2)^ (nat a) * (-1)^1" | |
| 44766 | 198 | by (auto simp add: power_mult power_add) | 
| 18369 | 199 | also have "(-1::int)^2 = 1" | 
| 200 | by simp | |
| 201 | finally show ?thesis | |
| 202 | by simp | |
| 203 | qed | |
| 204 | ||
| 205 | lemma neg_one_power_parity: "[| 0 \<le> x; 0 \<le> y; (x \<in> zEven) = (y \<in> zEven) |] ==> | |
| 20369 | 206 | (-1::int)^(nat x) = (-1::int)^(nat y)" | 
| 18369 | 207 | using even_odd_disj [of x] even_odd_disj [of y] | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 208 | by (auto simp add: neg_one_even_power neg_one_odd_power) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 209 | |
| 18369 | 210 | |
| 211 | lemma one_not_neg_one_mod_m: "2 < m ==> ~([1 = -1] (mod m))" | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 212 | by (auto simp add: zcong_def zdvd_not_zless) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 213 | |
| 18369 | 214 | lemma even_div_2_l: "[| y \<in> zEven; x < y |] ==> x div 2 < y div 2" | 
| 215 | proof - | |
| 20369 | 216 | assume "y \<in> zEven" and "x < y" | 
| 217 | from `y \<in> zEven` obtain k where k: "y = 2 * k" .. | |
| 218 | with `x < y` have "x < 2 * k" by simp | |
| 18369 | 219 | then have "x div 2 < k" by (auto simp add: div_prop1) | 
| 220 | also have "k = (2 * k) div 2" by simp | |
| 221 | finally have "x div 2 < 2 * k div 2" by simp | |
| 222 | with k show ?thesis by simp | |
| 223 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 224 | |
| 18369 | 225 | lemma even_sum_div_2: "[| x \<in> zEven; y \<in> zEven |] ==> (x + y) div 2 = x div 2 + y div 2" | 
| 27651 
16a26996c30e
moved op dvd to theory Ring_and_Field; generalized a couple of lemmas
 haftmann parents: 
26289diff
changeset | 226 | by (auto simp add: zEven_def) | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 227 | |
| 18369 | 228 | lemma even_prod_div_2: "[| x \<in> zEven |] ==> (x * y) div 2 = (x div 2) * y" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 229 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 230 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 231 | (* An odd prime is greater than 2 *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 232 | |
| 18369 | 233 | lemma zprime_zOdd_eq_grt_2: "zprime p ==> (p \<in> zOdd) = (2 < p)" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 234 | apply (auto simp add: zOdd_def zprime_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 235 | apply (drule_tac x = 2 in allE) | 
| 18369 | 236 | using odd_iff_not_even [of p] | 
| 237 | apply (auto simp add: zOdd_def zEven_def) | |
| 238 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 239 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 240 | (* Powers of -1 and parity *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 241 | |
| 18369 | 242 | lemma neg_one_special: "finite A ==> | 
| 243 | ((-1 :: int) ^ card A) * (-1 ^ card A) = 1" | |
| 22274 | 244 | by (induct set: finite) auto | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 245 | |
| 18369 | 246 | lemma neg_one_power: "(-1::int)^n = 1 | (-1::int)^n = -1" | 
| 247 | by (induct n) auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 248 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 249 | lemma neg_one_power_eq_mod_m: "[| 2 < m; [(-1::int)^j = (-1::int)^k] (mod m) |] | 
| 18369 | 250 | ==> ((-1::int)^j = (-1::int)^k)" | 
| 26289 | 251 | using neg_one_power [of j] and ListMem.insert neg_one_power [of k] | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 252 | by (auto simp add: one_not_neg_one_mod_m zcong_sym) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 253 | |
| 18369 | 254 | end |