import ltihooks import spot clone = spot.clone e = spot.default_environment.instance() #---------------------------------------------------------------------- a = e.require('a') b = e.require('b') c = e.require('c') c2 = e.require('c') assert c == c2 assert spot.atomic_prop.instance_count() == 3 op = spot.multop.instance(spot.multop.And, clone(a), clone(b)) op2 = spot.multop.instance(spot.multop.And, op, c) # The symbol for a subformula which hasn't been cloned is better # suppressed, so we don't attempt to reuse it elsewhere. del op, c print 'op2 =', op2 op3 = spot.multop.instance(spot.multop.And, b, spot.multop.instance(spot.multop.And, c2, a)) del a, b, c2 print 'op3 =', op3 assert op2 == op3 op4 = spot.multop.instance(spot.multop.Or, op2, op3) print 'op4 =', op4 assert op4 == op2 del op2, op3 assert spot.atomic_prop.instance_count() == 3 assert spot.multop.instance_count() == 1 spot.destroy(op4) del op4 assert spot.atomic_prop.instance_count() == 0 assert spot.multop.instance_count() == 0 #---------------------------------------------------------------------- a = e.require('a') b = e.require('b') c = e.require('c') T = spot.constant.true_instance() F = spot.constant.false_instance() f1 = spot.binop.instance(spot.binop.Equiv, T, clone(a)) f2 = spot.binop.instance(spot.binop.Implies, F, clone(b)) f3 = spot.binop.instance(spot.binop.Xor, F, clone(c)) f4 = spot.unop.instance(spot.unop.Not, f3); del f3 assert spot.atomic_prop.instance_count() == 3 assert spot.binop.instance_count() == 3 assert spot.unop.instance_count() == 1 assert spot.multop.instance_count() == 0 spot.destroy(a) del a spot.destroy(b) del b spot.destroy(c) del c assert spot.atomic_prop.instance_count() == 3 assert spot.binop.instance_count() == 3 assert spot.unop.instance_count() == 1 assert spot.multop.instance_count() == 0 spot.destroy(f1) del f1 assert spot.atomic_prop.instance_count() == 2 assert spot.binop.instance_count() == 2 assert spot.unop.instance_count() == 1 assert spot.multop.instance_count() == 0 spot.destroy(f4) del f4 assert spot.atomic_prop.instance_count() == 1 assert spot.binop.instance_count() == 1 assert spot.unop.instance_count() == 0 assert spot.multop.instance_count() == 0 spot.destroy(f2) del f2 assert spot.atomic_prop.instance_count() == 0 assert spot.binop.instance_count() == 0 assert spot.unop.instance_count() == 0 assert spot.multop.instance_count() == 0