Verifies the specification of distributed applications which use state-based CRDTs and work on a causally consistent datastore.
docker-compose run soteria specs/<application_name>.spec
Note : The specification directory must be inside the folder soteria.
The specifications are written in Boogie with annotations.
To get yourself failiarised with Boogie, there is a playground offered at https://rise4fun.com/Boogie/.
specification_template.txt
gives an overview on the template of the specification.
The tool performs the following checks
Ensures whether the specificaiton respects Boogie's syntax and there are no anomalies in the specification.
Ensures whether the specification meets the specification template
Checks the following
- the number of function parameters = number of global variables
- all global variables should have a function parameter with the same name
- return value should be bool
Checks the following
- all global variables should be present in greater than function as pairs with suffixes
1
and2
- must have return value bool
Checks the following
- number of parameters of merge = number of variables in modifies clause = number of variables declared
- all modifies variable must have a parameter with the same datatype
- the name of the parameter corresponding to each global variable should be with suffix
1
Ensures whether the state is a semi-lattice. It checks whether each update is monotonically non-decreasing and the merge is the least upper bound.
This checks whether each update and merge satisfies the invariant and the pre-condition of merge.
docker-compose run test-unit