This Month in Hax: March 2025
In March, we successfully merged 32 pull requests!
Thanks @Nadrieril, who helped move hax
forward by pinning it to a more recent nightly version of the Rust compiler (#1380). Nadrieril also continued work on the frontend. Trait resolution is now more robust, especially in the presence of closures (#1376), and our handling of constants has seen significant improvements, with refinements introduced in both #1367 and #1337.
Outside of the frontend, we also focused on enhancements and fixes within hax-lib
and the engine. Notably, support for mathematical integers and logical propositions has been strengthened, making reasoning more precise and expressive (#1372, #1352, #1351). Additionally, we resolved several issues related to the use of self
in contracts, improving overall stability and correctness in those scenarios.
March also brought new capabilities to hax-lib
. The newly introduced decreases
attribute makes it possible to express termination arguments directly in Rust, giving users better control over termination checking. Furthermore, the addition of the <backend>::replace_body
family of attributes allows developers to substitute the body of a Rust function with backend-specific code, offering a powerful mechanism for fine-tuned extraction when needed.
Stay tuned for more updates next month!
Full list of PRs
- #1380: Update the rustc pin
- #1377: Stop depending on ocamlgraph fork.
- #1376: Correctly handle impl exprs for closures
- #1373: simd types
- #1372:
hax-lib
:Int
improvements and fixes - #1367: Remove
ConstantExt
and itstranslate_uneval
machinery - #1363: fix: update flake.lock
- #1361: Various fstar core additions, mostly for iterators.
- #1357: fix(hax-lib): allow
future(self)
- #1356: feat(proof-libs): add missing definitions
- #1355: fix(engine/fstar-backend): drop spurious precondition on
Lemma
s - #1354: fix(hax-lib/dummy): intro
int!
- #1353: fix(proof-libs/F*): fix name
f_TryInto
- #1352: hax-lib: prop: allow equality on every type
- #1351: fix(hax-lib/assume): fixes assume and assert_prop
- #1350: fix(engine) Avoid replacing 'let rec' in interfaces.
- #1349: fix(engine/fstar backend): subst self_ to self
- #1348: Hax shouldn't distinguish the
If
case in MIR - #1345: Engine: import static items (but mutable ones), reject asm blocks
- #1342: feat(hax-lib): add support for
decreases
clauses in F* - #1339: Bertie libs
- #1338: Don't error on built-in associated types
- #1337: Translate MIR constants using the const-eval interpreter
- #1336: F* typeclass for
core::ops::BitXor
- #1333: feat(engine/names): extend name policy expressivity
- #1332: fix(engine/gen-printer): fixes #1294
- #1331: ci(nix): use F* bin cache in mlkem.yml
- #1330: This month in hax 02-25 + release 0.2.0
- #1329: fix(engine) Allow implementing arithmetic traits.
- #1328: fix(setup.sh): rustup 1.28
- #1327: fix(nix): MacOS: add rustc and libz dylib to
DYLD_LIBRARY_PATH
- #1323: Add more facts to logand_lemma
- #1321: Introduce
hax_lib::BACKEND::replace_body
attribute