@@ -79,7 +79,7 @@ lemma push {B : Fin 6 → ℕ} {i : Fin 6} (rB : Reachable B) (hi : i < 5) :
7979 Reachable (B - single i (B i) + single (i + 1 ) (2 * B i)) := by
8080 obtain hc | hc := (B i).eq_zero_or_pos
8181 · rwa [hc, mul_zero, single_zero, single_zero, add_zero, tsub_zero]
82- · convert (rB.move1 hi hc).push hi using 1
82+ · convert! (rB.move1 hi hc).push hi using 1
8383 ext k; simp only [add_apply, sub_apply]
8484 rcases eq_or_ne k i with rfl | hk
8585 · simp_rw [single_eq_same, tsub_self, single_succ]
@@ -92,29 +92,29 @@ termination_by B i
9292/-- `(0, 0, 5, 11, 0, 0)` is reachable. -/
9393lemma five_eleven : Reachable (single 2 5 + single 3 11 ) := by
9494 have R : Reachable (single 1 3 + single 2 1 + single 3 1 + single 4 1 + single 5 1 ) := by
95- convert base.push (show 0 < 5 by decide) using 1 ; decide
95+ convert! base.push (show 0 < 5 by decide) using 1 ; decide
9696 replace R : Reachable (single 2 7 + single 3 1 + single 4 1 + single 5 1 ) := by
97- convert R.push (show 1 < 5 by decide) using 1 ; decide
97+ convert! R.push (show 1 < 5 by decide) using 1 ; decide
9898 replace R : Reachable (single 2 7 + single 4 3 + single 5 1 ) := by
99- convert R.push (show 3 < 5 by decide) using 1 ; decide
99+ convert! R.push (show 3 < 5 by decide) using 1 ; decide
100100 replace R : Reachable (single 2 7 + single 5 7 ) := by
101- convert R.push (show 4 < 5 by decide) using 1 ; decide
101+ convert! R.push (show 4 < 5 by decide) using 1 ; decide
102102 replace R : Reachable (single 2 6 + single 3 2 + single 5 7 ) := by
103- convert R.move1 (show 2 < 5 by decide) (by decide) using 1 ; decide
103+ convert! R.move1 (show 2 < 5 by decide) (by decide) using 1 ; decide
104104 replace R : Reachable (single 2 6 + single 3 1 + single 4 2 + single 5 7 ) := by
105- convert R.move1 (show 3 < 5 by decide) (by decide) using 1 ; decide
105+ convert! R.move1 (show 3 < 5 by decide) (by decide) using 1 ; decide
106106 replace R : Reachable (single 2 6 + single 3 1 + single 5 11 ) := by
107- convert R.push (show 4 < 5 by decide) using 1 ; decide
107+ convert! R.push (show 4 < 5 by decide) using 1 ; decide
108108 replace R : Reachable (single 2 6 + single 4 11 ) := by
109- convert R.move2 (show 3 < 4 by decide) (by decide) using 1 ; decide
110- convert R.move2 (show 2 < 4 by decide) (by decide) using 1 ; decide
109+ convert! R.move2 (show 3 < 4 by decide) (by decide) using 1 ; decide
110+ convert! R.move2 (show 2 < 4 by decide) (by decide) using 1 ; decide
111111
112112/-- Decrement $B_i$ and double $B_{i+1}$, assuming $B_{i+2} = 0$, by doing `push, move2`. -/
113113lemma double {B : Fin 6 → ℕ} {i : Fin 6 }
114114 (rB : Reachable B) (hi : i < 4 ) (pB : 0 < B i) (zB : B (i + 2 ) = 0 ) :
115115 Reachable (B + single (i + 1 ) (B (i + 1 )) - single i 1 ) := by
116- convert (rB.push ( show i + 1 < 5 by grind)).move2 hi ( by
117- rw [add_apply, sub_apply, single_succ]; grind)
116+ convert!
117+ (rB.push ( show i + 1 < 5 by grind)).move2 hi ( by rw [add_apply, sub_apply, single_succ]; grind)
118118 ext k; simp only [comp_apply, add_apply, sub_apply]
119119 have (j : Fin 6 ) : j + 1 + 1 = j + 2 := by grind
120120 rcases eq_or_ne k i with rfl | hk
@@ -132,7 +132,7 @@ lemma doubles {B : Fin 6 → ℕ} {i : Fin 6} (rB : Reachable B) (hi : i < 4) (z
132132 Reachable (update (B - single i (B i)) (i + 1 ) (B (i + 1 ) * 2 ^ B i)) := by
133133 obtain hc | hc := (B i).eq_zero_or_pos
134134 · rwa [hc, single_zero, tsub_zero, pow_zero, mul_one, update_eq_self]
135- · convert (rB.double hi hc zB).doubles hi (by
135+ · convert! (rB.double hi hc zB).doubles hi (by
136136 rw [sub_apply, add_apply, single_eq_of_ne (by simp), zB, zero_add, zero_tsub]) using 1
137137 ext k
138138 simp_rw [sub_apply, add_apply, single_eq_same, single_succ, single_succ', add_zero, tsub_zero,
@@ -149,9 +149,9 @@ termination_by B i
149149lemma exp {B : Fin 6 → ℕ} {i : Fin 6 }
150150 (rB : Reachable B) (hi : i < 4 ) (pB : 0 < B i) (zB : B (i + 1 ) = 0 ) (zB' : B (i + 2 ) = 0 ) :
151151 Reachable (B - single i (B i) + single (i + 1 ) (2 ^ B i)) := by
152- convert (rB.move1 (show i < 5 by grind) pB).doubles hi (by
152+ convert! (rB.move1 (show i < 5 by grind) pB).doubles hi (by
153153 rw [add_apply, sub_apply, zB', single_eq_of_ne (by simp), tsub_zero,
154- single_eq_of_ne (by simp), zero_add]) using 1
154+ single_eq_of_ne (by simp), zero_add]) using 1
155155 simp_rw [add_apply, sub_apply, single_eq_same, single_succ, single_succ', zB, zero_tsub, zero_add,
156156 add_zero, ← pow_succ', Nat.sub_add_cancel pB]
157157 ext k; simp only [add_apply, sub_apply]
@@ -167,7 +167,7 @@ lemma exp_mid {k n : ℕ} (h : Reachable (single 2 (k + 1) + single 3 n)) (hn :
167167 Reachable (single 2 k + single 3 (2 ^ n)) := by
168168 have md := h.exp (show 3 < 4 by decide) (by simp [hn])
169169 (by simp [add_apply, single_eq_of_ne]) (by simp [add_apply, single_eq_of_ne])
170- convert md.move2 (show 2 < 4 by decide) (by
170+ convert! md.move2 (show 2 < 4 by decide) (by
171171 simp only [add_apply, sub_apply, single_eq_same]
172172 iterate 3 rw [single_eq_of_ne (by decide)]
173173 simp) using 1
@@ -192,7 +192,7 @@ lemma reduce {m n : ℕ} (h : Reachable (single 3 n)) (hmn : m ≤ n) : Reachabl
192192 | base => exact h
193193 | succ k _ ih =>
194194 apply ih
195- convert h.move2 (show 3 < 4 by decide) k.succ_pos
195+ convert! h.move2 (show 3 < 4 by decide) k.succ_pos
196196 ext i; simp only [sub_apply, comp_apply]
197197 rcases eq_or_ne i 3 with rfl | i3
198198 · rw [swap_apply_of_ne_of_ne (by decide) (by decide)]
@@ -231,7 +231,7 @@ theorem result : Reachable (single 5 (2010 ^ 2010 ^ 2010)) := by
231231 -- See https://github.com/leanprover/lean4/issues/11713
232232 set m : ℕ := 2010
233233 have hm : m = 2010 := by rfl
234- convert ((quarter_target hm).push (show 3 < 5 by decide)).push (show 4 < 5 by decide)
234+ convert! ((quarter_target hm).push (show 3 < 5 by decide)).push (show 4 < 5 by decide)
235235 simp only [single_eq_same, tsub_self, Fin.reduceAdd, zero_add, single_inj]
236236 rw [← mul_assoc, show 2 * 2 = 4 by rfl, mul_comm, Nat.div_mul_cancel]
237237 trans 2010 ^ 2
0 commit comments