Skip to content
Merged
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
6c01819
fix(ci): unbreak Agda type-check install + Justfile heal duplicate
claude Jun 5, 2026
7f94f89
fix(proofs): fix all remaining idris2 + Agda scope errors
claude Jun 5, 2026
0a190ba
fix(proofs): repair full proof corpus — Coq, Lean4, Agda, Idris2
claude Jun 5, 2026
757762d
ci(proofs): gate the dogfood proof corpus (Coq, Lean, Agda, Idris val…
claude Jun 5, 2026
d75d5bb
ci(proofs): ASCII-only comments in dogfood-proofs-ci
claude Jun 5, 2026
f1612ab
ci(proofs): bisect dogfood startup_failure — minimal skeleton
claude Jun 5, 2026
7f95385
ci(proofs): bisect — restore Coq job only
claude Jun 5, 2026
12321b3
ci(proofs): bisect — isolate taiki install-action step
claude Jun 5, 2026
eac87fc
ci(proofs): bisect — curl-install just instead of marketplace action
claude Jun 5, 2026
7c6a602
ci(proofs): restore full dogfood corpus CI without marketplace setup …
claude Jun 5, 2026
75ec354
ci(proofs): fetch Agda stdlib from GitHub (apt --fix-missing dropped it)
claude Jun 5, 2026
5710743
merge: bring loving-cannon up to origin/main (absorb merged #256-#274)
claude Jun 21, 2026
658751d
ci(proofs): gate Lean 4 verification corpus (verification/proofs/lean4)
claude Jun 21, 2026
318f4d9
ci(proofs): gate the Idris2 verification corpus (verification/proofs/…
claude Jun 21, 2026
ff98eb5
merge: sync loving-cannon with main (absorb #275 Lean gate squash)
claude Jun 21, 2026
d614b64
merge: sync loving-cannon with main (absorb #276 Idris2 gate squash)
claude Jun 21, 2026
3f52a53
ci(proofs): weekly cron gating the Isabelle + Mizar self-proof corpora
claude Jun 21, 2026
5fe25a8
ci(proofs): add path-filtered pull_request trigger to verification cron
claude Jun 21, 2026
a31b679
ci(proofs): discover Isabelle/Mizar download URLs at runtime
claude Jun 21, 2026
0f9bbb7
ci(proofs): fix GroupTheory import + Mizar two-stage discovery
claude Jun 21, 2026
f18545b
ci(proofs): gate base-HOL Isabelle only; fix Mizar binary PATH
claude Jun 21, 2026
884d96a
ci(proofs): make Mizar recipe diagnostic (dump .err + source per file)
claude Jun 21, 2026
0e1fc49
merge: sync loving-cannon with main (absorb #277 cron squash)
claude Jun 21, 2026
81e29ee
fix(proofs): repair Isabelle Nat/List corpus (rename + nat annotations)
claude Jun 21, 2026
7fca2d3
fix(proofs): annotate remaining polymorphic Isabelle nat/list lemmas
claude Jun 21, 2026
87454f0
merge: sync with main (absorb #278 squash)
claude Jun 21, 2026
91b3856
merge: sync with main (absorb #279 squash)
claude Jun 21, 2026
cabcf7d
fix(proofs): finish Isabelle base; descope Mizar; fix verif-idris perms
claude Jun 21, 2026
d30d4c7
fix(proofs): comprehensively annotate EchidnaNat lemmas :: nat
claude Jun 21, 2026
2f48df7
merge: sync with main (absorb #281 squash)
claude Jun 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 27 additions & 27 deletions proofs/isabelle/EchidnaNat.thy
Original file line number Diff line number Diff line change
Expand Up @@ -194,27 +194,27 @@ text \<open>
\<close>

lemma power_zero:
"n ^ 0 = 1"
"(n::nat) ^ 0 = 1"
by simp

lemma power_one:
"n ^ 1 = n"
"(n::nat) ^ 1 = n"
by simp

lemma power_add:
"n ^ (m + p) = n ^ m * n ^ p"
"(n::nat) ^ (m + p) = n ^ m * n ^ p"
by (simp add: power_add)

lemma power_mult:
"n ^ (m * p) = (n ^ m) ^ p"
"(n::nat) ^ (m * p) = (n ^ m) ^ p"
by (simp add: power_mult)

text \<open>
Explicit inductive proof for power addition law.
\<close>

lemma power_add_inductive:
shows "n ^ (m + p) = n ^ m * n ^ p"
shows "(n::nat) ^ (m + p) = n ^ m * n ^ p"
proof (induction m)
case 0
show ?case by simp
Expand All @@ -240,31 +240,31 @@ text \<open>
\<close>

lemma le_refl:
"n \<le> n"
"(n::nat) \<le> n"
by simp

lemma le_trans:
"m \<le> n \<Longrightarrow> n \<le> p \<Longrightarrow> m \<le> p"
"(m::nat) \<le> n \<Longrightarrow> n \<le> p \<Longrightarrow> m \<le> p"
by simp

lemma le_antisym:
"m \<le> n \<Longrightarrow> n \<le> m \<Longrightarrow> m = n"
"(m::nat) \<le> n \<Longrightarrow> n \<le> m \<Longrightarrow> m = n"
by simp

text \<open>
Strict ordering properties.
\<close>

lemma less_irrefl:
"\<not>(n < n)"
"\<not>((n::nat) < n)"
by simp

lemma less_trans:
"m < n \<Longrightarrow> n < p \<Longrightarrow> m < p"
"(m::nat) < n \<Longrightarrow> n < p \<Longrightarrow> m < p"
by simp

lemma less_imp_le:
"m < n \<Longrightarrow> m \<le> n"
"(m::nat) < n \<Longrightarrow> m \<le> n"
by simp

text \<open>
Expand All @@ -290,23 +290,23 @@ text \<open>
\<close>

lemma add_le_mono:
"m \<le> n \<Longrightarrow> m + p \<le> n + p"
"(m::nat) \<le> n \<Longrightarrow> m + p \<le> n + p"
by simp

lemma add_less_mono:
"m < n \<Longrightarrow> m + p < n + p"
"(m::nat) < n \<Longrightarrow> m + p < n + p"
by simp

text \<open>
Cancellation laws for addition.
\<close>

lemma add_left_cancel:
"p + m = p + n \<longleftrightarrow> m = n"
"(p::nat) + m = p + n \<longleftrightarrow> m = n"
by simp

lemma add_right_cancel:
"m + p = n + p \<longleftrightarrow> m = n"
"(m::nat) + p = n + p \<longleftrightarrow> m = n"
by simp

section \<open>Division and Modulo\<close>
Expand All @@ -316,27 +316,27 @@ text \<open>
\<close>

lemma div_mult_self:
"n > 0 \<Longrightarrow> (m * n) div n = m"
"(n::nat) > 0 \<Longrightarrow> (m * n) div n = m"
by simp

lemma mod_mult_self:
"n > 0 \<Longrightarrow> (m * n) mod n = 0"
"(n::nat) > 0 \<Longrightarrow> (m * n) mod n = 0"
by simp

lemma div_less:
"m < n \<Longrightarrow> n > 0 \<Longrightarrow> m div n = 0"
"(m::nat) < n \<Longrightarrow> n > 0 \<Longrightarrow> m div n = 0"
by simp

lemma mod_less:
"m < n \<Longrightarrow> n > 0 \<Longrightarrow> m mod n = m"
"(m::nat) < n \<Longrightarrow> n > 0 \<Longrightarrow> m mod n = m"
by simp

text \<open>
Division-modulo identity.
\<close>

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

section \<open>Even and Odd\<close>
Expand All @@ -346,31 +346,31 @@ text \<open>
\<close>

lemma even_zero:
"even 0"
"even (0::nat)"
by simp

lemma even_double:
"even (2 * n)"
"even (2 * (n::nat))"
by simp

lemma even_succ_succ:
"even n \<longleftrightarrow> even (Suc (Suc n))"
"even (n::nat) \<longleftrightarrow> even (Suc (Suc n))"
by simp

text \<open>
Sum of two even numbers is even.
\<close>

lemma even_add:
"even m \<Longrightarrow> even n \<Longrightarrow> even (m + n)"
"even (m::nat) \<Longrightarrow> even n \<Longrightarrow> even (m + n)"
by simp

text \<open>
Product involving an even number is even.
\<close>

lemma even_mult:
"even m \<or> even n \<Longrightarrow> even (m * n)"
"even (m::nat) \<or> even n \<Longrightarrow> even (m * n)"
by auto

section \<open>Strong Induction\<close>
Expand All @@ -382,8 +382,8 @@ text \<open>
\<close>

lemma strong_induction_example:
assumes "\<And>n. (\<forall>m. m < n \<longrightarrow> P m) \<Longrightarrow> P n"
shows "P n"
assumes "\<And>k::nat. (\<forall>m. m < k \<longrightarrow> P m) \<Longrightarrow> P k"
shows "P (n::nat)"
proof -
have "\<forall>m. m \<le> n \<longrightarrow> P m"
proof (induction n)
Expand Down
Loading