рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

"рдорд╛рдирд╡ рдорд╕реНрддрд┐рд╖реНрдХ рдПрдХ рдЦрд╛рд▓реА рдЕрдЯрд╛рд░реА рд╣реИред рдПрдХ рдореВрд░реНрдЦ рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИ: рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╡рд╣рд╛рдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╡рд╣ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╡рд╣рд╛рдВ рд╕рдмрд╕реЗ рдЬрд░реВрд░реА рдЪреАрдЬ рдХреЛ рдзрдХреНрдХрд╛ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд ..."
рд╡реА.рдмреА. рд▓рд┐рд╡рд╛рдиреЛрд╡ (рдлрд┐рд▓реНрдо "рд╢рд░реНрд▓рдХ рд╣реЛрдореНрд╕ рдФрд░ рдбреЙред рд╡реЙрдЯрд╕рди" рд╕реЗ)
SMT . , , , , .. тАФ , .
x = Int('x')
y = Real('y')
z = Bool('z')
s = String('s')
x, y, z = Ints('x y z')
x, y, z = Reals('x y z')
x, y, z = Bools('x y z')
x, y, z = Strings('x y z')
v = BitVec('v', N) # N тАФ -
X = IntVector('X', N)
Y = RealVector('Y', N)
Z = BoolVector('Z', N)
A = Array('A', b, c) # b тАФ , тАФ
Select(A, i) # A[i]
Store('A', i, a) # A c a i-
FloatingPoint = FP('fp', FPSort(ebits, sbits)) # IEEE 754
v = BitVecVal(10, 32) # - 0x0000000a
str = StringVal("aaaaa")
c = Const(5, IntSort())
reg = Re('re')
re = Loop( reg, L, U ) # L тАФ , U тАФ
Ex:
re = Loop( Re('a') , 2, 5)
print( simplify( InRe( "aaaa", re ) ) )
print( simplify( InRe( "a", re ) ) )
Out:
True
False
PrefixOf(substr, str)
SuffixOf(substr, str)
Concat(str1, str2)
Length(str)
Out:
0 + a + b + c
Out:
1 * a * b * c
Out:
x != y
- simplify(Distinct(x, y, z), blast_distinct=True)
Out:
And(Not(x == y), Not(x == z), Not(y == z))
- Extract(L, U, 'x') # L тАФ , U тАФ
Ex:
s = Solver()
x = BitVec('x', 8)
k = Extract(3, 0, x)
s.add(k == BitVecVal(10,4))
s.check()
print(s.model())
Out:
x = 10
LShR(x, i) # x >> i
RotateLeft(a, i)
RotateRight(a, i)
Solver
SMT Solver тАФ .
s = Solver()
s = SolverFor('proc') #
s.push/pop() # /
s.statistics() #
s.assertions() #
set_option() #
Ex:
set_option(precision=10) # 10 ( "?" )
t
o = Optimize()
o.maximize(t)
o.minimize(t)
Ex:
x1, x2, x3, x4, x5, m = Reals('x1 x2 x3 x4 x5 m')
o = Optimize()
o.add(-5 * x1 - 5 * x2 + 0 * x3 + 0 * x4 + 20 * x5 == 2 )
o.add( 0 * x1 +5 * x2 - 10 * x3 + 0 * x4 - 5 * x5 == 3 )
o.add( 0 * x1 -5 * x2 + 0 * x3 - 15 * x4 + 15 * x5 == 1 )
o.add( x1>=0, x2>=0, x3>= 0, x4>= 0, x5>= 0)
o.add( 0 * x1 -1 * x2 + 0 * x3 + 0 * x4 - 0.5 * x5 == m )
h = o.maximize(m)
if o.check() == sat:
print(o.lower(h))
print(o.model())
Out:
h = -6/5
[x3 = 0, x5 = 2/5, m = -6/5, x4 = 0, x1 = 1/5, x2 = 1]
Goal () тАФ . . . , .
g = Goal()
g.add(...)
Goal
c = Context()
g2 = g.translate(c)
. .
Ex:
g = Goal()
x, y = Ints('x y')
g.add(x == y + 1)
t = With(Tactic('add-bounds'), add_bound_lower=0, add_bound_upper=10)
g2 = t(g)
print(g2.as_expr())
Out:
And(x == y + 1, x <= 10, x >= 0, y <= 10, y >= 0)
Ex:
Then('simplify', 'nlsat').solver()
s.set( "smt.string.solver","seq" )
s.set ("smt.string.solver", "z3str3")
рдордЬрдмреВрд░рди рдХрдо рд╕реЗ рдХрдо
- s.set ("smt.core.minimize", "true")
рд╕рдВрджрд░реНрдн
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рд╡рд┐рд╡рд░рдг
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
SMT рддрд░реНрдХ
рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдФрд░ рджреЛ