Crates.io | z3_ref |
lib.rs | z3_ref |
version | 0.1.4 |
source | src |
created_at | 2018-09-20 14:19:49.043371 |
updated_at | 2018-10-03 13:09:33.808067 |
description | High level interface to the Z3 SMT solver |
homepage | |
repository | https://github.com/p4l1ly/z3-rust |
max_upload_size | |
id | 85629 |
size | 16,824 |
High level interface to the Z3 SMT solver. Currently, only support for boolean logic is implemented. It is therefore usable only as a SAT solver. We have not yet considered thread safety or reasonable behaviour if multiple contexts are used at once.
use z3::Stage;
// Start to use Z3.
let mut ctx = z3::Context::new();
// Create a variable.
let foo = ctx.var_from_string("foo");
// Add it to the solver.
ctx.assert(foo);
{
// Push Z3 solver's stack.
let mut p = ctx.push();
// A basic example of combining formulae.
let foo_and_not_foo = p.and(vec![foo.inherit(), p.not(foo)]);
p.assert(foo_and_not_foo);
// No way to satisfy foo && !foo.
assert!(!p.is_sat())
} // Pop Z3 solver's stack.
assert!(ctx.is_sat())