//Constructor
public Z3Context()
{
//Initialize Config and Context
_config = new Config();
_config.SetParamValue("MODEL", "true"); // corresponds to /m switch
_config.SetParamValue("MACRO_FINDER", "true");
_context = new Context(_config);
//Setup custom conversion method BoolToInt (boolean -> integer)----------------------------------------------------------------
FuncDecl boolToInt = _context.MkFuncDecl("BoolToInt", _context.MkBoolSort(), _context.MkIntSort());
Term i = _context.MkConst("i", _context.MkBoolSort());
Term fDef = _context.MkIte(_context.MkEq(i, _context.MkTrue()), _context.MkIntNumeral(1), _context.MkIntNumeral(0)); // x == true => 1, x == false => 0
Term fStatement = _context.MkForall(0, new Term[] { i }, null, _context.MkEq(_context.MkApp(boolToInt, i), fDef));
_context.AssertCnstr(fStatement);
//
_functions.Add("BoolToInt", new Z3Function(boolToInt));
//-----------------------------------------------------------------------------------------------------------------------------
}