// 2) x is not in the term t
// 3) x : T and t : S, then S <: T
if (in[0].isVar() && !expr::hasSubterm(in[1], in[0])
- && (in[1].getType()).isSubtypeOf(in[0].getType()))
+ && (in[1].getType()).isSubtypeOf(in[0].getType())
+ && in[0].getKind() != kind::BOOLEAN_TERM_VARIABLE)
{
outSubstitutions.addSubstitution(in[0], in[1]);
return PP_ASSERT_STATUS_SOLVED;
}
if (in[1].isVar() && !expr::hasSubterm(in[0], in[1])
- && (in[0].getType()).isSubtypeOf(in[1].getType()))
+ && (in[0].getType()).isSubtypeOf(in[1].getType())
+ && in[1].getKind() != kind::BOOLEAN_TERM_VARIABLE)
{
outSubstitutions.addSubstitution(in[1], in[0]);
return PP_ASSERT_STATUS_SOLVED;
regress0/arrays/bool-array.smt2
regress0/arrays/bug272.minimized.smt
regress0/arrays/bug272.smt
+ regress0/arrays/bug3020.smt2
regress0/arrays/bug637.delta.smt2
regress0/arrays/constarr.cvc
regress0/arrays/constarr.smt2
--- /dev/null
+(set-info :status sat)
+(set-logic QF_ABV)
+(declare-const A (Array Bool Bool))
+(declare-const B (Array Bool Bool))
+(declare-const b1 Bool)
+(declare-const b2 Bool)
+(declare-const b3 Bool)
+(declare-const b4 Bool)
+(assert (= A (store B b1 b2)))
+(assert (= b3 (select A (select B b2))))
+(assert (=> b1 b2))
+(assert (not (and b2 b3)))
+(assert (=> b3 b1))
+(assert (= b4 (select B b2)))
+(assert (xor b4 b2))
+(check-sat)