Hi all!
In my company we are experimenting with Alloy 6 for the design of one of our products. We are experiencing some issues with the performance and the module system of the Alloy that I wanted to share with you… All the models can be found here [1].
Performance
Our model is still relatively small compared to what we need to implement, but we already have some performance issues while generating CNF or when we run simulations.
In the first instance we got a “Capacity exceeded” warning when generating CNF. Even if we solved it with a refactoring, it is still a red flag as all is not yet implemented. Do you think that it is surprising or expected given the size of our models?
A second issue is the time required to solve a simulation that involves multiple modules/concepts. When working module by module everything is fine, the problem arises when we merge/reuse them in the application file. A workaround is to compose 2 or 3 modules/concepts at a time, but is not really maintainable especially with the themes that cannot be modularized. Same question here, do you think it is expected? Or the models are poorly implemented maybe?
Module System
As you can see I use generic modules a lot, but I don’t really know if it is better to use this feature or to implement our module with an “open” type and latter to restrict the type to the wanted set, for example:
module:
module a
sig A {
attr: one univ
}
app:
module app
open a
sig B, C {}
fact {
A.attr in B + C
}
I feel that the generic modules are easier to use, but I cannot find a way to import a generic module using the union of type, e.g.; open a[B + C]
. Why do we have such a limitation?
Note on application domain:
In the Github repository I sent you, the padme.md file is the application, the other files are concepts of the application. There is a “fwk” folder which contains some “framework” functions and the “themes” folder which contain themes to visualize each concept as well as the application. You can see the Padme application as the Microsoft Teams application with the Team, Channel, and Application that you can attach to Channel. In Padme, you have the Brief that contains Lead and you can attach some Item to the Lead. Items could be any thing such as task, evaluation document, email, attachement,… The Brief is a kind of objectif and a Lead a kind of review process of an asset regarding the Brief. The all application is a partnering platform for the biopharma sector.
Thanks for your help,
Best Regards,
Clement Delgrange