|
Just curious, what more complex properties do you like to be supported in Apalache? Many tools that are built on top of z3 are checking inductive invariants. By having a strong enough inductive invariant, you should be able to check safety. If you like to check your specification for arbitrary parameters, then you will have to use quantifiers in z3, which would require a lot of care to write SMT constraints in a way that helps z3 to deal with the quantifiers. The mix of sets and cardinalities is especially hard for SMT. Although academia is making a lot of progress in this direction, e.g., see [1], the mainstream solvers are still leaving you with the problem of encoding sets and cardinalities all by yourself. Some provers use quantifiers in z3. For instance, IVy [1] can check inductive invariants of systems that have arbitrary size. However, you have to rewrite your specification in uninterpreted first-order logic, e.g., you would have to think about abstracting away integers. Moreover, to make invariant checking decidable, you would have to transform your specification into a special fragment that is called EPR. [1] Ruzica Piskac. Efficient Automated Reasoning About Sets and Multisets with Cardinality Constraints. VMCAI, 2020. https://link.springer.com/chapter/10.1007%2F978-3-030-51074-... [2] http://microsoft.github.io/ivy/ |
I realize this is a tall order, but I think nuXmv [1] already implements some kind of SMT-based LTL model checking, so it should be possible to achieve something similar for TLA+ (or at least a subset).
> to make invariant checking decidable
Of course decidability is desirable, but efficient sound procedures in the undecidable case would still solve many practical problems. I realize they are not as "nice" from a theoretical/academic standpoint, though.
[1] https://nuxmv.fbk.eu/