用z3 smt求解器进行语法推理
z3gi的Python项目详细描述
使用Z3 SMT解算器的语法推理
========================
[z3]:https://github.com/z3prover/z3
找到一个最小尺寸的确定性有限自动机(dfa),它接受一组给定的正字符串,拒绝一组给定的负字符串。已经证明它是np完全的。
z3gi提供了使用可满足性模理论(smt)解决这个(和类似)问题的不同方法。
sources
--------
或者,您可以通过克隆此存储库来安装z3gi,使用“setuptools”进行安装:https://gitlab.science.ru.nl/rick/smtgi.git
$python smtgi/z3gi/setup.py install'1'的1或3大于5的倍数(这样的dfa在这里被描述为[dfa])。
[dfa]:http://abbadingo.cs.num.ie/dfa.html
this file can be found at `docs/train.txt`):
```
16 2
1 4 1 0 0 0
1 4 0 1 0 0
1 4 0 0 1 0
1 5 1 0 1 1 1
1 6 1 1 1 1 0 1
1 6 0 1 0 0 0 0
1 6 1 0 0 0 0 0
1 7 0 0 0 1 1 0 1
1 7 0 0 0 0 1 0 1
0 3 1 0 1
0 4 0 0 0 0
0 4 1 1 0 1
0 5 0 0 0 0 0
0 5 0 0 1 0 1
0 6 0 1 0 1 1 1
0 7 1 0 0 0 1 1 1
```
我们可以用Z3GI来学习train.txt中字符串的模型如下:
我是说,
状态0=0,
n=5,
状态2=2,
状态4=4,
1=input!瓦尔!0,
状态1=1,
0=输入!瓦尔!1,
输出=[3->;真,4->;真,否则->;假],
传输=[(0,输入!瓦尔!0)->;3,
(0,输入!瓦尔!1)->;4,
(4,输入!瓦尔!0)->;2,
(3,输入!瓦尔!0)->;4,
(3,输入!瓦尔!1)->;2,
(2,输入!瓦尔!0)->;1,
(1,输入!瓦尔!1)->;3,
(4,输入!瓦尔!1)->;1,
else->;0]
```
我们可以将学习到的模型解释如下。
-`0=输入!瓦尔!1`和'1=输入!瓦尔!0“提供'0'和'1'的标识符
-`n=5'表示学习的模型有5个状态
-`state0=0'到`state4=4'提供这些状态的标识符
-`out'描述这些状态的输出函数(如果接受则为'true',如果拒绝则为'false')
-`trans'定义状态和符号到状态(例如`(0,输入!瓦尔!0)->;3)`描述从'state0'到'state3'的转换`)
在python中使用z3gi打开python解释器:
```
$python
````
2。这次让我们使用不同的编码器:
```
>;>z3gi.encoder s import expressive
>;>encoder=expressive.encoder()
```
>3.创建一个示例:
```
>;>z3gi.sample import sample
>;>sample=sample(encoder)
```
>4。将“train.txt”中字符串的约束添加到示例中:
```
>;>gt;来自Z3GI。解析器导入abbadingo
>;>gt;对于字符串,在abbadingo.read中添加标签(open('train.txt','r'),header=1):
…示例[字符串]=标签
…
```
5。获取模型!
```
>;>model=sample.model()
>;>print(model)
```
========================
[z3]:https://github.com/z3prover/z3
找到一个最小尺寸的确定性有限自动机(dfa),它接受一组给定的正字符串,拒绝一组给定的负字符串。已经证明它是np完全的。
z3gi提供了使用可满足性模理论(smt)解决这个(和类似)问题的不同方法。
sources
--------
或者,您可以通过克隆此存储库来安装z3gi,使用“setuptools”进行安装:https://gitlab.science.ru.nl/rick/smtgi.git
$python smtgi/z3gi/setup.py install'1'的1或3大于5的倍数(这样的dfa在这里被描述为[dfa])。
[dfa]:http://abbadingo.cs.num.ie/dfa.html
this file can be found at `docs/train.txt`):
```
16 2
1 4 1 0 0 0
1 4 0 1 0 0
1 4 0 0 1 0
1 5 1 0 1 1 1
1 6 1 1 1 1 0 1
1 6 0 1 0 0 0 0
1 6 1 0 0 0 0 0
1 7 0 0 0 1 1 0 1
1 7 0 0 0 0 1 0 1
0 3 1 0 1
0 4 0 0 0 0
0 4 1 1 0 1
0 5 0 0 0 0 0
0 5 0 0 1 0 1
0 6 0 1 0 1 1 1
0 7 1 0 0 0 1 1 1
```
我们可以用Z3GI来学习train.txt中字符串的模型如下:
我是说,
状态0=0,
n=5,
状态2=2,
状态4=4,
1=input!瓦尔!0,
状态1=1,
0=输入!瓦尔!1,
输出=[3->;真,4->;真,否则->;假],
传输=[(0,输入!瓦尔!0)->;3,
(0,输入!瓦尔!1)->;4,
(4,输入!瓦尔!0)->;2,
(3,输入!瓦尔!0)->;4,
(3,输入!瓦尔!1)->;2,
(2,输入!瓦尔!0)->;1,
(1,输入!瓦尔!1)->;3,
(4,输入!瓦尔!1)->;1,
else->;0]
```
我们可以将学习到的模型解释如下。
-`0=输入!瓦尔!1`和'1=输入!瓦尔!0“提供'0'和'1'的标识符
-`n=5'表示学习的模型有5个状态
-`state0=0'到`state4=4'提供这些状态的标识符
-`out'描述这些状态的输出函数(如果接受则为'true',如果拒绝则为'false')
-`trans'定义状态和符号到状态(例如`(0,输入!瓦尔!0)->;3)`描述从'state0'到'state3'的转换`)
在python中使用z3gi打开python解释器:
```
$python
````
2。这次让我们使用不同的编码器:
```
>;>z3gi.encoder s import expressive
>;>encoder=expressive.encoder()
```
>3.创建一个示例:
```
>;>z3gi.sample import sample
>;>sample=sample(encoder)
```
>4。将“train.txt”中字符串的约束添加到示例中:
```
>;>gt;来自Z3GI。解析器导入abbadingo
>;>gt;对于字符串,在abbadingo.read中添加标签(open('train.txt','r'),header=1):
…示例[字符串]=标签
…
```
5。获取模型!
```
>;>model=sample.model()
>;>print(model)
```