You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, the cterms_anti_unify function directly utilizes Cterm.anti_unify to obtain a generalized state. However, it has some issues:
It generates more variables than expected. For instance, given states <i> 1 </i>, <i> 2 </i>, and <i> 3 </i>, it returns something like <i> z </i> (z=1 \/ (z=y /\ (y=2 \/ y=3))), whereas I expect it to return <i> z </i> z = 1 \/ z = 2 \/ z = 3.
Another issue pertains to merge_node. While it's acceptable for the MergedEdge's left-hand side to use this generalized state to match the rule, the condition cannot be recovered on the right-hand side.
For example, consider the following program:
functionf(a):
ifa:
return1else:
return2
The current merged edge is A:Bool => 1 \/ 2, which means the following assertions will fail:
assertf(true) ==1assertf(false) ==2
I'm uncertain if this behavior aligns with our goals, as it still seems useful for checking certain properties. If not, I don't see any alternative methods other than avoiding merging to retain these conditions. Additionally, there may be three types of specifications in Kontrol and what should be used by the verifier:
The minimized version without merging nodes
The minimized version with merging nodes
User's NatSpec
The text was updated successfully, but these errors were encountered:
Currently, the
cterms_anti_unify
function directly utilizesCterm.anti_unify
to obtain a generalized state. However, it has some issues:It generates more variables than expected. For instance, given states
<i> 1 </i>
,<i> 2 </i>
, and<i> 3 </i>
, it returns something like<i> z </i> (z=1 \/ (z=y /\ (y=2 \/ y=3)))
, whereas I expect it to return<i> z </i> z = 1 \/ z = 2 \/ z = 3
.Another issue pertains to
merge_node
. While it's acceptable for theMergedEdge
's left-hand side to use this generalized state to match the rule, the condition cannot be recovered on the right-hand side.For example, consider the following program:
The current merged edge is
A:Bool => 1 \/ 2
, which means the following assertions will fail:I'm uncertain if this behavior aligns with our goals, as it still seems useful for checking certain properties. If not, I don't see any alternative methods other than avoiding merging to retain these conditions. Additionally, there may be three types of specifications in Kontrol and what should be used by the verifier:
The text was updated successfully, but these errors were encountered: