| author | wenzelm | 
| Fri, 27 Jan 2006 19:03:19 +0100 | |
| changeset 18812 | a4554848b59e | 
| parent 18369 | 694ea14ab4f2 | 
| child 19670 | 2e4a143c73c5 | 
| permissions | -rw-r--r-- | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 1 | (* Title: HOL/Quadratic_Reciprocity/EvenOdd.thy | 
| 14981 | 2 | ID: $Id$ | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 3 | Authors: Jeremy Avigad, David Gray, and Adam Kramer | 
| 
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 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 6 | header {*Parity: Even and Odd Integers*}
 | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 7 | |
| 18369 | 8 | theory EvenOdd imports Int2 begin | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 9 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 10 | text{*Note.  This theory is being revised.  See the web page
 | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 11 | \url{http://www.andrew.cmu.edu/~avigad/isabelle}.*}
 | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 12 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 13 | constdefs | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 14 | zOdd :: "int set" | 
| 18369 | 15 |   "zOdd == {x. \<exists>k. x = 2 * k + 1}"
 | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 16 | zEven :: "int set" | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 17 |   "zEven == {x. \<exists>k. x = 2 * k}"
 | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 18 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 19 | (***********************************************************) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 20 | (* *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 21 | (* Some useful properties about even and odd *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 22 | (* *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 23 | (***********************************************************) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 24 | |
| 18369 | 25 | lemma zOddI [intro?]: "x = 2 * k + 1 \<Longrightarrow> x \<in> zOdd" | 
| 26 | and zOddE [elim?]: "x \<in> zOdd \<Longrightarrow> (!!k. x = 2 * k + 1 \<Longrightarrow> C) \<Longrightarrow> C" | |
| 27 | by (auto simp add: zOdd_def) | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 28 | |
| 18369 | 29 | lemma zEvenI [intro?]: "x = 2 * k \<Longrightarrow> x \<in> zEven" | 
| 30 | and zEvenE [elim?]: "x \<in> zEven \<Longrightarrow> (!!k. x = 2 * k \<Longrightarrow> C) \<Longrightarrow> C" | |
| 31 | by (auto simp add: zEven_def) | |
| 32 | ||
| 33 | lemma one_not_even: "~(1 \<in> zEven)" | |
| 34 | proof | |
| 35 | assume "1 \<in> zEven" | |
| 36 | then obtain k :: int where "1 = 2 * k" .. | |
| 37 | then show False by arith | |
| 38 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 39 | |
| 18369 | 40 | lemma even_odd_conj: "~(x \<in> zOdd & x \<in> zEven)" | 
| 41 | proof - | |
| 42 |   {
 | |
| 43 | fix a b | |
| 44 | assume "2 * (a::int) = 2 * (b::int) + 1" | |
| 45 | then have "2 * (a::int) - 2 * (b :: int) = 1" | |
| 46 | by arith | |
| 47 | then have "2 * (a - b) = 1" | |
| 48 | by (auto simp add: zdiff_zmult_distrib) | |
| 49 | moreover have "(2 * (a - b)):zEven" | |
| 50 | by (auto simp only: zEven_def) | |
| 51 | ultimately have False | |
| 52 | by (auto simp add: one_not_even) | |
| 53 | } | |
| 54 | then show ?thesis | |
| 55 | by (auto simp add: zOdd_def zEven_def) | |
| 56 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 57 | |
| 18369 | 58 | lemma even_odd_disj: "(x \<in> zOdd | x \<in> zEven)" | 
| 59 | 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 | 60 | |
| 18369 | 61 | lemma not_odd_impl_even: "~(x \<in> zOdd) ==> x \<in> zEven" | 
| 62 | using even_odd_disj by auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 63 | |
| 18369 | 64 | lemma odd_mult_odd_prop: "(x*y):zOdd ==> x \<in> zOdd" | 
| 65 | proof (rule classical) | |
| 66 | assume "\<not> ?thesis" | |
| 67 | then have "x \<in> zEven" by (rule not_odd_impl_even) | |
| 68 | then obtain a where a: "x = 2 * a" .. | |
| 69 | assume "x * y : zOdd" | |
| 70 | then obtain b where "x * y = 2 * b + 1" .. | |
| 71 | with a have "2 * a * y = 2 * b + 1" by simp | |
| 72 | then have "2 * a * y - 2 * b = 1" | |
| 73 | by arith | |
| 74 | then have "2 * (a * y - b) = 1" | |
| 75 | by (auto simp add: zdiff_zmult_distrib) | |
| 76 | moreover have "(2 * (a * y - b)):zEven" | |
| 77 | by (auto simp only: zEven_def) | |
| 78 | ultimately have False | |
| 79 | by (auto simp add: one_not_even) | |
| 80 | then show ?thesis .. | |
| 81 | qed | |
| 82 | ||
| 83 | 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 | 84 | by (auto simp add: zOdd_def zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 85 | |
| 18369 | 86 | 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 | 87 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 88 | |
| 18369 | 89 | 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 | 90 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 91 | |
| 18369 | 92 | 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 | 93 | apply (auto simp add: zEven_def) | 
| 18369 | 94 | apply (auto simp only: zadd_zmult_distrib2 [symmetric]) | 
| 95 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 96 | |
| 18369 | 97 | 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 | 98 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 99 | |
| 18369 | 100 | 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 | 101 | apply (auto simp add: zEven_def) | 
| 18369 | 102 | apply (auto simp only: zdiff_zmult_distrib2 [symmetric]) | 
| 103 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 104 | |
| 18369 | 105 | 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 | 106 | apply (auto simp add: zOdd_def zEven_def) | 
| 18369 | 107 | apply (auto simp only: zdiff_zmult_distrib2 [symmetric]) | 
| 108 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 109 | |
| 18369 | 110 | 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 | 111 | apply (auto simp add: zOdd_def zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 112 | apply (rule_tac x = "k - ka - 1" in exI) | 
| 18369 | 113 | apply auto | 
| 114 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 115 | |
| 18369 | 116 | 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 | 117 | apply (auto simp add: zOdd_def zEven_def) | 
| 18369 | 118 | apply (auto simp only: zdiff_zmult_distrib2 [symmetric]) | 
| 119 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 120 | |
| 18369 | 121 | lemma odd_times_odd: "[| x \<in> zOdd; y \<in> zOdd |] ==> x * y \<in> zOdd" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 122 | apply (auto simp add: zOdd_def zadd_zmult_distrib zadd_zmult_distrib2) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 123 | apply (rule_tac x = "2 * ka * k + ka + k" in exI) | 
| 18369 | 124 | apply (auto simp add: zadd_zmult_distrib) | 
| 125 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 126 | |
| 18369 | 127 | lemma odd_iff_not_even: "(x \<in> zOdd) = (~ (x \<in> zEven))" | 
| 128 | using even_odd_conj even_odd_disj by auto | |
| 129 | ||
| 130 | lemma even_product: "x * y \<in> zEven ==> x \<in> zEven | y \<in> zEven" | |
| 131 | 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 | 132 | |
| 18369 | 133 | lemma even_diff: "x - y \<in> zEven = ((x \<in> zEven) = (y \<in> zEven))" | 
| 134 | proof | |
| 135 | assume xy: "x - y \<in> zEven" | |
| 136 |   {
 | |
| 137 | assume x: "x \<in> zEven" | |
| 138 | have "y \<in> zEven" | |
| 139 | proof (rule classical) | |
| 140 | assume "\<not> ?thesis" | |
| 141 | then have "y \<in> zOdd" | |
| 142 | by (simp add: odd_iff_not_even) | |
| 143 | with x have "x - y \<in> zOdd" | |
| 144 | by (simp add: even_minus_odd) | |
| 145 | with xy have False | |
| 146 | by (auto simp add: odd_iff_not_even) | |
| 147 | then show ?thesis .. | |
| 148 | qed | |
| 149 |   } moreover {
 | |
| 150 | assume y: "y \<in> zEven" | |
| 151 | have "x \<in> zEven" | |
| 152 | proof (rule classical) | |
| 153 | assume "\<not> ?thesis" | |
| 154 | then have "x \<in> zOdd" | |
| 155 | by (auto simp add: odd_iff_not_even) | |
| 156 | with y have "x - y \<in> zOdd" | |
| 157 | by (simp add: odd_minus_even) | |
| 158 | with xy have False | |
| 159 | by (auto simp add: odd_iff_not_even) | |
| 160 | then show ?thesis .. | |
| 161 | qed | |
| 162 | } | |
| 163 | ultimately show "(x \<in> zEven) = (y \<in> zEven)" | |
| 164 | by (auto simp add: odd_iff_not_even even_minus_even odd_minus_odd | |
| 165 | even_minus_odd odd_minus_even) | |
| 166 | next | |
| 167 | assume "(x \<in> zEven) = (y \<in> zEven)" | |
| 168 | then show "x - y \<in> zEven" | |
| 169 | by (auto simp add: odd_iff_not_even even_minus_even odd_minus_odd | |
| 170 | even_minus_odd odd_minus_even) | |
| 171 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 172 | |
| 18369 | 173 | lemma neg_one_even_power: "[| x \<in> zEven; 0 \<le> x |] ==> (-1::int)^(nat x) = 1" | 
| 174 | proof - | |
| 175 | assume 1: "x \<in> zEven" and 2: "0 \<le> x" | |
| 176 | from 1 obtain a where 3: "x = 2 * a" .. | |
| 177 | with 2 have "0 \<le> a" by simp | |
| 178 | from 2 3 have "nat x = nat (2 * a)" | |
| 179 | by simp | |
| 180 | also from 3 have "nat (2 * a) = 2 * nat a" | |
| 181 | by (simp add: nat_mult_distrib) | |
| 182 | finally have "(-1::int)^nat x = (-1)^(2 * nat a)" | |
| 183 | by simp | |
| 184 | also have "... = ((-1::int)^2)^ (nat a)" | |
| 185 | by (simp add: zpower_zpower [symmetric]) | |
| 186 | also have "(-1::int)^2 = 1" | |
| 187 | by simp | |
| 188 | finally show ?thesis | |
| 189 | by simp | |
| 190 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 191 | |
| 18369 | 192 | lemma neg_one_odd_power: "[| x \<in> zOdd; 0 \<le> x |] ==> (-1::int)^(nat x) = -1" | 
| 193 | proof - | |
| 194 | assume 1: "x \<in> zOdd" and 2: "0 \<le> x" | |
| 195 | from 1 obtain a where 3: "x = 2 * a + 1" .. | |
| 196 | with 2 have a: "0 \<le> a" by simp | |
| 197 | with 2 3 have "nat x = nat (2 * a + 1)" | |
| 198 | by simp | |
| 199 | also from a have "nat (2 * a + 1) = 2 * nat a + 1" | |
| 200 | by (auto simp add: nat_mult_distrib nat_add_distrib) | |
| 201 | finally have "(-1::int)^nat x = (-1)^(2 * nat a + 1)" | |
| 202 | by simp | |
| 203 | also have "... = ((-1::int)^2)^ (nat a) * (-1)^1" | |
| 204 | by (auto simp add: zpower_zpower [symmetric] zpower_zadd_distrib) | |
| 205 | also have "(-1::int)^2 = 1" | |
| 206 | by simp | |
| 207 | finally show ?thesis | |
| 208 | by simp | |
| 209 | qed | |
| 210 | ||
| 211 | lemma neg_one_power_parity: "[| 0 \<le> x; 0 \<le> y; (x \<in> zEven) = (y \<in> zEven) |] ==> | |
| 212 | (-1::int)^(nat x) = (-1::int)^(nat y)" | |
| 213 | 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 | 214 | 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 | 215 | |
| 18369 | 216 | |
| 217 | 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 | 218 | 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 | 219 | |
| 18369 | 220 | lemma even_div_2_l: "[| y \<in> zEven; x < y |] ==> x div 2 < y div 2" | 
| 221 | proof - | |
| 222 | assume 1: "y \<in> zEven" and 2: "x < y" | |
| 223 | from 1 obtain k where k: "y = 2 * k" .. | |
| 224 | with 2 have "x < 2 * k" by simp | |
| 225 | then have "x div 2 < k" by (auto simp add: div_prop1) | |
| 226 | also have "k = (2 * k) div 2" by simp | |
| 227 | finally have "x div 2 < 2 * k div 2" by simp | |
| 228 | with k show ?thesis by simp | |
| 229 | qed | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 230 | |
| 18369 | 231 | lemma even_sum_div_2: "[| x \<in> zEven; y \<in> zEven |] ==> (x + y) div 2 = x div 2 + y div 2" | 
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 232 | by (auto simp add: zEven_def, auto simp add: zdiv_zadd1_eq) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 233 | |
| 18369 | 234 | 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 | 235 | by (auto simp add: zEven_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 236 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 237 | (* An odd prime is greater than 2 *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 238 | |
| 18369 | 239 | 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 | 240 | apply (auto simp add: zOdd_def zprime_def) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 241 | apply (drule_tac x = 2 in allE) | 
| 18369 | 242 | using odd_iff_not_even [of p] | 
| 243 | apply (auto simp add: zOdd_def zEven_def) | |
| 244 | done | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 245 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 246 | (* Powers of -1 and parity *) | 
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 247 | |
| 18369 | 248 | lemma neg_one_special: "finite A ==> | 
| 249 | ((-1 :: int) ^ card A) * (-1 ^ card A) = 1" | |
| 250 | by (induct set: Finites) auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 251 | |
| 18369 | 252 | lemma neg_one_power: "(-1::int)^n = 1 | (-1::int)^n = -1" | 
| 253 | by (induct n) auto | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 254 | |
| 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 255 | lemma neg_one_power_eq_mod_m: "[| 2 < m; [(-1::int)^j = (-1::int)^k] (mod m) |] | 
| 18369 | 256 | ==> ((-1::int)^j = (-1::int)^k)" | 
| 257 | using neg_one_power [of j] and insert neg_one_power [of k] | |
| 13871 
26e5f5e624f6
Gauss's law of quadratic reciprocity by Avigad, Gray and Kramer
 paulson parents: diff
changeset | 258 | 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 | 259 | |
| 18369 | 260 | end |