Skip to content

Commit ff435d0

Browse files
fix(proofs): comprehensively nat-annotate EchidnaNat to green the Isabelle base (#282)
## What Final pass to make the cron's **Isabelle base** job green (the prior PRs fixed errors incrementally, but Isabelle reports polymorphic-lemma failures in *batches*, so each round surfaced a new layer). This annotates **every** remaining polymorphic lemma in `EchidnaNat` `:: nat` in one go — `power_*`, `le_*`/`less_*`, `add_le_mono`/`add_less_mono`, the addition cancellation laws, `div_*`/`mod_*`, `even_*`, and `strong_induction_example`. `suc_*` stay as-is (`Suc` already forces nat). All proof bodies are unchanged. After this, all four base theories (Basic, EchidnaList, EchidnaNat, Propositional) should verify on Isabelle2025-2: every statement is now nat-typed, so the standard `by simp`/`by auto` proofs discharge, and the earlier genuine gaps (`factorial_monotone`, `list_all_filter`, `map_rev`) were already repaired in #281. ## Scope Per the agreed plan ("finish Isabelle base only"): GroupTheory + Mizar remain excluded/descoped and are tracked in **#280** for dedicated, locally-tested repair. This PR is EchidnaNat-only. ## Verification Isabelle is `403`-blocked in the dev sandbox, so this is verified by the cron's Isabelle job on GitHub runners (Isabelle2025-2). The comprehensive annotation preempts the batch-reveal cycle, so it should go green rather than surfacing another layer. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- _Generated by [Claude Code](https://claude.ai/code/session_01UAqDQaMwpUqWHUSZekGZWv)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6848193 commit ff435d0

1 file changed

Lines changed: 27 additions & 27 deletions

File tree

proofs/isabelle/EchidnaNat.thy

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -194,27 +194,27 @@ text \<open>
194194
\<close>
195195

196196
lemma power_zero:
197-
"n ^ 0 = 1"
197+
"(n::nat) ^ 0 = 1"
198198
by simp
199199

200200
lemma power_one:
201-
"n ^ 1 = n"
201+
"(n::nat) ^ 1 = n"
202202
by simp
203203

204204
lemma power_add:
205-
"n ^ (m + p) = n ^ m * n ^ p"
205+
"(n::nat) ^ (m + p) = n ^ m * n ^ p"
206206
by (simp add: power_add)
207207

208208
lemma power_mult:
209-
"n ^ (m * p) = (n ^ m) ^ p"
209+
"(n::nat) ^ (m * p) = (n ^ m) ^ p"
210210
by (simp add: power_mult)
211211

212212
text \<open>
213213
Explicit inductive proof for power addition law.
214214
\<close>
215215

216216
lemma power_add_inductive:
217-
shows "n ^ (m + p) = n ^ m * n ^ p"
217+
shows "(n::nat) ^ (m + p) = n ^ m * n ^ p"
218218
proof (induction m)
219219
case 0
220220
show ?case by simp
@@ -240,31 +240,31 @@ text \<open>
240240
\<close>
241241

242242
lemma le_refl:
243-
"n \<le> n"
243+
"(n::nat) \<le> n"
244244
by simp
245245

246246
lemma le_trans:
247-
"m \<le> n \<Longrightarrow> n \<le> p \<Longrightarrow> m \<le> p"
247+
"(m::nat) \<le> n \<Longrightarrow> n \<le> p \<Longrightarrow> m \<le> p"
248248
by simp
249249

250250
lemma le_antisym:
251-
"m \<le> n \<Longrightarrow> n \<le> m \<Longrightarrow> m = n"
251+
"(m::nat) \<le> n \<Longrightarrow> n \<le> m \<Longrightarrow> m = n"
252252
by simp
253253

254254
text \<open>
255255
Strict ordering properties.
256256
\<close>
257257

258258
lemma less_irrefl:
259-
"\<not>(n < n)"
259+
"\<not>((n::nat) < n)"
260260
by simp
261261

262262
lemma less_trans:
263-
"m < n \<Longrightarrow> n < p \<Longrightarrow> m < p"
263+
"(m::nat) < n \<Longrightarrow> n < p \<Longrightarrow> m < p"
264264
by simp
265265

266266
lemma less_imp_le:
267-
"m < n \<Longrightarrow> m \<le> n"
267+
"(m::nat) < n \<Longrightarrow> m \<le> n"
268268
by simp
269269

270270
text \<open>
@@ -290,23 +290,23 @@ text \<open>
290290
\<close>
291291

292292
lemma add_le_mono:
293-
"m \<le> n \<Longrightarrow> m + p \<le> n + p"
293+
"(m::nat) \<le> n \<Longrightarrow> m + p \<le> n + p"
294294
by simp
295295

296296
lemma add_less_mono:
297-
"m < n \<Longrightarrow> m + p < n + p"
297+
"(m::nat) < n \<Longrightarrow> m + p < n + p"
298298
by simp
299299

300300
text \<open>
301301
Cancellation laws for addition.
302302
\<close>
303303

304304
lemma add_left_cancel:
305-
"p + m = p + n \<longleftrightarrow> m = n"
305+
"(p::nat) + m = p + n \<longleftrightarrow> m = n"
306306
by simp
307307

308308
lemma add_right_cancel:
309-
"m + p = n + p \<longleftrightarrow> m = n"
309+
"(m::nat) + p = n + p \<longleftrightarrow> m = n"
310310
by simp
311311

312312
section \<open>Division and Modulo\<close>
@@ -316,27 +316,27 @@ text \<open>
316316
\<close>
317317

318318
lemma div_mult_self:
319-
"n > 0 \<Longrightarrow> (m * n) div n = m"
319+
"(n::nat) > 0 \<Longrightarrow> (m * n) div n = m"
320320
by simp
321321

322322
lemma mod_mult_self:
323-
"n > 0 \<Longrightarrow> (m * n) mod n = 0"
323+
"(n::nat) > 0 \<Longrightarrow> (m * n) mod n = 0"
324324
by simp
325325

326326
lemma div_less:
327-
"m < n \<Longrightarrow> n > 0 \<Longrightarrow> m div n = 0"
327+
"(m::nat) < n \<Longrightarrow> n > 0 \<Longrightarrow> m div n = 0"
328328
by simp
329329

330330
lemma mod_less:
331-
"m < n \<Longrightarrow> n > 0 \<Longrightarrow> m mod n = m"
331+
"(m::nat) < n \<Longrightarrow> n > 0 \<Longrightarrow> m mod n = m"
332332
by simp
333333

334334
text \<open>
335335
Division-modulo identity.
336336
\<close>
337337

338338
lemma div_mod_equality:
339-
"n > 0 \<Longrightarrow> (m div n) * n + m mod n = m"
339+
"(n::nat) > 0 \<Longrightarrow> (m div n) * n + m mod n = m"
340340
by simp
341341

342342
section \<open>Even and Odd\<close>
@@ -346,31 +346,31 @@ text \<open>
346346
\<close>
347347

348348
lemma even_zero:
349-
"even 0"
349+
"even (0::nat)"
350350
by simp
351351

352352
lemma even_double:
353-
"even (2 * n)"
353+
"even (2 * (n::nat))"
354354
by simp
355355

356356
lemma even_succ_succ:
357-
"even n \<longleftrightarrow> even (Suc (Suc n))"
357+
"even (n::nat) \<longleftrightarrow> even (Suc (Suc n))"
358358
by simp
359359

360360
text \<open>
361361
Sum of two even numbers is even.
362362
\<close>
363363

364364
lemma even_add:
365-
"even m \<Longrightarrow> even n \<Longrightarrow> even (m + n)"
365+
"even (m::nat) \<Longrightarrow> even n \<Longrightarrow> even (m + n)"
366366
by simp
367367

368368
text \<open>
369369
Product involving an even number is even.
370370
\<close>
371371

372372
lemma even_mult:
373-
"even m \<or> even n \<Longrightarrow> even (m * n)"
373+
"even (m::nat) \<or> even n \<Longrightarrow> even (m * n)"
374374
by auto
375375

376376
section \<open>Strong Induction\<close>
@@ -382,8 +382,8 @@ text \<open>
382382
\<close>
383383

384384
lemma strong_induction_example:
385-
assumes "\<And>n. (\<forall>m. m < n \<longrightarrow> P m) \<Longrightarrow> P n"
386-
shows "P n"
385+
assumes "\<And>k::nat. (\<forall>m. m < k \<longrightarrow> P m) \<Longrightarrow> P k"
386+
shows "P (n::nat)"
387387
proof -
388388
have "\<forall>m. m \<le> n \<longrightarrow> P m"
389389
proof (induction n)

0 commit comments

Comments
 (0)