[fix] I/P: Forward SMT/ATP solver env vars to the remote ML process - #274
Merged
Merged
Conversation
The proxy builds the remote poly environment from a filtered dump of the
remote's `isabelle env`, keeping only ISABELLE_/ML_/POLYML_ variables.
This drops Z3_SOLVER, CVC5_SOLVER & friends, and Isabelle decides SMT
solver availability by a pure env probe in the ML process
(HOL/Tools/SMT/smt_systems.ML: getenv (name ^ "_SOLVER") <> ""), so
every `smt (z3)`/`smt (cvc5)` proof fails under the proxy with
The SMT solver "z3" is not installed
even though z3 is installed on the remote. The same filter hides the
sledgehammer ATPs (E_HOME, SPASS_HOME, VAMPIRE_HOME, ZIPPERPOSITION_HOME)
and the nitpick/quickcheck backends (KODKODI*, MINISAT_HOME, ...).
verit was unaffected because its probe is keyed on ISABELLE_VERIT,
which already passed the filter.
Widen the allowlist to the bundled prover/counterexample-generator
prefixes. The values come from the remote's own settings, so they are
already correct remote paths and need no rewriting; the downstream env
assembly iterates the dict generically, so no other change is needed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
hanno-becker
approved these changes
Aug 29, 2026
hanno-becker
left a comment
Collaborator
There was a problem hiding this comment.
Thank you for spotting and fixing this @david-wang-0. LGTM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #273.
Problem
ip/ml_proxy.pybuilds the remote poly process environment from a filtered dump of the remote'sisabelle env, keeping onlyISABELLE_|ML_|POLYML_variables. This dropsZ3_SOLVER,CVC5_SOLVERand friends — and Isabelle decides SMT-solver availability by a pure env probe inside the ML process (HOL/Tools/SMT/smt_systems.ML:getenv (name ^ "_SOLVER") <> ""). So under the proxy every such proof fails withThe SMT solver "z3" is not installed(the message names the requested solver), even though the solvers are installed on the remote. The same filter hides the sledgehammer ATPs (E_HOME,SPASS_HOME,VAMPIRE_HOME,ZIPPERPOSITION_HOME) and the nitpick/quickcheck backends (KODKODI*,MINISAT_HOME, …).smt (verit)was unaffected because its probe is keyed onISABELLE_VERIT, which already passed the filter.Fix
Widen the allowlist to the bundled prover/counterexample-generator prefixes. The forwarded values come from the remote's own settings, so they are already correct remote paths and need no rewriting; the downstream env assembly iterates the parsed dict generically, so no other change is needed.
An allowlist (rather than forwarding everything minus a denylist) is kept deliberately: the raw
envdump contains multi-lineBASH_FUNC_*bodies that would break the proxy's line-based parsing.Verification
Reproduced and verified with the self-contained loopback setup from #273 (unprivileged sshd on 127.0.0.1:2222, "remote" = the local Isabelle2025-2 installation) and against a real SSH remote (Isabelle2025-2 on both ends), using a minimal session containing
smt (verit)passes,smt (z3)fails withThe SMT solver "z3" is not installed.The
ip-testCI job that exercises the proxy is currently disabled (#263), so no CI covers this path; the loopback script in #273 avoids the Isabelle download that broke that job and could serve as a basis for re-enabling it.Licensing
I confirm this contribution is made under the terms of the MIT license of this repository (see LICENSE).