if (assignable)
{
Assert(!evaluable || assignOne);
- Assert(!t.isBoolean() || (*i2).getKind() == kind::APPLY_UF);
+ // this assertion ensures that if we are assigning to a term of
+ // Boolean type, then the term is either a variable or an APPLY_UF.
+ // Note we only assign to terms of Boolean type if the term occurs in
+ // a singleton equivalence class; otherwise the term would have been
+ // in the equivalence class of true or false and would not need
+ // assigning.
+ Assert(!t.isBoolean() || (*i2).isVar()
+ || (*i2).getKind() == kind::APPLY_UF);
Node n;
if (t.getCardinality().isInfinite())
{