z3_ref 0.1.4

High level interface to the Z3 SMT solver
Documentation
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())
```