簡體   English   中英

代表一個SMT公式

[英]Representing an SMT formula

在 PySMT 中制作布爾公式很簡單:

from pysmt.shortcuts import *
from pysmt.typing import INT
x1 = Symbol("x1")
x2 = Symbol("x2")

formula = Or(x1, x2)
model = get_model(formula)
print(model)

此外,SMT 公式具有以下形狀:

x1 = Symbol("x1", INT)
x2 = Symbol("x2", INT)
x1_domain = And(GE(x1, Int(0)), LE(x1, Int(1)))
x2_domain = And(GE(x2, Int(0)), LE(x2, Int(1)))

我意識到這有效:

equation = Equals(Minus(x1, x2), Plus(x1, x2))
formula = And(equation, x1_domain, x2_domain)
model = get_model(formula)

但是,我不使用方程式,而是以這種形式創建一個公式如何:

# formula = Or(x1, x2) #?

你可以讓它更美味一點:

from pysmt.shortcuts import *
from pysmt.typing import INT

x1 = Symbol("x1", INT)
x2 = Symbol("x2", INT)
x1_domain = And(x1 >= 0, x1 <= 1)
x2_domain = And(x2 >= 0, x2 <= 1)

equation = Equals(x1 - x2, x1 + x2)
formula = And(equation, x1_domain, x2_domain)
print(formula)

model = get_model(formula)
print(model)

也就是說,文字和比較工作。 不幸的是,這就是它結束的地方。 您不能將&&用於And==用於Equals等。這是因為 Python 不允許像這樣重載布爾值: https ://peps.python.org/pep-0335/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM