1 个不稳定版本
0.1.0-pre.1 | 2024年6月18日 |
---|
#544 在 Rust 模式
407 每月下载量
用于 5 个crate (2 直接)
18KB
303 行
hax 库
此crate包含在通过hax工具链证明的Rust代码中可使用的辅助工具。
⚠️ 此crate中的代码在没有配置 --cfg hax
的情况下编译时没有效果。
示例
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()
}
lib.rs
:
Hax 专用 Rust 程序辅助工具。这些辅助工具在正常编译时通常不执行任何操作,但在hax下编译时具有意义。
示例
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()
}
依赖关系
~400–760KB
~16K SLoC