Skip to content

Commit 9a4aeeb

Browse files
hyperpolymathclaude
andcommitted
feat(ci): L3 Wave-2 — wire idris2/isabelle/dafny/fstar/tlaps + fstar+tlaps tests
Tier-2 (nightly) live-prover CI now has real provisioning, not TODO placeholders, for every backend except hol-light (which defers to Wave-3 container provisioning — no prebuilt binary, opam build is ~20 min and pulls camlp5). - idris2: bootstrap from source tarball against Chez Scheme. - isabelle: Isabelle2024 tarball, symlink /usr/local/bin/isabelle. - dafny: dotnet tool install --global Dafny (ubuntu-latest has sdk-8). - fstar: GitHub release tarball; binary is fstar.exe even on Linux. - tlaps: self-extracting installer from tlapm releases; binary is tlapm. - hol-light: deferred with explicit exit 0 + comment. Also adds live_fstar_version and live_tlaps_version to the Rust test suite (matches provers/mod.rs executable names: fstar.exe, tlapm) and fills in the missing library_paths field on ProverConfig that had made the test file fail to compile. Local verification: `cargo test --test live_prover_suite --features live-provers` runs all 18 tests; 13 real binaries (Z3, CVC5, EProver, Alt-Ergo, Why3, Vampire, Dafny, Isabelle, Idris2, F*, Coq, Agda, Lean4) return real versions; 5 auto-skip (GLPK/SPASS/MiniZinc/TLAPS/Chuffed not on this host). No mock tests were modified. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4ab4ea9 commit 9a4aeeb

2 files changed

Lines changed: 81 additions & 11 deletions

File tree

.github/workflows/live-provers.yml

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -155,17 +155,71 @@ jobs:
155155
set -euo pipefail
156156
sudo apt-get update
157157
case "${{ matrix.backend }}" in
158-
coq) sudo apt-get install -y coq ;;
159-
agda) sudo apt-get install -y agda ;;
160-
idris2) echo "idris2 Wave-2 TODO: install via upstream installer or flake" ;;
161-
lean4) curl -sSL https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y --default-toolchain leanprover/lean4:stable
162-
echo "$HOME/.elan/bin" >> "$GITHUB_PATH" ;;
163-
isabelle) echo "isabelle Wave-2 TODO: install Isabelle2024+ tarball" ;;
164-
why3) sudo apt-get install -y why3 ;;
165-
dafny) echo "dafny Wave-2 TODO: install via dotnet" ;;
166-
fstar) echo "fstar Wave-2 TODO" ;;
167-
hol-light) echo "hol-light Wave-2 TODO" ;;
168-
tlaps) echo "tlaps Wave-2 TODO" ;;
158+
coq)
159+
sudo apt-get install -y coq
160+
;;
161+
agda)
162+
sudo apt-get install -y agda
163+
;;
164+
idris2)
165+
# Idris2 has no apt package; build from the self-hosting tarball.
166+
# Chez Scheme is the recommended backend.
167+
sudo apt-get install -y chezscheme make
168+
curl -fsSL -o /tmp/idris2.tar.gz https://github.com/idris-lang/Idris2/releases/latest/download/idris2-src-latest.tgz || \
169+
curl -fsSL -o /tmp/idris2.tar.gz https://www.idris-lang.org/download/idris2-0.7.0.tgz
170+
mkdir -p /tmp/idris2-src
171+
tar xzf /tmp/idris2.tar.gz -C /tmp/idris2-src --strip-components=1
172+
(cd /tmp/idris2-src && make bootstrap SCHEME=scheme && sudo make install PREFIX=/usr/local)
173+
;;
174+
lean4)
175+
curl -sSL https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y --default-toolchain leanprover/lean4:stable
176+
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
177+
;;
178+
isabelle)
179+
# Isabelle2024 tarball (~500MB); keep on nightly only.
180+
curl -fsSL -o /tmp/isabelle.tar.gz https://isabelle.in.tum.de/dist/Isabelle2024_linux.tar.gz
181+
sudo mkdir -p /opt
182+
sudo tar xzf /tmp/isabelle.tar.gz -C /opt
183+
sudo ln -sf /opt/Isabelle2024/bin/isabelle /usr/local/bin/isabelle
184+
;;
185+
why3)
186+
sudo apt-get install -y why3
187+
;;
188+
dafny)
189+
# Dafny 4.x is distributed as a standalone .NET global tool.
190+
# ubuntu-latest ships dotnet-sdk 8 in setup images; install via apt if absent.
191+
command -v dotnet >/dev/null 2>&1 || sudo apt-get install -y dotnet-sdk-8.0
192+
dotnet tool install --global Dafny
193+
echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH"
194+
;;
195+
fstar)
196+
# F* ships prebuilt Linux binaries; binary is `fstar.exe` even on Linux.
197+
curl -fsSL -o /tmp/fstar.tar.gz https://github.com/FStarLang/FStar/releases/latest/download/fstar-linux_x86_64.tar.gz
198+
sudo mkdir -p /opt/fstar
199+
sudo tar xzf /tmp/fstar.tar.gz -C /opt/fstar --strip-components=1
200+
sudo ln -sf /opt/fstar/bin/fstar.exe /usr/local/bin/fstar.exe
201+
;;
202+
hol-light)
203+
# No prebuilt binary; opam build is ~20min and pulls camlp5.
204+
# Deferred to Wave-3 (container-based provisioning) per the
205+
# production-wiring plan.
206+
echo "hol-light deferred to Wave-3 container provisioning"
207+
exit 0
208+
;;
209+
tlaps)
210+
# TLA+ Proof System ships a self-extracting installer; provides tlapm.
211+
curl -fsSL -o /tmp/tlaps.sh https://github.com/tlaplus/tlapm/releases/latest/download/tlaps-installer-linux-x86_64.sh
212+
chmod +x /tmp/tlaps.sh
213+
sudo /tmp/tlaps.sh --prefix=/opt/tlaps
214+
sudo ln -sf /opt/tlaps/bin/tlapm /usr/local/bin/tlapm
215+
;;
216+
esac
217+
# Best-effort version probe for the matrix log.
218+
case "${{ matrix.backend }}" in
219+
fstar) fstar.exe --version || true ;;
220+
tlaps) tlapm --version || true ;;
221+
hol-light) true ;;
222+
*) "${{ matrix.backend }}" --version 2>/dev/null || true ;;
169223
esac
170224
- name: Run live test for ${{ matrix.backend }} (allow-fail while Wave-2 wires up)
171225
continue-on-error: true

tests/live_prover_suite.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ fn binary_on_path(name: &str) -> Option<PathBuf> {
4141
fn live_config(executable: &str) -> ProverConfig {
4242
ProverConfig {
4343
executable: PathBuf::from(executable),
44+
library_paths: vec![],
4445
args: vec![],
4546
timeout: 30,
4647
neural_enabled: false,
@@ -107,6 +108,8 @@ fn kind_label(kind: ProverKind) -> &'static str {
107108
ProverKind::Isabelle => "Isabelle",
108109
ProverKind::Why3 => "Why3",
109110
ProverKind::Dafny => "Dafny",
111+
ProverKind::FStar => "F*",
112+
ProverKind::TLAPS => "TLAPS",
110113
_ => "<other>",
111114
}
112115
}
@@ -198,3 +201,16 @@ async fn live_why3_version() {
198201
async fn live_dafny_version() {
199202
assert_version_reachable(ProverKind::Dafny, "dafny").await;
200203
}
204+
205+
#[tokio::test]
206+
async fn live_fstar_version() {
207+
// Canonical binary name is `fstar.exe` (per ProverKind::FStar executable()
208+
// in src/rust/provers/mod.rs — F* uses the `.exe` suffix even on Linux).
209+
assert_version_reachable(ProverKind::FStar, "fstar.exe").await;
210+
}
211+
212+
#[tokio::test]
213+
async fn live_tlaps_version() {
214+
// TLA+ Proof System's prover is `tlapm` (per provers/mod.rs).
215+
assert_version_reachable(ProverKind::TLAPS, "tlapm").await;
216+
}

0 commit comments

Comments
 (0)