z3d 0.1.0

Z3 DSL interface for Rust
Documentation
#![feature(proc_macro_hygiene)]

use z3;
use z3d::dec;

fn default_ctx() -> z3::Context {
    z3::Context::new(&z3::Config::default())
}

#[test]
fn modus_tollens() {
    let ctx = &default_ctx();
    let solver = z3::Solver::new(ctx);
    let p = dec!(p: bool in ctx);
    let q = dec!(q: bool in ctx);

    solver.assert(&p.implies(&q));
    solver.assert(&q.not());
    assert_eq!(solver.check(), z3::SatResult::Sat);

    solver.push();
    solver.assert(&p);
    assert_eq!(solver.check(), z3::SatResult::Unsat);

    solver.pop(1);
    assert_eq!(solver.check(), z3::SatResult::Sat);
}