@@ -28,7 +28,7 @@ namespace int
28
28
29
29
lemma sq_add_sq_of_two_mul_sq_add_sq {m x y : ℤ} (h : 2 * m = x^2 + y^2 ) :
30
30
m = ((x - y) / 2 ) ^ 2 + ((x + y) / 2 ) ^ 2 :=
31
- have even (x^2 + y^2 ), by simp [h.symm , even_mul],
31
+ have even (x^2 + y^2 ), by simp [←h , even_mul],
32
32
have hxaddy : even (x + y), by simpa [sq] with parity_simps,
33
33
have hxsuby : even (x - y), by simpa [sq] with parity_simps,
34
34
(mul_right_inj' (show (2 *2 : ℤ) ≠ 0 , from dec_trivial)).1 $
@@ -113,15 +113,16 @@ have hm : ∃ m < p, 0 < m ∧ ∃ a b c d : ℤ, a^2 + b^2 + c^2 + d^2 = m * p,
113
113
(λ hk0, by { rw [hk0, int.coe_nat_zero, zero_mul] at hk,
114
114
exact ne_of_gt (show a^2 + b^2 + 1 > 0 , from add_pos_of_nonneg_of_pos
115
115
(add_nonneg (sq_nonneg _) (sq_nonneg _)) zero_lt_one) hk.1 }),
116
- a, b, 1 , 0 , by simpa [sq ] using hk.1 ⟩,
116
+ a, b, 1 , 0 , by simpa only [zero_pow two_pos, one_pow, add_zero ] using hk.1 ⟩,
117
117
let m := nat.find hm in
118
118
let ⟨a, b, c, d, (habcd : a^2 + b^2 + c^2 + d^2 = m * p)⟩ := (nat.find_spec hm).snd.2 in
119
119
by haveI hm0 : ne_zero m := ne_zero.of_pos (nat.find_spec hm).snd.1 ; exact
120
120
have hmp : m < p, from (nat.find_spec hm).fst,
121
121
m.mod_two_eq_zero_or_one.elim
122
122
(λ hm2 : m % 2 = 0 ,
123
123
let ⟨k, hk⟩ := nat.dvd_iff_mod_eq_zero.2 hm2 in
124
- have hk0 : 0 < k, from nat.pos_of_ne_zero $ λ _, by { simp [*, lt_irrefl] at * },
124
+ have hk0 : 0 < k, from nat.pos_of_ne_zero $
125
+ by { rintro rfl, rw mul_zero at hk, exact ne_zero.ne m hk },
125
126
have hkm : k < m, { rw [hk, two_mul], exact (lt_add_iff_pos_left _).2 hk0 },
126
127
false.elim $ nat.find_min hm hkm ⟨lt_trans hkm hmp, hk0,
127
128
sum_four_squares_of_two_mul_sum_four_squares
@@ -134,7 +135,7 @@ m.mod_two_eq_zero_or_one.elim
134
135
y := (c : zmod m).val_min_abs, z := (d : zmod m).val_min_abs in
135
136
have hnat_abs : w^2 + x^2 + y^2 + z^2 =
136
137
(w.nat_abs^2 + x.nat_abs^2 + y.nat_abs ^2 + z.nat_abs ^ 2 : ℕ),
137
- by simp [sq] ,
138
+ by { push_cast, simp_rw sq_abs, } ,
138
139
have hwxyzlt : w^2 + x^2 + y^2 + z^2 < m^2 ,
139
140
from calc w^2 + x^2 + y^2 + z^2
140
141
= (w.nat_abs^2 + x.nat_abs^2 + y.nat_abs ^2 + z.nat_abs ^ 2 : ℕ) : hnat_abs
@@ -144,7 +145,8 @@ m.mod_two_eq_zero_or_one.elim
144
145
(nat.pow_le_pow_of_le_left (zmod.nat_abs_val_min_abs_le _) _))
145
146
(nat.pow_le_pow_of_le_left (zmod.nat_abs_val_min_abs_le _) _))
146
147
(nat.pow_le_pow_of_le_left (zmod.nat_abs_val_min_abs_le _) _)
147
- ... = 4 * (m / 2 : ℕ) ^ 2 : by simp [sq, bit0, bit1, mul_add, add_mul, add_assoc]
148
+ ... = 4 * (m / 2 : ℕ) ^ 2 : by simp only [bit0_mul, one_mul, two_smul,
149
+ nat.cast_add, nat.cast_pow, add_assoc]
148
150
... < 4 * (m / 2 : ℕ) ^ 2 + ((4 * (m / 2 ) : ℕ) * (m % 2 : ℕ) + (m % 2 : ℕ)^2 ) :
149
151
(lt_add_iff_pos_right _).2 (by { rw [hm2, int.coe_nat_one, one_pow, mul_one],
150
152
exact add_pos_of_nonneg_of_pos (int.coe_nat_nonneg _) zero_lt_one })
@@ -153,16 +155,16 @@ m.mod_two_eq_zero_or_one.elim
153
155
pow_add, add_comm, add_left_comm] },
154
156
have hwxyzabcd : ((w^2 + x^2 + y^2 + z^2 : ℤ) : zmod m) =
155
157
((a^2 + b^2 + c^2 + d^2 : ℤ) : zmod m),
156
- by simp [w, x, y, z, sq] ,
158
+ by push_cast ,
157
159
have hwxyz0 : ((w^2 + x^2 + y^2 + z^2 : ℤ) : zmod m) = 0 ,
158
160
by rw [hwxyzabcd, habcd, int.cast_mul, cast_coe_nat, zmod.nat_cast_self, zero_mul],
159
161
let ⟨n, hn⟩ := ((char_p.int_cast_eq_zero_iff _ m _).1 hwxyz0) in
160
162
have hn0 : 0 < n.nat_abs, from int.nat_abs_pos_of_ne_zero (λ hn0,
161
163
have hwxyz0 : (w.nat_abs^2 + x.nat_abs^2 + y.nat_abs^2 + z.nat_abs^2 : ℕ) = 0 ,
162
164
by { rw [← int.coe_nat_eq_zero, ← hnat_abs], rwa [hn0, mul_zero] at hn },
163
165
have habcd0 : (m : ℤ) ∣ a ∧ (m : ℤ) ∣ b ∧ (m : ℤ) ∣ c ∧ (m : ℤ) ∣ d,
164
- by simpa [add_eq_zero_iff' (sq_nonneg (_ : ℤ)) (sq_nonneg _) ,
165
- pow_two, w, x, y, z, ( char_p.int_cast_eq_zero_iff _ m _), and.assoc ] using hwxyz0,
166
+ by simpa only [add_eq_zero_iff, int.nat_abs_eq_zero, zmod.val_min_abs_eq_zero, and.assoc ,
167
+ pow_eq_zero_iff two_pos, char_p.int_cast_eq_zero_iff _ m _] using hwxyz0,
166
168
let ⟨ma, hma⟩ := habcd0.1 , ⟨mb, hmb⟩ := habcd0.2 .1 ,
167
169
⟨mc, hmc⟩ := habcd0.2 .2 .1 , ⟨md, hmd⟩ := habcd0.2 .2 .2 in
168
170
have hmdvdp : m ∣ p,
@@ -172,13 +174,14 @@ m.mod_two_eq_zero_or_one.elim
172
174
(hp.1 .eq_one_or_self_of_dvd _ hmdvdp).elim hm1
173
175
(λ hmeqp, by simpa [lt_irrefl, hmeqp] using hmp)),
174
176
have hawbxcydz : ((m : ℕ) : ℤ) ∣ a * w + b * x + c * y + d * z,
175
- from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { rw [← hwxyz0], simp, ring },
177
+ from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $
178
+ by { rw [← hwxyz0], simp_rw [sq], push_cast },
176
179
have haxbwczdy : ((m : ℕ) : ℤ) ∣ a * x - b * w - c * z + d * y,
177
- from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { simp [sub_eq_add_neg] , ring },
180
+ from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { push_cast , ring },
178
181
have haybzcwdx : ((m : ℕ) : ℤ) ∣ a * y + b * z - c * w - d * x,
179
- from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { simp [sub_eq_add_neg] , ring },
182
+ from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { push_cast , ring },
180
183
have hazbycxdw : ((m : ℕ) : ℤ) ∣ a * z - b * y + c * x - d * w,
181
- from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { simp [sub_eq_add_neg] , ring },
184
+ from (char_p.int_cast_eq_zero_iff (zmod m) m _).1 $ by { push_cast , ring },
182
185
let ⟨s, hs⟩ := hawbxcydz, ⟨t, ht⟩ := haxbwczdy, ⟨u, hu⟩ := haybzcwdx, ⟨v, hv⟩ := hazbycxdw in
183
186
have hn_nonneg : 0 ≤ n,
184
187
from nonneg_of_mul_nonneg_right
0 commit comments