Open grosu opened 9 years ago
I remember this issue. This is the reason why I wrote those examples the way they are with explicit heating/cooling instead of strictness. The problem is the heating rule:
rule T1:Type -> T2:Type => T2 ~> T1 -> HOLE requires notBool isKResult(T2)
If a type variable _0 is on the top of the K cell, then it is logically valid to unify that type variable with this rule. That triggers the following equality being added to the constraint:
_0 = _1 -> _2
The SMT solver does not have an axiomatization of this construct and so it does not know how to solve this equality, leading to the errors you see.
I am pretty sure what you actually need to resolve this issue is a strategy saying "only apply heating rules if a cooling rule cannot apply".
Same context as explained in #1553. Everything works fine if I do not add the strictness attribute to line 23, but as soon as I do it the
--symbolic-execution
option of krun throws the exception below. The version of the same exception with the--debug
option is shown in #1553.