@@ -110,61 +110,61 @@ lemma end_inevitable_n {a : ℕ+} {n : ℕ} {m : ℕ} {s : State n}
110110 | AliceTurn _ _ _ _ ih => exact .Step _ ih
111111
112112lemma lemma3 (N : ℕ) (b : Blackboard N)
113- (hd : ∑ i : Fin N, Nat.maxPowDiv 2 (b i) = 0 ) :
113+ (hd : ∑ i : Fin N, padicValNat 2 (b i) = 0 ) :
114114 ∀ i : Fin N, ¬ Even (b i).val := by
115115 intro i hei
116- have h1 : 0 < Nat.maxPowDiv 2 (b i).val := by
116+ have h1 : 0 < padicValNat 2 (b i).val := by
117117 have h2 : 2 ∣ (b i : ℕ) := even_iff_two_dvd.mp hei
118118 replace h2 : 2 ^1 ∣ (b i : ℕ) := h2
119- exact Nat.maxPowDiv.le_of_dvd one_lt_two (PNat.ne_zero (b i)) h2
119+ exact ( Nat.pow_dvd_iff_le_padicValNat ( by omega) (PNat.ne_zero (b i))).mp h2
120120 rw [Finset.sum_eq_zero_iff] at hd
121121 have h2 := hd i (Finset.mem_univ i)
122122 lia
123123
124124lemma lemma5 {a x : ℕ} (hx : 0 < x)
125- (hax : Nat.maxPowDiv 2 x < Nat.maxPowDiv 2 a) :
126- Nat.maxPowDiv 2 (x + a) < Nat.maxPowDiv 2 a := by
125+ (hax : padicValNat 2 x < padicValNat 2 a) :
126+ padicValNat 2 (x + a) < padicValNat 2 a := by
127127 by_contra! H
128- have h1 : 2 ^ (Nat.maxPowDiv 2 (x + a)) ∣ x + a := Nat.maxPowDiv.pow_dvd 2 (x + a)
129- have h2 : 2 ^ (Nat.maxPowDiv 2 a) ∣ a := Nat.maxPowDiv.pow_dvd 2 a
130- have h4 : 2 ^ (Nat.maxPowDiv 2 a) ∣ x + a :=
128+ have h1 : 2 ^ (padicValNat 2 (x + a)) ∣ x + a := pow_padicValNat_dvd
129+ have h2 : 2 ^ (padicValNat 2 a) ∣ a := pow_padicValNat_dvd
130+ have h4 : 2 ^ (padicValNat 2 a) ∣ x + a :=
131131 Nat.pow_dvd_of_le_of_pow_dvd H h1
132- have h5 : 2 ^ (Nat.maxPowDiv 2 a) ∣ x := (Nat.dvd_add_iff_left h2).mpr h4
133- have h6 := Nat.maxPowDiv.le_of_dvd one_lt_two (Nat.ne_zero_of_lt hx) h5
132+ have h5 : 2 ^ (padicValNat 2 a) ∣ x := (Nat.dvd_add_iff_left h2).mpr h4
133+ have h6 := ( Nat.pow_dvd_iff_le_padicValNat ( by omega) (Nat.ne_zero_of_lt hx)).mp h5
134134 lia
135135
136136lemma lemma5' {a x : ℕ} (hx : 0 < x)
137- (hax : Nat.maxPowDiv 2 x < Nat.maxPowDiv 2 a) :
138- Nat.maxPowDiv 2 (x + a) = Nat.maxPowDiv 2 x := by
139- have h1 : 2 ^ (Nat.maxPowDiv 2 (x + a)) ∣ x + a := Nat.maxPowDiv.pow_dvd 2 (x + a)
140- have h2 : 2 ^ (Nat.maxPowDiv 2 a) ∣ a := Nat.maxPowDiv.pow_dvd 2 a
141- have h4 : 2 ^ (Nat.maxPowDiv 2 x) ∣ x := Nat.maxPowDiv.pow_dvd 2 x
137+ (hax : padicValNat 2 x < padicValNat 2 a) :
138+ padicValNat 2 (x + a) = padicValNat 2 x := by
139+ have h1 : 2 ^ (padicValNat 2 (x + a)) ∣ x + a := pow_padicValNat_dvd
140+ have h2 : 2 ^ (padicValNat 2 a) ∣ a := pow_padicValNat_dvd
141+ have h4 : 2 ^ (padicValNat 2 x) ∣ x := pow_padicValNat_dvd
142142
143- obtain ⟨c, hc⟩ : ∃ c, (Nat.maxPowDiv 2 a) = (Nat.maxPowDiv 2 x) + 1 + c :=
143+ obtain ⟨c, hc⟩ : ∃ c, (padicValNat 2 a) = (padicValNat 2 x) + 1 + c :=
144144 Nat.exists_eq_add_of_le hax
145145
146146 obtain ⟨aa, haa⟩ := h2
147147 obtain ⟨xx, hxx⟩ := h4
148148 obtain ⟨xa, hxa⟩ := h1
149149 rw [hc, add_assoc, pow_add] at haa
150150
151- have h10 : x + a = 2 ^ Nat.maxPowDiv 2 x * (xx + 2 ^ (1 + c) * aa) := by
151+ have h10 : x + a = 2 ^ padicValNat 2 x * (xx + 2 ^ (1 + c) * aa) := by
152152 nth_rw 1 [hxx]
153153 nth_rw 1 [haa]
154154 rw [mul_assoc, ←mul_add]
155155
156- have h12 : 2 ^ Nat.maxPowDiv 2 x ∣ x + a := Dvd.intro _ h10.symm
157- replace h12 := Nat.maxPowDiv.le_of_dvd one_lt_two (by lia) h12
158- suffices H : Nat.maxPowDiv 2 (x + a) ≤ Nat.maxPowDiv 2 x from Nat.le_antisymm H h12
156+ have h12 : 2 ^ padicValNat 2 x ∣ x + a := Dvd.intro _ h10.symm
157+ replace h12 := ( Nat.pow_dvd_iff_le_padicValNat ( by omega) (by lia)).mp h12
158+ suffices H : padicValNat 2 (x + a) ≤ padicValNat 2 x from Nat.le_antisymm H h12
159159 by_contra! H
160160
161161 rw [h10] at H
162162
163163 have h16 : ¬ 2 ∣ xx := by
164164 rintro ⟨z, rfl⟩
165165 rw [←mul_assoc, ←pow_succ] at hxx
166- have h17 : 2 ^ (Nat.maxPowDiv 2 x + 1 ) ∣ x := Dvd.intro z hxx.symm
167- replace h17 := Nat.maxPowDiv.le_of_dvd one_lt_two (Nat.ne_zero_of_lt hx) h17
166+ have h17 : 2 ^ (padicValNat 2 x + 1 ) ∣ x := Dvd.intro z hxx.symm
167+ replace h17 := ( Nat.pow_dvd_iff_le_padicValNat ( by omega) (Nat.ne_zero_of_lt hx)).mp h17
168168 lia
169169
170170 have h15' : ¬ 2 ∣ xx + 2 ^ (1 + c) * aa := by
@@ -175,13 +175,13 @@ lemma lemma5' {a x : ℕ} (hx : 0 < x)
175175 have : 2 ∣ xx := (Nat.dvd_add_iff_left h19).mpr HH
176176 contradiction
177177
178- have h15 : Nat.maxPowDiv 2 (xx + 2 ^ (1 + c) * aa) = 0 := by
178+ have h15 : padicValNat 2 (xx + 2 ^ (1 + c) * aa) = 0 := by
179179 by_contra! HH
180- replace HH : 0 < Nat.maxPowDiv 2 (xx + 2 ^ (1 + c) * aa) := Nat.zero_lt_of_ne_zero HH
180+ replace HH : 0 < padicValNat 2 (xx + 2 ^ (1 + c) * aa) := Nat.zero_lt_of_ne_zero HH
181181 generalize hee : xx + 2 ^ (1 + c) * aa = ee
182182 rw [hee] at HH h15'
183- have h18 := Nat.maxPowDiv.pow_dvd 2 ee
184- generalize hee' : Nat.maxPowDiv 2 ee = ee'
183+ have h18 : 2 ^ padicValNat 2 ee ∣ ee := pow_padicValNat_dvd
184+ generalize hee' : padicValNat 2 ee = ee'
185185 rw [hee'] at h18 HH
186186 cases ee' with | zero => lia | succ ee' =>
187187 rw [pow_succ] at h18
@@ -194,15 +194,15 @@ lemma lemma5' {a x : ℕ} (hx : 0 < x)
194194 rw [hk]
195195 exact Nat.zero_lt_succ (2 * k)
196196
197- rw [Nat.maxPowDiv.base_pow_mul one_lt_two h13] at H
197+ rw [padicValNat_base_pow_mul one_lt_two h13.ne' ] at H
198198 rw [h15, zero_add] at H
199199 lia
200200
201201lemma alice_move_preserves_nu
202202 (a : ℕ+) (N : ℕ) (b0 : Blackboard N)
203- (hd : ∀ i : Fin N, Nat.maxPowDiv 2 (b0 i) < Nat.maxPowDiv 2 a)
203+ (hd : ∀ i : Fin N, padicValNat 2 (b0 i) < padicValNat 2 a)
204204 (s1 : State N) (hs1 : s1 ∈ valid_moves a N ⟨b0, .Alice⟩) :
205- ∀ i : Fin N, Nat.maxPowDiv 2 (s1.board i) < Nat.maxPowDiv 2 a := by
205+ ∀ i : Fin N, padicValNat 2 (s1.board i) < padicValNat 2 a := by
206206 intro i
207207 dsimp [valid_moves] at hs1
208208 obtain ⟨j, rfl⟩ := hs1
@@ -224,9 +224,9 @@ lemma alice_move_preserves_nu
224224
225225lemma alice_move_preserves_nu'
226226 (a : ℕ+) (N : ℕ) (b0 : Blackboard N)
227- (hd : ∀ i : Fin N, Nat.maxPowDiv 2 (b0 i) < Nat.maxPowDiv 2 a)
227+ (hd : ∀ i : Fin N, padicValNat 2 (b0 i) < padicValNat 2 a)
228228 (s1 : State N) (hs1 : s1 ∈ valid_moves a N ⟨b0, .Alice⟩) :
229- ∀ i, Nat.maxPowDiv 2 (s1.board i) = Nat.maxPowDiv 2 (b0 i) := by
229+ ∀ i, padicValNat 2 (s1.board i) = padicValNat 2 (b0 i) := by
230230 intro i
231231 dsimp [valid_moves] at hs1
232232 obtain ⟨j, rfl⟩ := hs1
@@ -254,15 +254,15 @@ lemma bob_moves_after_alice {a : ℕ+} {N : Nat} (b0 : Blackboard N)
254254 simp
255255
256256lemma lemma6 {x : ℕ} (hp : 0 < x) (hx : Even x)
257- : Nat.maxPowDiv x / 2 + 1 = Nat.maxPowDiv x := by
257+ : padicValNat 2 ( x / 2 ) + 1 = padicValNat 2 x := by
258258 sorry
259259
260260-- When N ≥ 2, if ν2(x) < ν2(a) for all x ∈ S, the game must terminate
261261-- in ∑_{x∈S} ν2(x) moves, no matter what either player does.
262262lemma lemma2' (a : ℕ+) (N : ℕ) (hN : 1 < N) (s0 : State N)
263- (hd : ∀ i : Fin N, Nat.maxPowDiv 2 (s0.board i) < Nat.maxPowDiv 2 a) :
264- EndInevitableIn a N (∑ i : Fin N, Nat.maxPowDiv 2 (s0.board i)) s0 := by
265- generalize hms : ∑ i : Fin N, Nat.maxPowDiv 2 (s0.board i) = ms
263+ (hd : ∀ i : Fin N, padicValNat 2 (s0.board i) < padicValNat 2 a) :
264+ EndInevitableIn a N (∑ i : Fin N, padicValNat 2 (s0.board i)) s0 := by
265+ generalize hms : ∑ i : Fin N, padicValNat 2 (s0.board i) = ms
266266 revert s0
267267 induction' ms with ms' ih
268268 · intro s0 hd hms
@@ -281,10 +281,10 @@ lemma lemma2' (a : ℕ+) (N : ℕ) (hN : 1 < N) (s0 : State N)
281281 apply EndInevitableIn.AliceTurn _ ⟨b0, .Alice⟩
282282 intro s hs
283283 have h2 : Even (a:ℕ) := by
284- have ha : 0 < Nat.maxPowDiv 2 ↑a := by
284+ have ha : 0 < padicValNat 2 ↑a := by
285285 have := hd ⟨0 , by lia⟩
286286 lia
287- have ha1 := Nat.maxPowDiv.pow_dvd 2 a
287+ have ha1 : 2 ^ padicValNat 2 (a : ℕ) ∣ (a : ℕ) := pow_padicValNat_dvd
288288 rw [even_iff_two_dvd]
289289 exact Nat.dvd_of_pow_dvd ha ha1
290290 apply EndInevitableIn.BaseCase
@@ -325,7 +325,7 @@ lemma lemma2' (a : ℕ+) (N : ℕ) (hN : 1 < N) (s0 : State N)
325325 intro s hs
326326 have h1 := alice_move_preserves_nu' a N b0 hd s hs
327327 dsimp at hms
328- have h2 : ∑ i : Fin N, Nat.maxPowDiv 2 ↑(b0 i) = ∑ i : Fin N, Nat.maxPowDiv 2 ↑(s.board i) := by
328+ have h2 : ∑ i : Fin N, padicValNat 2 ↑(b0 i) = ∑ i : Fin N, padicValNat 2 ↑(s.board i) := by
329329 congr
330330 ext i
331331 exact (h1 i).symm
@@ -346,7 +346,7 @@ lemma lemma2' (a : ℕ+) (N : ℕ) (hN : 1 < N) (s0 : State N)
346346-- When N ≥ 2, if ν2(x) < ν2(a) for all x ∈ S, the game must terminate no
347347-- matter what either player does.
348348lemma lemma2 (a : ℕ+) (N : ℕ) (hN : 1 < N) (s0 : State N)
349- (hd : ∀ i : Fin N, Nat.maxPowDiv 2 (s0.board i) < Nat.maxPowDiv 2 a) :
349+ (hd : ∀ i : Fin N, padicValNat 2 (s0.board i) < padicValNat 2 a) :
350350 EndInevitable a N s0 := by
351351 exact end_inevitable_n (lemma2' a N hN s0 hd)
352352
0 commit comments