10 releases

0.3.5 Oct 2, 2025
0.3.2 Jul 24, 2025
0.2.0 Mar 5, 2025
0.1.0-rc.1 Dec 17, 2024
0.1.0-alpha.1 Oct 7, 2024

#177 in Rust patterns

Download history 11000/week @ 2025-07-17 10028/week @ 2025-07-24 8399/week @ 2025-07-31 11344/week @ 2025-08-07 10302/week @ 2025-08-14 8991/week @ 2025-08-21 12408/week @ 2025-08-28 13660/week @ 2025-09-04 13789/week @ 2025-09-11 14643/week @ 2025-09-18 17577/week @ 2025-09-25 13111/week @ 2025-10-02 12097/week @ 2025-10-09 17211/week @ 2025-10-16 15552/week @ 2025-10-23 20700/week @ 2025-10-30

68,101 downloads per month
Used in 54 crates (7 directly)

Apache-2.0

1MB
23K SLoC

Coq 16K SLoC // 0.1% comments F* 5.5K SLoC // 0.1% comments Lean 1K SLoC // 0.2% comments Rust 657 SLoC // 0.0% comments

Hax-specific helpers for Rust programs. Those helpers are usually no-ops when compiled normally but meaningful when compiled under hax.

Example:

use hax_lib::*;
fn sum(x: Vec<u32>, y: Vec<u32>) -> Vec<u32> {
  hax_lib::assume!(x.len() == y.len());
  hax_lib::assert!(x.len() >= 0);
  hax_lib::assert_prop!(forall(|i: usize| implies(i < x.len(), x[i] < 4242)));
  hax_lib::debug_assert!(exists(|i: usize| implies(i < x.len(), x[i] > 123)));
  x.into_iter().zip(y.into_iter()).map(|(x, y)| x + y).collect()
}

hax library

This crate contains helpers that can be used when writing Rust code that is proven through the hax toolchain.

⚠️ The code in this crate has no effect when compiled without the --cfg hax.

Examples:

fn sum(x: Vec<u32>, y: Vec<u32>) -> Vec<u32> {
  hax_lib::assume!(x.len() == y.len());
  hax_lib::assert!(hax_lib::forall(|i: usize| hax_lib::implies(i < x.len(), || x[i] < 4242)));
  hax_lib::debug_assert!(hax_lib::exists(|i: usize| hax_lib::implies(i < x.len(), || x[i] > 123)));
  x.into_iter().zip(y.into_iter()).map(|(x, y)| x + y).collect()
}

Dependencies

~0–400KB