-
Notifications
You must be signed in to change notification settings - Fork 10
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
System invariants in GAL #15
Comments
hi, That is pretty doable, a few hours of dev, but sorry the feature currently does not exist. In any case the result would be the same as the manual approach, it would just be much more comfortable as you can edit both system and predicate B and don't worry about support of transitions etc... |
Thanks for the quick reply!
This is exactly the workaround I'm using right now.
Doing the restriction programmatically is what I actually what I meant by doing it "manually". I was just wondering whether I'm missing a more convenient way of accomplishing the restriction in GAL.
I would like this. However, depending on whether you find this useful to have in GAL/ITSTools, feel free to close this issue or keep it open as an enhancement/feature request. |
What would that look like syntactically, I'm not sure.
So the system is built From that the transitions are enriched, where appropriate, with a post-test of the condition. Naive approach just adds to all transitions. Do you have an example of SMV style declaration of system with invariant constraint ? |
Yes, it it is pretty much the same syntax in SMV, except that there the invariant is written inside the component it constrains.
I've attached a single-module example that characterises a single-agent search problem instance (aka. the box-pushing puzzle Sokoban). The following excerpt illustrates where the restricting predicate, following the
This simple example takes nuXmv's BDD-based engine 17s without the |
ok, interesting use case. I need some more time to think about how it could be done. Defining invariants at component level is nicer I guess than only for main. But could different instances of a given module be specified to assume different invariants, or can we consider that all instances of a given type satisfy the type's invariants ? I guess with an optional "invariant" constraint declared in GAL or composite types, and assuming all instances have the same (local) constraint, there is a rewriting to a GAL that exhibits the desired semantics using current syntax/semantic bricks, so this feature can be seen as pure syntactic sugar. That is desirable, it's much easier to integrate the feature if it can be degeneralized to fall back to the "normal" case. |
A module's
Here, the The
For my use case, having all instances constrained in the same way would be sufficient. |
ok, yes we could probably add that feature. So I add one optional "invariant" declaration per gal/composite declaration, basically we enforce it as a condition on the initial state (raise an error if initial does not satisfy it) and as a post condition on every transition. Basic strat is to add the constraint after all transitions, but this can be obviously refined, Would that match your need ? |
Thanks, yes, this would suffice for my use case. |
Just to say I still have this in the pipe, but I've been pretty busy. Did you manage to go around it manually (by adding the tests yourself) and did the result match what you wanted ? I'm still ok to implement it if you are actually using the tool and you are still interested. |
To be honest, I did hardly get around to work on that side project recently -- busy with writing up my PhD thesis. While I would love to have the feature added to ITSTools/GAL and will keep using it, it is not a pressing issue for me but a nice-to-have, as I also use other backends and haven't determined the best procedure yet. Feel free to keep the issue open until you find some time. However I still think that, idependent from my side project, this feature will come in handy for many users of symbolic model checkers. When expressing systems in formalisms like GAL, it is common to have some higher-level information available, e.g. from static analyses, that one wants to incorporate, or pass down, to the model checking procedure. For example, folks at the Institute of Industrial Automation and Software Engineering (University of Stuttgart) use ITSTools to verify logic control software, and could certainly profit from integrating static analysis results. |
Hi,
I'm currently investigating the feasibility of using the GAL formalism in a side project of mine.
The current approach characterises a system's semantics in terms of the SMV formalism. This works pretty well but introduces unnecessary intermediate states that I can get rid of when using GAL instead -- in particular its fixpoint actions.
However, one feature of SMV that I cannot reproduce without jumping through hoops is the restriction of a system's state space by a given predicate -- called
INVAR
constraint in SMV.My use case is that I want to check reachability of bad states
B(X)
. However, I also have a static analysis that can quickly under-approximate the states from whichB(X)
cannot be reached. Therefore I would like to use this outcome (its negation) to constrain the search space, and avoid exploration of some parts that are known to never reachB(X)
.I'm aware that I could do this manually with libITS, by restricting the state space after every action, but was wondering whether there is already an easy way to restrict the state space in GAL.
The text was updated successfully, but these errors were encountered: