ブール値の場合、関数is_true
とを使用できますis_false
。数値は、整数、有理数、または代数にすることができます。is_int_value
関数を使用して、is_rational_value
それぞれのis_algebraic_value
ケースをテストできます。整数の場合が最も単純です。このメソッドas_long()
を使用して、Z3整数値をPythonの長さに変換できます。有理数の場合、メソッドを使用してnumerator()
、denominator()
分子と分母を表すZ3整数を取得できます。メソッドnumerator_as_long()
とはとのdenominator_as_long()
ショートカットです。最後に、代数的数は無理数を表すために使用されます。クラスには。というメソッドがあります。代数的数を正確に近似するZ3有理数を返しますself.numerator().as_long()
self.denominator().as_long()
AlgebraicNumRef
approx(self, precision)
1/10^precision
。このメソッドの使用方法の例を次に示します。オンラインでも入手できます:http://rise4fun.com/Z3Py/Mkw
p = Bool('p')
x = Real('x')
s = Solver()
s.add(Or(x < 5, x > 10), Or(p, x**2 == 2), Not(p))
s.check()
m = s.model()
print m[p], m[x]
print "is_true(m[p]):", is_true(m[p])
print "is_false(m[p]):", is_false(m[p])
print "is_int_value(m[x]):", is_int_value(m[x])
print "is_rational_value(m[x]):", is_rational_value(m[x])
print "is_algebraic_value(m[x]):", is_algebraic_value(m[x])
r = m[x].approx(20) # r is an approximation of m[x] with precision 1/10^20
print "is_rational_value(r):", is_rational_value(r)
print r.numerator_as_long()
print r.denominator_as_long()
print float(r.numerator_as_long())/float(r.denominator_as_long())