On Mon, Feb 22, 2021 at 1:12 PM Andrea Corallo wrote: > Good catch thanks! :) Should be fixed by d6227f6edc. I'm also confused by the use of NEGATED in comp-emit-assume: if RHS is a constraint, it emits the complementary constraint. However, the code in comp-add-cond-cstrs uses NEGATED to express a much weaker constraint: that two mvars aren't strictly equal. If x /= y and y in SET, we can't conclude that x not in SET (unless SET is a singleton, an important special case). So it all works right now because emit-assume NEGATED=t RHS=mvar means "LHS isn't equal to RHS" but NEGATED=t RHS=cstr means "LHS can't satisfy RHS". My code changed the call to pass a constraint instead of the mvar, and then things broke :-) We should be consistent about what NEGATED means, I think. But apart from such problems, my code appears to be working. I'm attaching it for the sake of completeness, not because I expect you to read it all before it's cleaned up.