Skip to content

Add Tier 3 weekly CI for upstream provers and corpus provisioning - #19

Merged
hyperpolymath merged 3 commits into
mainfrom
claude/fix-prover-wiring-epyIR
Apr 19, 2026
Merged

hyperpolymath merged 3 commits into
mainfrom
claude/fix-prover-wiring-epyIR

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

This PR introduces infrastructure for provisioning and testing heavier upstream theorem provers and verification tools in a weekly CI tier. It adds:

  1. Corpus provisioning script (scripts/provision_corpora.sh) — a non-interactive tool to clone/download 40+ upstream prover repositories and benchmarks into external_corpora/
  2. Extractor runner (scripts/extract_all.sh) — orchestrates all extract_*.jl scripts against provisioned corpora
  3. Tier 3 weekly CI matrix — tests 9 backends (Tamarin, ProVerif, Metamath, Twelf, OR-Tools, HOL4, ACL2, SCIP, Imandra) with per-backend provisioning
  4. Justfile recipes — convenient targets for the corpus pipeline: provision-corpora, extract-corpora, retrain, and corpus-refresh
  5. Training script environment overrides — ECHIDNA_MAX_PROOF_STATES, ECHIDNA_NUM_EPOCHS, ECHIDNA_NUM_NEGATIVES for flexible retraining

Key Changes

  • scripts/provision_corpora.sh (281 lines)

    • Catalogues 40+ upstream sources (git repos, tarballs, form-gated/proprietary)
    • Clones with --depth=1 --filter=blob:none for bandwidth efficiency (~4-8 GB total)
    • Idempotent (skips existing directories unless --force)
    • Retries once on network failure; continues on error so one offline mirror doesn't abort the batch
    • Supports --list, --status, --all, and selective provisioning by name
  • scripts/extract_all.sh (89 lines)

    • Runs every extract_*.jl script non-interactively
    • Collects failures and exits with count of failed extractors
    • Suitable for nightly cron workflows
  • .github/workflows/live-provers.yml — Tier 3 job

    • Replaced placeholder with a 9-job matrix (one per backend)
    • Each job provisions its backend via apt, upstream tarball, or defers to Containerfile
    • Runs cargo test --test live_prover_suite with continue-on-error: true so absences are logged as SKIP
    • Includes version probes in the matrix log for debugging
  • tests/live_prover_suite.rs

    • Added 9 new async tests for Tier 3 backends (Tamarin, ProVerif, Metamath, Twelf, OR-Tools, HOL4, ACL2, SCIP, Imandra)
    • Each test calls assert_version_reachable() with the expected CLI binary name
    • Tests SKIP gracefully if the binary is absent (via which probe in the suite)
  • src/julia/run_training.jl

    • Made max_proof_states configurable via ECHIDNA_MAX_PROOF_STATES env var (default: 200k on GPU, 50k on CPU; 0 = unlimited)
    • Made num_epochs configurable via ECHIDNA_NUM_EPOCHS (default: 30)
    • Made num_negatives configurable via ECHIDNA_NUM_NEGATIVES (default: 20)
    • Logs the active configuration at startup
  • Justfile

    • Added provision-corpora, corpora-status, extract-corpora, retrain, and corpus-refresh recipes
    • corpus-refresh chains the full pipeline: provision → extract → retrain

Implementation Details

  • Provisioning strategy: Heavy builds (HOL4, ACL2, SCIP) and proprietary tools (Imandra) are marked skip in the catalogue; the CI workflow defers them to Containerfile provisioning or notes them as unavailable.
  • Graceful degradation: Tests use `

https://claude.ai/code/session_01NFEuqk68SFBy49KRSSVL8N

claude added 3 commits April 19, 2026 22:30
.github/workflows/live-provers.yml
  Replace Tier-3 placeholder with a per-backend matrix.  Live-provisioned
  (apt / upstream tarball): tamarin, proverif, metamath, twelf, ortools.
  Deferred-to-Containerfile with explicit skip note: hol4, acl2, scip,
  imandra.  Each job probes the binary and runs the single matching case
  from tests/live_prover_suite.rs with continue-on-error while Wave-3
  wires up.

tests/live_prover_suite.rs
  Add #[tokio::test] entries for all nine Tier-3 backends and extend
  kind_label with their display names.  Tests SKIP when the binary is
  absent on PATH (existing `which` probe), so running locally or in PR
  CI costs nothing; only the weekly tier3 matrix exercises them.

src/julia/run_training.jl
  Drop the hardcoded max_proof_states=50_000 cap that made the expanded
  corpus pointless.  Default 200k on GPU / 50k on CPU, overridable via
  ECHIDNA_MAX_PROOF_STATES (0 = unlimited).  ECHIDNA_NUM_EPOCHS and
  ECHIDNA_NUM_NEGATIVES gain the same treatment.  Required before
  retraining on the 2026-04 corpus expansion.
scripts/provision_corpora.sh
  Single source of truth for every prover's upstream corpus mirror.  A
  catalogue entry per source (52 total: 45 git clones, 7 manual/gated)
  binds the external_corpora/<name>/ path the extractors expect to a
  concrete clone URL, replacing the comments-scattered-across-54-files
  pattern.  Idempotent, non-interactive, retries once on network
  failure, continues past a dead mirror so one 404 doesn't abort a
  40-source run.  --list, --status, --force, --all, and named-subset
  selection.  Meant for a nightly cron or a Justfile recipe.

scripts/extract_all.sh
  Composable companion.  Runs every scripts/extract_*.jl (or a named
  subset) under the src/julia Julia project and collects failures into
  a non-zero exit code.  Short-circuits gracefully when an extractor's
  upstream is absent (the extractors themselves already handle that).
  Together with provision_corpora.sh + run_training.jl this gives a
  three-step end-to-end retrain recipe: provision → extract → train.

Motivation: the existing expand_training_data.sh was interactive
(read -p) and only knew about three sources, so no CI job could grow
the corpus without human input.  Closing that gap unblocks the 100k
per-prover target.
Justfile
  Three new recipes that compose the scripts landed in 9df340c into an
  idiomatic end-to-end retrain flow:

    just provision-corpora [NAMES...]   # scripts/provision_corpora.sh
    just corpora-status                 # on-disk report
    just extract-corpora [NAMES...]     # scripts/extract_all.sh
    just retrain                        # src/julia/run_training.jl
    just corpus-refresh                 # all three, in order

  Each step is idempotent; re-running the pipeline only touches what
  has changed.  The retrain recipe honours the env-var knobs added in
  5611cb2 (ECHIDNA_MAX_PROOF_STATES, ECHIDNA_NUM_EPOCHS,
  ECHIDNA_NUM_NEGATIVES), so:

    ECHIDNA_MAX_PROOF_STATES=0 just corpus-refresh

  re-baselines MRR against the full expanded corpus on GPU hardware.
@hyperpolymath
hyperpolymath merged commit 1211f02 into main Apr 19, 2026
25 of 37 checks passed
@hyperpolymath
hyperpolymath deleted the claude/fix-prover-wiring-epyIR branch April 19, 2026 22:41
Repository owner deleted a comment from chatgpt-codex-connector Bot May 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants