-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AGREE System Stall #40
Comments
Can you better describe what you mean by "system stall?" Getting stuck at a step in time may make sense in terms of a simulation or execution. But, it really doesn't fit with model checking. What would the criterion be for a variable to be considered as "stuck"? You are correct that there is a contradiction in the given model. First, note that system AGREE includes a check for such a condition. In investigating this issue, it was discovered that the model checker invariant generation was turned off for the consistency checks making AGREE unable to determine whether the composition was consistent. This has been fixed in the code base and will be in the next release. Also, the combination of the equation statement
and
is illegal because multiple assignments are being made to the same variable. The AGREE validator missed checking for a combination of Thanks for helping to improve AGREE! |
Replace: |
By "system stall", I mean the underlying Lustre model only admit traces that have a bounded length. In the example, the upper bound is 3. In other words, there is no counter-example that has a length of more than 3. |
The criterion for a variable to be considered as "stuck" could be implemented as an AGREE contract. In the example, this could be: guarantee "A_sub_Complete stuck at 0" : not A_sub_Complete; |
Given the definition for "system stall" to mean that traces cannot be longer than the length at which the model becomes "stuck," note that the reason the traces cannot be longer is that the model becomes inconsistent at that step. No analysis at that step or beyond is possible because the logic is self contradictory. Thus, there are no valid traces longer than that limit. Again, this is not because the analysis is somehow stuck; it's because the model becomes inconsistent at that step. As for replacing the right hand side of the For the inferring the automated guarantee
this seems strange. Why would one define the local variable Finally, the existing consistency checks, as weak as they are, adequately cover this case. And, they cover it in a more general manner. |
Propositional formula (antecedent consequent) is often used to specify sub-component requirements or contracts in AGREE. If the same antecedent is used in multiple AGREE guarantee statements, the consequents could be in conflict. This results in the antecedent to be always false. And if the value of the antecedent is a function of the underlying Lustre clock, it could stop the whole system from progressing in time. This will cause the system-level guarantee statements beyond a certain time horizon to be trivially true.
In the example below, the top-level system consists of only one sub-system A. A has a local Boolean variable Complete. Due to the two guarantee statements in A, Complete is always false. Complete is also referenced at the top-level. The assignment states that it should be true if and only if clock1 reaches 3. Since Complete is always false, clock1 can never reach 3. This makes the guarantee statement ("output range1") trivially true. Note that this does not just stops clock1. It actually stops the whole system from progressing in time. clock2 is independent of clock1. The guarantee ("output range2") is also proved to be true. This suggests that the whole system stops at “tick” 2. Any guarantee statement beyond the time becomes trivially true.
Proposed fix:
package SystemStall
public
with Base_Types;
end SystemStall;
The text was updated successfully, but these errors were encountered: