Fault is a domain specific language for building models of complex systems
Most languages for formal system specification are designed to prove system properties correct. But since the learning curve for writing models in these languages is so steep, when the beginner receives a positive result (no failure cases) it is almost certainly because they haven’t written the model correctly. This creates a weird and frustrating experience where new users can’t trust their success and can’t appreciate their progresss.
Fault can be used in this way if you want, but that’s not what I built it for. Fault is based on the assumption that ALL systems fail eventually. The purpose of a specification written in Fault is to explore the conditions under which the system might fail.
This is worth keep track of. Format system specification languages are very powerful but they have high learning curve. Software engineering industry can use more formal specification to verify that our systems are robusts.