-
Notifications
You must be signed in to change notification settings - Fork 22
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
Interpretation of exists (not(*)) conditions #12
Comments
You should interpret the final condition as a question rather than as a statement. Then a tool can say that it is not true such an execution exists
|
Hi @deepsrc, In addition to what @hernanponcedeleon wrote, you shouldn't think of the assertion as part of any kind of specification. It's mostly a hint for why the litmus test might be interesting. If you are testing H/W, you should use the litmus tool (or a similar tool) to collect results from the H/W under testing (you can find such results in the hw-results folder, for example). Those results are lists of exhibited final states, regardless of whether they satisfy the assertion or not. The H/W results should be compared, using the mcompare tool, to exhaustive executions of the model you are interested in (you can find those in the model-results folder). mcompare will tell you exactly which states in the H/W don't match the model. Those can be states that the H/W exhibit but the model did not (i.e. H/W is not sound), or states that the model allows but the H/W did not exhibit (this is expected, as usually H/W is not as relaxed as the model allows it to be). All this mostly ignores the litmus assertion. Just to confuse you a bit, the litmus tool and the exhaustive executions of the model, both report which states satisfy the assertion, but this is not important. Best, |
On Tue, 29 Aug 2023 at 15:26, Shaked Flur ***@***.***> wrote:
Hi @deepsrc <https://github.com/deepsrc>,
In addition to what @hernanponcedeleon
<https://github.com/hernanponcedeleon> wrote, you shouldn't think of the
assertion as part of any kind of specification. It's mostly a hint for why
the litmus test might be interesting.
If you are testing H/W, you should use the litmus tool
<https://diy.inria.fr/> (or a similar tool) to collect results from the
H/W under testing (you can find such results in the hw-results folder, for
example). Those results are lists of exhibited final states, regardless of
whether they satisfy the assertion or not. The H/W results should be
compared, using the mcompare tool <https://diy.inria.fr/>, to exhaustive
executions of the model you are interested in (you can find those in the
model-results folder). mcompare will tell you exactly which states in the
H/W don't match the model. Those can be states that the H/W exhibit but the
model did not (i.e. H/W is not sound), or states that the model allows but
the H/W did not exhibit (this is expected, as usually H/W is not as relaxed
as the model allows it to be).
All this mostly ignores the litmus assertion. Just to confuse you a bit,
the litmus tool and the exhaustive executions of the model, both report
which states satisfy the assertion, but this is not important.
Just to add: the above is correct for comparing models using either rmem or
herd - it's best to check the set of allowed final states where one can -
but the isla-axiomatic SMT-based tool does check whether the assertion is
exhibited by any legal execution, rather than producing such a list of
exhibited final states.
… Best,
Shaked
—
Reply to this email directly, view it on GitHub
<#12 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABFMZZUDAHVAAKMSIHNFQM3XXX3ZLANCNFSM6AAAAAA3XZTROA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Thanks for the clarification. I have one last question. In case the hardware produces a state outside of the states present in |
Yes, this indicates the H/W is exhibiting behaviour that the Flat model does not allow. Can you share the test and H/W states? |
Hi,
I need some help with understanding how the exists (not(*)) conditions at the end of the test needs to be interpreted.
Let's consider this test as an example.
Does this mean that one of the values outside
x=1 /\ (1:x5=0 /\ (1:x7=0 \/ 1:x7=1) \/ 1:x5=1 /\ 1:x7=1)
this set may exist?Isn't that incorrect as x is always supposed to contain 1 as a result of the store on P0?
The text was updated successfully, but these errors were encountered: