跳到内容
主人
交换分支/标签
代码

文件夹

永磁
未能加载最新提交信息。
类型
姓名
最新提交消息
提交时间
ci
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

pySMT:用于SMT的Python API

生成状态 新闻报道 文件状态 最新PyPI版本 Apache许可证 谷歌集团

pySMT使可满足模理论简单:

  • 定义公式简单的,直观,和独立于解算器方式
  • 使用一个本地解算器或通过包装来求解公式任何符合SMT Lib的解算器,
  • 以SMT-Lib格式转储您的问题,
  • 还有更多。。。

PySMT体系结构概述

使用

>>>  pysmt公司.捷径 进口 符号,以及,不是,是吗
>>>
>>> 瓦拉 = 符号(“A”)#默认类型为布尔型
>>> 瓦布 = 符号(“B”)>>> f = 以及(瓦拉,不是(瓦布))>>> f(A &(!B))>>> 是吗(f)是的
>>> g = f.代替({瓦布:瓦拉})>>> g(A &(!A))>>> 是吗(g)

一个更复杂的例子

是否每个字母都有一个值(介于1和9之间),以便H+E+L+L+O=W+O+R+L+D=25?

 pysmt公司.捷径 进口 符号,以及,通用电气,书信电报,加上,等于,内景,get_模型
 pysmt公司.打字 进口 国际的

你好 =[符号(s,国际的)对于 s 在里面 “你好”]世界 =[符号(s,国际的)对于 s 在里面 “世界”]字母 = 设置(你好+世界) = 以及([以及(通用电气(,内景(1)),书信电报(,内景(10)))对于  在里面 字母])善俊你好 = 加上(你好)#n元运算符可以获取列表
三明世界 = 加上(世界)#作为论据
问题 = 以及(等于(善俊你好,三明世界),等于(善俊你好,内景(25)))公式 = 以及(,问题)打印(“公式的序列化:”)打印(公式)模型 = get_模型(公式)如果 模型:打印(模型)其他的:打印(“找不到解决方案”)

文件夹

投资组合解决包括在平行的。pySMT提供了一个简单的接口来执行portfolio使用多个解算器和多个解算器配置进行求解。

 pysmt公司.捷径 进口 文件夹,符号,不是

,是的 = 符号(“x”),符号(“是”)f = .暗示(是的)具有 文件夹([“cvc4”,“是的”,(“msat”, {“随机种子”:1}),(“msat”, {“随机种子”:17}),(“msat”, {“随机种子”:42})],逻辑=“乌夫利拉”,增量=,生成_模型=)作为 s:s.添加_断言(f)s.()s.添加_断言()物件 = s.解决()是的 = s.获取_值(是的)打印(是的)#是的

  s.流行音乐()s.添加_断言(不是(是的))物件 = s.解决()v形x = s.获取_值()打印(v形x)#假

使用其他SMT-LIB解算器

 pysmt公司.捷径 进口 符号,获取环境,解算器
 pysmt公司.逻辑学 进口 乌夫拉

名称 = “mathsat smtlib” #注意:API版本称为“msat”

#解算器的路径。解算器需要从
#标准。这可能需要创建一个小shell脚本来设置
#解算器选项。
路径 =[“/tmp/mathsat”]逻辑学 =[乌夫拉,]#支持的逻辑列表

#将解算器添加到环境中
环境 = 获取环境()环境.工厂.添加通用求解器(名称,路径,逻辑学)#SMT-LIB解算器的解算器名称现在可以在任何地方使用
#其中pySMT将接受API解算器名称
具有 解算器(名称=名称,逻辑=“QF悻UFLRA”)作为 s:打印(s.是吗(符号(“x”)))#是的

查看更多示例示例/目录以及ReadTheDocs文档

支持的理论和解决方案

pySMT提供了在线性实数运算中定义公式的方法(LRA)、实差逻辑(RDL)、等式和未解释函数(EUF)、位向量(BV)、数组(A)、字符串及其组合。本机API支持以下解算器:

此外,您可以使用任何SMT-LIB 2兼容的解算器。

PySMT假定SMT解算器的python绑定是已安装并可从蟒蛇.

安装

您可以从PyPI安装最新稳定版本的pySMT:

#pip安装pysmt

这将额外安装pysmt安装命令,可以用于安装解算器:例如。,

$pysmt install--检查

会告诉你在你的蟒蛇.PySMT不直接依赖于任何解算器,但是如果您愿意执行求解时,需要至少安装一个解算器。这个可以由pySMT通过其本机API或通过SMT-LIB来使用文件。

剧本pysmt安装可用于简化求解器的安装:

$pysmt安装--msat

将安装MathSAT 5。

默认情况下,解算器被下载、解包并构建在主目录中.smt_解决方案文件夹。编译的库和实际的解算器包是安装在相关站点包目录(例如虚拟环境的包根或本地用户站点)。pysmt安装有很多选择自定义其行为。如果您的系统中有多个版本的python,建议使用以下语法运行pysmt install:python-m pysmt安装.

注:此脚本不需要安装构建解算器的依赖关系(例如make或gcc),并且主要在Linux Debian/Ubuntu系统上测试。我们建议你请参阅每个解算器的文档以了解如何安装它的python绑定。

对于Yices、picosat和CUDD,我们使用外部包装:

有关如何将SMT-LIB投诉解决程序与pySMT一起使用的说明看见示例/generic_smtlib.py

有关详细信息,请参阅联机ReadTheDocs文档

解算器支持

下表总结了通过pySMT为支持的功能每个可用的解算器。

解算器 pySMT名称 支持的理论 量词 量词消除 不饱和岩芯 插值
数学卫星 msat UF、LIA、LRA、BV、AX msat fm,msat lw 是的 是的
Z3型 z3型 UF、LIA、LRA、BV、AX、NRA、NIA z3型 z3型 是的 是的
CVC4 cvc4 UF、LIA、LRA、BV、AX、S 是的
依斯 依斯 UF,LIA,LRA,BV
选择器 btor公司 UF、BV、AX
SMT库接口 <自定义> UF、LIA、LRA、BV、AX 是的
皮科萨 皮科萨 [无] [没有]
BDD(立方英尺) 孟加拉第纳尔 [无] 是的 孟加拉第纳尔

许可证

pySMT是在apache2.0许可下发布的。

如有进一步的问题,请随时提出问题,或写信给pysmt@googlegroups.com(浏览存档).

如果您在工作中使用pySMT,请考虑引用:

@生产中{pysmt2015,title={PySMT:一个求解器无关的库,用于基于SMT的算法快速原型化},作者{Gario,Marco和Micheli,Andrea},书名:{SMT研讨会2015},年份={2015}}