D.Baier、D.Beyer和K.Friedberger。 JavaSMT 3:与Java中的SMT解算器交互 。 程序中。 CAV,LNCS 12760,第1-13页,2021年。 斯普林格。 E.G.Karpenkov、K.Friedberger和D.Beyer。 JavaSMT:Java中SMT解算器的统一接口 。 程序中。 VSTTE,LNCS 9971,第139-148页,2016年。 斯普林格。
整数 理性 位向量 浮点型 阵列 未解释函数 字符串和RegEx
满意度检查 量词和量词消除 带假设的增量求解 使用推送/弹出进行增量求解 多个独立上下文 模型生成 插值,包括树和序列结构 使用内置策略进行公式转换 使用访问者进行公式内省
//以SMTInterpol作为后端实例化JavaSMT(有关依赖关系,请参阅文档)
尝试 ( 解算器上下文 上下文 = SolverContextFactory解决方案上下文工厂 。 创建SolverContext ( 配置 , 记录器 , shutdownNotifier(关闭通知程序) , 解算器 。 SMTINTERPOL公司 )) { 整数公式管理器 imgr公司 = 上下文 。 获取公式管理器 (). 获取整数公式管理器 (); //使用两个整数变量创建公式“a=b”
整数公式 一 = imgr公司 。 makeVariable(标记变量) ( “a” ); 整数公式 b条 = 集成电路管理器 。 makeVariable(标记变量) ( “b” ); 布尔公式 (f) = imgr公司 。 平等的 ( 一 , b条 ); //求解公式、获取模型并打印变量赋值
尝试 ( 验证人环境 检定器 = 上下文 。 新验证程序环境 ( 校准仪选项 。 生成_模型 )) { 校准仪 。 添加约束 ( (f) ); 布尔值 是Unsat = 校准仪 。 是Unsat (); 断言 ! 是Unsat ; 尝试 ( 模型 模型 = 校准仪 。 获取模型 ()) { 系统 。 外面的 。 打印 ( “a=%s,b=%s的SAT” , 模型 。 评价 ( 一 ), 模型 。 评价 ( b条 )); } } }