extern crate libsmt;
use libsmt::backends::smtlib2::*;
use libsmt::backends::backend::*;
use libsmt::backends::z3;
use libsmt::theories::{integer};
use libsmt::logics::lia::LIA;
fn main() {
let mut z3: z3::Z3 = Default::default();
let mut solver = SMTLib2::new(Some(LIA));
solver.set_logic(&mut z3);
let x = solver.new_var(Some("x"),integer::Sorts::Int);
let y = solver.new_var(Some("y"),integer::Sorts::Int);
let int5 = solver.new_const(integer::OpCodes::Const(5));
let int1 = solver.new_const(integer::OpCodes::Const(1));
let cond1 = solver.assert(integer::OpCodes::Add, &[x, y]);
let _ = solver.assert(integer::OpCodes::Gt, &[cond1, int5]);
let _ = solver.assert(integer::OpCodes::Gt, &[x, int1]);
let _ = solver.assert(integer::OpCodes::Gt, &[y, int1]);
if let Ok(result) = solver.solve(&mut z3) {
println!("x: {}; y: {}", result[&x], result[&y]);
} else {
println!("No solutions for x and y found for given set of constraints");
}
}