Open virgil-serbanuta opened 1 year ago
It turns out that this also works if I change the symbolic
attribute to symbolic(X)
, so this is no longer blocking.
@ehildenb says that symbolic
, by itself, means that all arguments must be symbolic. However the documentation (https://kframework.org/docs/user_manual/#concrete-and-symbolic-attributes-(haskell-backend) ) says, in a somewhat ambiguous context, that "Conversely, the symbolic attribute will allow a rule to apply only when some arguments are not concrete." and does nothing else to clarify the slight ambiguity.
So, this may actually be an issue about documentation, not about the backend itself.
See the end of the issue for some comments. For now, here are some instructions for reproducing the issue:
a.k
proof.k
command line:
Output:
Some comments:
a
usemodIntTotal
instead of modInt.{ true #Equals p1 ( X modInt 2 ) }
term with a variable V and simply sends V to z3. When using modIntTotal, the backend replaces{ true #Equals p1 ( X modIntTotal 2 ) }
with{ true #Equals V }
and sends that to z3, which means that z3 has a chance to notice that the entire constraint is unsat.claim b(X modInt 2) => c(X modIntTotal 2)
, then the backend DOES apply the simplification rule since it finishes the proof successfully. I'm not sure what to make of that.